<?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>154383</bug_id>
          
          <creation_ts>2016-02-17 21:59:30 -0800</creation_ts>
          <short_desc>Remove remaining references to LLVM, and make sure comments refer to the backend as &quot;B3&quot; not &quot;LLVM&quot;</short_desc>
          <delta_ts>2016-02-18 08:56:21 -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>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1165910</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 21:59:30 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165922</commentid>
    <comment_count>1</comment_count>
      <attachid>271632</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 22:14:23 -0800</bug_when>
    <thetext>Created attachment 271632
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165923</commentid>
    <comment_count>2</comment_count>
      <attachid>271633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 22:16:09 -0800</bug_when>
    <thetext>Created attachment 271633
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165925</commentid>
    <comment_count>3</comment_count>
      <attachid>271634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 22:18:19 -0800</bug_when>
    <thetext>Created attachment 271634
redacted patch

EWS doesn&apos;t understand recursive deletion of directories, so the previous two patches didn&apos;t apply.  This patch excludes some of the file deletions to try to make EWS happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165929</commentid>
    <comment_count>4</comment_count>
      <attachid>271635</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-17 22:25:53 -0800</bug_when>
    <thetext>Created attachment 271635
redacted patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1165934</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-17 22:28:50 -0800</bug_when>
    <thetext>Attachment 271635 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:111:  _ftc_lowValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:112:  _ftc_highValue is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:113:  _ftc_typesPassedThrough is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:205:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:217:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:226:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:229:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1694:  Wrong number of spaces before statement. (expected: 28)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1694:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1712:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1712:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1713:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1715:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1717:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1718:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1719:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1719:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1720:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1721:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1723:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1724:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1729:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1734:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1719:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1719:  Comma should be at the beginning of the line in a member initialization list.  [whitespace/init] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1720:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1721:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1723:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1724:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1729:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1734:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2054:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2074:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2276:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2298:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2313:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2845:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2871:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2876:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2879:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2880:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:2885:  Wrong number of spaces before statement. (expected: 24)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3449:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:3867:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4480:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4654:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4657:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4666:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4669:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4678:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4681:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4690:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4693:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4732:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4756:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4791:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4847:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4893:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4969:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5056:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5062:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5545:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5557:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5750:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5773:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5792:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:5805:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6180:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6848:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6872:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6887:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7252:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7271:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7317:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7332:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7372:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:7388:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8522:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8541:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8560:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:8577:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9403:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9722:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9933:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:9961:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:10372:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/wasm/WASMFunctionParser.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 88 in 25 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>1165945</commentid>
    <comment_count>6</comment_count>
      <attachid>271635</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-02-17 23:18:28 -0800</bug_when>
    <thetext>Comment on attachment 271635
redacted patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166031</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 08:00:20 -0800</bug_when>
    <thetext>*** Bug 154389 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166036</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 08:40:51 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/196756</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166042</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 08:45:49 -0800</bug_when>
    <thetext>This broke the CMake build and I am landing a follow-up fix now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166045</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 08:48:30 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; This broke the CMake build and I am landing a follow-up fix now.

Landed in http://trac.webkit.org/changeset/196758</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166048</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-18 08:56:21 -0800</bug_when>
    <thetext>Fixed VS build in http://trac.webkit.org/changeset/196759</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271632</attachid>
            <date>2016-02-17 22:14:23 -0800</date>
            <delta_ts>2016-02-17 22:16:09 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>976835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSByZW1haW5pbmcgcmVmZXJlbmNlcyB0byBMTFZNLCBhbmQgbWFrZSBzdXJlIGNvbW1l
bnRzIHJlZmVyIHRvIHRoZSBiYWNrZW5kIGFzICJCMyIgbm90ICJMTFZNIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBkaWQgYSBncmVwIC1pIGxsdm0g
b2YgYWxsIG9mIG91ciBjb2RlIGFuZCBkaWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2gg
b2NjdXJlbmNlOgorCisgICAgICAgIC0gUmVuYW1lZCBpdCB0byBCMy4gVGhpcyBpcyBhcHByb3By
aWF0ZSB3aGVuIHdlIHdlcmUgdXNpbmcgIkxMVk0iIHRvIG1lYW4gInRoZSBGVEwKKyAgICAgICAg
ICBiYWNrZW5kIi4KKworICAgICAgICAtIFJlbW92ZWQgdGhlIHJlZmVyZW5jZSBiZWNhdXNlIEkg
Zm91bmQgaXQgdG8gYmUgZGVhZC4gSW4gc29tZSBjYXNlcyBpdCB3YXMgYSBkZWFkCisgICAgICAg
ICAgY29tbWVudDogaXQgd2FzIHRlbGxpbmcgdXMgdGhpbmdzIGFib3V0IHdoYXQgTExWTSBkaWQg
YW5kIHRoYXQncyBqdXN0IG5vdCByZWxldmFudAorICAgICAgICAgIGFueW1vcmUuIEluIG90aGVy
IGNhc2VzIGl0IHdhcyBkZWFkIGNvZGUgdGhhdCBJIGZvcmdvdCB0byBkZWxldGUgaW4gYSBwcmV2
aW91cyBwYXRjaC4KKworICAgICAgICAtIEVkaXRlZCB0aGUgY29tbWVudCBpbiBzb21lIHNtYXJ0
IHdheS4gVGhlcmUgd2VyZSBjb21tZW50cyB0YWxraW5nIGFib3V0IHdoYXQgTExWTSBkaWQKKyAg
ICAgICAgICB0aGF0IHdlcmUgc3RpbGwgb2YgaW50ZXJlc3QuIEluIHNvbWUgY2FzZXMsIEkgYWRk
ZWQgYSBGSVhNRSB0byBjb25zaWRlciBjaGFuZ2luZyB0aGUKKyAgICAgICAgICBjb2RlIGJlbG93
IHRoZSBjb21tZW50IG9uIHRoZSBncm91bmRzIHRoYXQgaXQgd2FzIHdyaXR0ZW4gaW4gYSB3ZWly
ZCB3YXkgdG8gcGxhY2F0ZQorICAgICAgICAgIExMVk0gYW5kIHNvIHdlIGNhbiBkbyBpdCBiZXR0
ZXIgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxl
VGltZVN0YXRzKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
VW5pZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpmdGxV
bnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Okxvd2Vy
REZHVG9CMyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0
aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6aXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6dW5ib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6bG93ZXJERkdUb0IzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhOZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlT3ZlcnJpZGVzSGFzSW5z
dGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06
OmlzQm9vbGVhbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6dW5ib3hCb29sZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpsb3dlckRGR1RvTExWTSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmguCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFdlaWdodC5oOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdo
dDo6ZnJlcXVlbmN5Q2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdodDo6aW52ZXJzZSk6
CisgICAgICAgIChKU0M6OkZUTDo6V2VpZ2h0OjpzY2FsZVRvVG90YWwpOiBEZWxldGVkLgorICAg
ICAgICAqIGZ0bC9GVExXZWlnaHRlZFRhcmdldC5oOgorICAgICAgICAoSlNDOjpGVEw6OnJhcmVs
eSk6CisgICAgICAgIChKU0M6OkZUTDo6dW5zdXJlKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbHZtOiBSZW1v
dmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
bGx2bS9saWJyYXJ5OiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9MTFZNVHJhcENh
bGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L2xpYmxsdm1Gb3JKU0Mu
dmVyc2lvbjogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oLgorICAgICAgICAq
IHdhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorCiAyMDE2LTAyLTE3ICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFSTTY0OiBTdXBwb3J0
IHRoZSBpbW1lZGlhdGUgZm9ybWF0IHVzZWQgZm9yIGJpdCBvcGVyYXRpb25zIGluIEFpcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk2NzQyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE2LDcgKzEwMTYsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExMYXp5
U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9j
YXRpb24uY3BwCi0gICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKKyAgICAgICAgZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAg
ICBmdGwvRlRMT1NSRXhpdC5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTGludXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZN
TGludXguY3BwCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2
bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFs
aXplTExWTS5oIgotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk1Q
T1NJWC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQ
dHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVuY3Rp
b24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24oYm9vbCB2ZXJib3NlKQotewotI2lmIFBMQVRG
T1JNKEdUSykKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgTExWTUluaXRpYWxpemVy
RnVuY3Rpb24gZnVuY3Rpb24gPSBnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvblBPU0lYKCJsaWJs
bHZtRm9ySlNDLnNvIiwgdmVyYm9zZSk7Ci0gICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICByZXR1
cm4gZnVuY3Rpb247Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgY2hhciogbGlibGx2bUZvckpT
Q0luc3RhbGxlZFBhdGggPSBMSUJESVIgR19ESVJfU0VQQVJBVE9SX1MgImphdmFzY3JpcHRjb3Jl
Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9TRVBBUkFUT1JfUzsKLSAg
ICBHVW5pcXVlUHRyPGNoYXI+IGxpYmxsdm1Gb3JKU0NGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1l
KGxpYmxsdm1Gb3JKU0NJbnN0YWxsZWRQYXRoLCAibGlibGx2bUZvckpTQy5zbyIsIG51bGxwdHIp
KTsKLSAgICByZXR1cm4gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChsaWJsbHZtRm9y
SlNDRmlsZW5hbWUuZ2V0KCksIHZlcmJvc2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZ2V0TExWTUlu
aXRpYWxpemVyRnVuY3Rpb25QT1NJWCgibGlibGx2bUZvckpTQy5zbyIsIHZlcmJvc2UpOwotI2Vu
ZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNw
cAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlh
bGl6ZUxMVk1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNLmgiCi0KLSNpbmNsdWRlICJMTFZNQVBJ
LmgiCi0jaW5jbHVkZSA8V2luZG93cy5oPgotCi0jaWYgSEFWRShMTFZNKQotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rp
b24oYm9vbCAvKiB2ZXJib3NlICovKQotewotICAgIGNvbnN0IHdjaGFyX3QqIGxpYnJhcnlOYW1l
ID0gTCJsaWJsbHZtRm9ySlNDLmRsbCI7Ci0KLSAgICBITU9EVUxFIGxpYnJhcnkgPSA6OkxvYWRM
aWJyYXJ5KGxpYnJhcnlOYW1lKTsKLQotICAgIGlmICghbGlicmFyeSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0gImluaXRpYWxpemVBbmRH
ZXRKU0NMTFZNQVBJIjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PExMVk1Jbml0aWFsaXplckZ1
bmN0aW9uPihHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCBzeW1ib2xOYW1lKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgJKHJl
dmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExW
TVRyYXBDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNVHJhcENh
bGxiYWNrX2gKLSNkZWZpbmUgTExWTVRyYXBDYWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1leHRlcm4gdm9pZCAoKmdfbGx2bVRyYXBDYWxsYmFjaykoY29uc3QgY2hh
ciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47Ci0KLSNlbmRpZiAvLyBMTFZNVHJhcENhbGxiYWNr
X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9y
SlNDLnZlcnNpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24JKHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotTExWTUZPUkpTQyB7Ci0gICAgZ2xvYmFsOiBpbml0aWFs
aXplQW5kR2V0SlNDTExWTUFQSTsKLSAgICBsb2NhbDogKjsKLX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTczMiw4ICs3MzIsOCBAQAogCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q29tcGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgKi87
IH07CiAJCTBGRUEwQTBFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMzE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovOyB9Owot
CQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA1MTcwNTEzREIw
MEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi87
IH07CisJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA1MTcwNTEz
REIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTA3MTcwNTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAv
KiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEExNTE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovOyB9OwogCQkw
RkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE3MTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICovOyB9OwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAK
IAkJN0IzOUY3NkUxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMzlGNzZBMUI2MkRFMjIw
MDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0IzOUY3NzAxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01S
ZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdC
MzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0IzOUY3NzIxQjYzNTc0RDAwMzYwRkI0
IC8qIFdBU01SZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovOyB9
OwotCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjgz
MjlCRTFCQjIxRkQxMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I4MzI5QkYx
QkIyMUZFMzAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0
OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLzsg
fTsKIAkJN0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAw
MjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdE
MjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODg2LDggKzI4ODYsOCBAQAogCQkwRkVBMEEw
MTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExDb21waWxlLmg7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklU
Q29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKSVRDb2Rl
LmNwcDsgcGF0aCA9IGZ0bC9GVExKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFQTBBMDMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSklUQ29kZS5oOyBwYXRoID0gZnRsL0ZUTEpJVENv
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTExvd2VyREZHVG9MTFZNLmNwcDsgcGF0aCA9IGZ0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUEwQTA1MTcwNTEzREIw
MEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExMb3dlckRGR1RvTExWTS5oOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9MTFZN
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvQjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRlRMTG93ZXJERkdUb0IzLmNwcDsgcGF0aCA9IGZ0bC9GVExMb3dlckRGR1RvQjMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMTG93ZXJERkdUb0IzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TExvd2VyREZHVG9CMy5oOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9CMy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwNzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhdGUuaDsgcGF0aCA9IGZ0
bC9GVExTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEExNTE3MDZC
QjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMU3RhdGUuY3BwOyBwYXRoID0gZnRsL0ZUTFN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExBYnN0
cmFjdEhlYXAuY3BwOyBwYXRoID0gZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNDQ5LDcgKzM0NDksNyBAQAogCQk3QjM5Rjc2QTFCNjJERTIy
MDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCMzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVJlYWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rp
b25MTFZNSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNC
MUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjk4
RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NTU1LDggKzQ1NTUsOCBAQAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRB
NSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExv
Y2F0aW9uLmNwcCAqLywKIAkJCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uaCAqLywKLQkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xM
Vk0uY3BwICovLAotCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5oICovLAorCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
QjMuY3BwICovLAorCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
QjMuaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVW
YWx1ZS5oICovLAogCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLywKIAkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5o
ICovLApAQCAtNTM3NCw3ICs1Mzc0LDcgQEAKIAkJCQk3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAg
LyogV0FTTUNvbnN0YW50cy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBX
QVNNRm9ybWF0LmggKi8sCiAJCQkJN0IyRTAxMEQxQjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5j
dGlvbkNvbXBpbGVyLmggKi8sCi0JCQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01G
dW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oICovLAorCQkJCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2
RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJN0IwMjQ3NTMxQjg2ODJE
NTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi8sCiAJCQkJN0IwMjQ3NTQxQjg2
ODJENTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovLAogCQkJCTdCMDI0NzU4MUI4
NjhFQUUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggKi8sCkBAIC03MzU0
LDcgKzczNTQsNyBAQAogCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xv
d1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUg
LyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0
IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVBMEExMDE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUEwQTEw
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5RDAyMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTkxLDcgKzc5OTEsNyBAQAogCQkJCTdCMDI0
NzU1MUI4NjgyREQwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0IyRTAxMEUxQjk3QUE2OTAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0
aW9uTExWTUlSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjgzMjlCRjFCQjIxRkUz
MDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJN0IwMjQ3NTcxQjg2ODJFNDAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2QjhBREQxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODg4MCw3ICs4ODgwLDcg
QEAKIAkJCQkwRkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
OUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw3ICs0MjgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIENsb25lZEFyZ3VtZW50cywgd2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGRvbmUgYSBzZXBhcmF0ZSBib3VuZHMgY2hlY2suCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgY29kZSB3aWxsIGNhdXNlIHVzIHRvIGhhdmUgdHdvIGJvdW5kcyBjaGVja3Mg
LSB0aGUgb3JpZ2luYWwgb25lIHRoYXQgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFk
eSBmYWN0b3JlZCBvdXQgaW4gU1NBTG93ZXJpbmdQaGFzZSwgYW5kIHRoZSBuZXcgb25lIHdlIGlu
c2VydCBoZXJlLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICAvLyBvZnRlbiBpbXBsaWNp
dGx5IHBhcnQgb2YgR2V0TXlBcmd1bWVudEJ5VmFsLiBMTFZNIHdpbGwgcHJvYmFibHkgZWxpbWlu
YXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvZnRlbiBpbXBsaWNpdGx5IHBhcnQgb2Yg
R2V0TXlBcmd1bWVudEJ5VmFsLiBCMyB3aWxsIHByb2JhYmx5IGVsaW1pbmF0ZSB0aGUKICAgICAg
ICAgICAgICAgICAgICAgLy8gc2Vjb25kIGJvdW5kcyBjaGVjaywgYnV0IHN0aWxsIC0gdGhhdCdz
IGp1c3Qgc2lsbHkuCiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzYKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgR3JhcGg7CiAKIC8vIENvbXB1dGVzIEJhc2ljQmxv
Y2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cg
dHlwZSBpbmZlcmVuY2UKIC8vIG92ZXIgTW92SGludHMgYW5kIFNldExvY2Fscy4gVGhpcyBhbmFs
eXNpcyBpcyBydW4gZGlyZWN0bHkgYnkgdGhlIFBsYW4gZm9yIHByZXBhcmluZyBmb3IKLS8vIGxv
d2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4g
Tm90ZSB0aGF0IGlmIHlvdSBydW4gaXQgYmVmb3JlCisvLyBsb3dlcmluZyB0byBCMyBJUiwgYnV0
IGl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1biBp
dCBiZWZvcmUKIC8vIHN0YWNrIGxheW91dCwgYWxsIG9mIHRoZSBmbHVzaCBhdmFpbGFiaWxpdHkg
d2lsbCBvbWl0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIC0gYnV0IGl0IHdpbGwKIC8vIHRlbGwgeW91
IHRoZSBmb3JtYXQuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQAogI2luY2x1ZGUgIkZUTENvbXBpbGUu
aCIKICNpbmNsdWRlICJGVExGYWlsLmgiCiAjaW5jbHVkZSAiRlRMTGluay5oIgotI2luY2x1ZGUg
IkZUTExvd2VyREZHVG9MTFZNLmgiCisjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0IzLmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNlbmRpZgogCkBAIC05OCw3ICs5OCw3IEBAIG5hbWVzcGFjZSB7
CiBkb3VibGUgdG90YWxERkdDb21waWxlVGltZTsKIGRvdWJsZSB0b3RhbEZUTENvbXBpbGVUaW1l
OwogZG91YmxlIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7Ci1kb3VibGUgdG90YWxGVExMTFZNQ29t
cGlsZVRpbWU7Citkb3VibGUgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCiB2b2lkIGR1bXBBbmRW
ZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9yY2VEdW1w
ID0gZmFsc2UpCiB7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICBpZiAoaXNGVEwobW9kZSkpIHsKICAgICAgICAgICAg
IHRvdGFsRlRMQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CiAgICAgICAgICAgICB0b3Rh
bEZUTERGR0NvbXBpbGVUaW1lICs9IG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKLSAgICAgICAg
ICAgIHRvdGFsRlRMTExWTUNvbXBpbGVUaW1lICs9IGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMOwor
ICAgICAgICAgICAgdG90YWxGVExCM0NvbXBpbGVUaW1lICs9IGFmdGVyIC0gbV90aW1lQmVmb3Jl
RlRMOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0g
YWZ0ZXIgLSBiZWZvcmU7CiAgICAgfQpAQCAtNDYzLDEyICs0NjMsMTIgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAgICAgcmV0dXJuIENhbmNlbFBh
dGg7CiAKICAgICAgICAgRlRMOjpTdGF0ZSBzdGF0ZShkZmcpOwotICAgICAgICBGVEw6Omxvd2Vy
REZHVG9MTFZNKHN0YXRlKTsKKyAgICAgICAgRlRMOjpsb3dlckRGR1RvQjMoc3RhdGUpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGNvbXB1dGVDb21waWxlVGltZXMoKSkKICAgICAgICAgICAgIG1f
dGltZUJlZm9yZUZUTCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CiAgICAgICAg
IAotICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpiM0Fsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7CiAg
ICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7
CiAgICAgICAgIH0KQEAgLTQ3Nyw3ICs0NzcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxh
bjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2Vs
bGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gQ2FuY2VsUGF0aDsKICAgICAgICAgCi0gICAgICAg
IGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5rKCkpIHsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OmIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rKCkpIHsKICAgICAgICAgICAgIEZUTDo6
ZmFpbChzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQpAQCAt
NjY2LDcgKzY2Niw3IEBAIEhhc2hNYXA8Q1N0cmluZywgZG91YmxlPiBQbGFuOjpjb21waWxlVGkK
ICAgICAgICAgcmVzdWx0LmFkZCgiREZHIENvbXBpbGUgVGltZSIsIHRvdGFsREZHQ29tcGlsZVRp
bWUpOwogICAgICAgICByZXN1bHQuYWRkKCJGVEwgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExDb21w
aWxlVGltZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCAoREZHKSBDb21waWxlIFRpbWUiLCB0
b3RhbEZUTERGR0NvbXBpbGVUaW1lKTsKLSAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChCMykgQ29t
cGlsZSBUaW1lIiwgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUpOworICAgICAgICByZXN1bHQuYWRk
KCJGVEwgKEIzKSBDb21waWxlIFRpbWUiLCB0b3RhbEZUTEIzQ29tcGlsZVRpbWUpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZm9y
IHN1bmtlbiBQdXRTdGFja3MgaW4gdGhlIHByZXNlbmNlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wg
ZmxvdyBtZXJnZXMsIGFuZCB3aGVyZSB0aGUKICAgICAgICAgLy8gdmFsdWUgYmVpbmcgUHV0U3Rh
Y2snZCBpcyBhbHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29kZS4gV2UgY291bGQgd29y
ayBhcm91bmQgdGhpcwogICAgICAgICAvLyBieSBkb2luZyB0aGUgc2lua2luZyBvdmVyIENQUywg
b3IgbWF5YmUganVzdCBieSBkb2luZyByZWFsbHkgc21hcnQgaG9pc3RpbmcuIEl0J3MgYWxzbwot
ICAgICAgICAvLyBwb3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNhbiBiZSBk
ZWR1cGxpY2F0ZWQgYnkgTExWTS4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQorICAgICAgICAvLyBw
b3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNhbiBiZSBkZWR1cGxpY2F0ZWQg
YnkgQjMuIEl0IHdvdWxkIGJlIGJlc3QgaWYgd2UKICAgICAgICAgLy8gY291bGQgb2JzZXJ2ZSB0
aGF0IHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgZ3JhcGggaW4gcGxhY2UgdGhhdCBkb2VzIHdoYXQg
d2Ugd2FudC4gSW4KICAgICAgICAgLy8gcHJpbmNpcGxlIGlmIHdlIGhhdmUgYSByZXF1ZXN0IHRv
IHBsYWNlIGEgUGhpIGF0IGEgcGFydGljdWxhciBwbGFjZSwgd2UgY291bGQganVzdCBjaGVjawog
ICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIHRoYXQgZG9lcyB3aGF0IHdlIHdh
bnQuIEJlY2F1c2UgUHV0U3RhY2tTaW5raW5nUGhhc2UgcnVucyBqdXN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlz
aW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEyICs4MSw2IEBAIGNsYXNzIEdyYXBoOwog
Ly8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBoaSBwcmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3Vs
ZCBoYXZlIHRvIGJlCiAvLyAgIHVwZGF0ZWQpLgogLy8KLS8vICAgVGhlIGVhc2llc3Qgd2F5IHRv
IGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3JtIGludG8gYSBkaWZmZXJlbnQgU1NBCi0vLyAgIGZv
cm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lvbiBmb3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywg
dHJlYXQgZWFjaAotLy8gICBQaGkgaW4gb3VyIElSIGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0
aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCi0vLyAgIGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhh
bXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJlZmVyIHRvIHRoZSBQaGkKLS8vICAgYmVjb21lIHN0
b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZlcyBiZWNvbWUgbG9hZHMuCi0vLwogLy8gICBGdW4g
ZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBiZWNhdXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4g
dGhlCiAvLyAgIGFscGhhYmV0LiBJdCBjYW4gYmUgd3JpdHRlbiBhcyAiWSIuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgJKHJldmlzaW9uIDE5Njc0MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDYgQEAgY2xhc3MgR3JhcGg7CiAv
LyBhYmlsaXR5IHRvIGRvIGFjY3VyYXRlIHN0YXRpYyBlc3RpbWF0aW9ucy4gSGVuY2Ugd2UgbG9j
ayBpbiB0aGUgZXN0aW1hdGVzIGVhcmx5LgogLy8gSWRlYWxseSwgd2Ugd291bGQgaGF2ZSBkeW5h
bWljIGluZm9ybWF0aW9uLCBidXQgd2UgZG9uJ3QgcmlnaHQgbm93LCBzbyB0aGlzIGlzIGFzCiAv
LyBnb29kIGFzIGl0IGdldHMuCi0vLwotLy8gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpZiB3ZSBk
aWRuJ3QgaGF2ZSB0aGlzIHBoYXNlLCB0aGVuIHRoZSBzdGF0aWMgZXN0aW1hdGlvbgotLy8gd291
bGQgYmUgcGVyZm9tZWQgYnkgTExWTSBpbnN0ZWFkLiBJdCdzIHdvcnRoIHRyeWluZyB0byBtYWtl
IHRoaXMgcGhhc2UgcGVyZm9ybQotLy8gdGhlIGVzdGltYXRlcyB1c2luZyB0aGUgc2FtZSBoZXVy
aXN0aWNzIHRoYXQgTExWTSB3b3VsZCB1c2UuCiAKIGJvb2wgcGVyZm9ybVN0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvbihHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDEwICs2MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byByZXZlcnNl
IHRoZSBvcmRlciBvZiB1bmlmaWNhdGlvbiBiZWNhdXNlIGl0IGhlbHBzIHRvIHJldmVhbAotICAg
ICAgICAgICAgICAgICAgICAvLyBtb3JlIGJ1Z3Mgb24gb3VyIGVuZCwgdGhvdWdoIGl0J3Mgb3Ro
ZXJ3aXNlIG5vdCBvYnNlcnZhYmxlLiBCdXQgd2UgZG8gaXQKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpcyB3YXkgYmVjYXVzZSBpdCB3b3JrcyBhcm91bmQgYSBidWcgaW4gb3BlbiBzb3VyY2Ug
TExWTSdzIGxpdmUtb3V0cwotICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRhdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHJldmVyc2luZyB0aGUgb3JkZXIg
b2YgdGhpcyB1bmlmaWNhdGlvbiwgc2luY2UgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIG9yZGVyIHdpbGwgcmV2ZWFsIG1vcmUgYnVncy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NDM2OAogICAgICAgICAgICAgICAgICAgICBwaGktPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT51bmlmeShwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjRE
aXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTcgKzU2LDMgQEAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibAog
CiAjZW5kaWYgLy8gVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKIAotI2lmIFVTRShMTFZNX0RJU0FT
U0VNQkxFUikgJiYgQ1BVKEFSTTY0KQotCi0jaW5jbHVkZSAiTExWTURpc2Fzc2VtYmxlci5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwg
UHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50IGhpbnQpCi17Ci0gICAgcmV0
dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRoTExWTShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCwg
aGludCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKExMVk1fRElT
QVNTRU1CTEVSKSAmJiBDUFUoQVJNNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY3
NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi0jaWYgVVNFKFVESVM4NikgfHwg
KFVTRShMTFZNX0RJU0FTU0VNQkxFUikgJiYgKENQVShYODZfNjQpIHx8IENQVShYODYpKSkKKyNp
ZiBVU0UoVURJUzg2KQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgpAQCAtMzUsMTMgKzM1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LS8vIFRoaXMgaG9ycmlmeWluZyBtb25zdGVyIGlzIG5lZWRlZCBiZWNhdXNlIG5laXRoZXIgb2Yg
b3VyIGRpc2Fzc2VtYmxlcnMgc3VwcG9ydHMKLS8vIGFsbCBvZiB4ODYsIGFuZCB1c2luZyB0aGVt
IHRvZ2V0aGVyIHRvIGRpc2Fzc2VtYmxlIHRoZSBzYW1lIGluc3RydWN0aW9uIHN0cmVhbQotLy8g
d291bGQgcmVzdWx0IGluIGEgZmFpcmx5IGphcnJpbmcgcHJpbnQtb3V0IHNpbmNlIHRoZXkgcHJp
bnQgaW4gZGlmZmVyZW50Ci0vLyBzdHlsZXMuIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaW4gdGhl
IGZ1dHVyZSwgYnV0IGZvciBub3cgdGhlIGNhbGxlciBoaW50cwotLy8gd2hldGhlciBoZSdzIHVz
aW5nIHRoZSBzdWJzZXQgb2YgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IG91ciBNYWNyb0Fzc2VtYmxl
cgotLy8gc3VwcG9ydHMgKGluIHdoaWNoIGNhc2Ugd2UgZ28gd2l0aCBVRGlzODYpIG9yIGlmIGhl
J3MgdXNpbmcgdGhlIExMVk0gc3Vic2V0LgotCiBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciog
cHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxl
V2l0aFVEaXM4Nihjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCk7CkBAIC00OSw1ICs0Miw1IEBA
IGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmwKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKLSNlbmRpZiAvLyBVU0UoVURJUzg2KSB8fCBVU0UoTExWTV9ESVNBU1NFTUJMRVIp
CisjZW5kaWYgLy8gVVNFKFVESVM4NikKICNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAko
cmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDkgQEAgdm9pZCBJbmRleGVk
QWJzdHJhY3RIZWFwOjppbml0aWFsaXplKEFicwogICAgIC8vCiAgICAgLy8gICAgQmxhaF9uZWdf
QQogICAgIC8vCi0gICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBMTFZNIHVzZXMgdGhl
IHN0cmluZyB0byBkaXN0aW5ndWlzaCB0aGUgdHlwZXMuCisgICAgLy8gVGhpcyB1c2VkIHRvIGJl
IGltcG9ydGFudCBiZWNhdXNlIHdlIHVzZWQgdG8gdXNlIHRoZSBzdHJpbmcgdG8gZGlzdGluZ3Vp
c2ggdGhlIHR5cGVzLiBUaGlzIGlzCisgICAgLy8gbm90IHJlbGV2YW50IGFueW1vcmUsIGFuZCB0
aGlzIGNvZGUgd2lsbCBiZSByZW1vdmVkIGV2ZW50dWFsbHkuCisgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMTkKICAgICAKICAgICBzdGF0
aWMgY29uc3QgY2hhciogbmVnU3BsaXQgPSAiX25lZ18iOwogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBwb3NTcGxpdCA9ICJfIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLS8vIFRoZSBGVEwgSklUIHRyaWVz
IHRvIGFpZCBMTFZNJ3MgVEJBQS4gVGhlIEZUTCdzIG5vdGlvbiBvZiBob3cgdGhpcwotLy8gaGFw
cGVucyBpcyB0aGUgQWJzdHJhY3RIZWFwLiBBYnN0cmFjdEhlYXBzIGFyZSBhIHNpbXBsZSB0eXBl
IHN5c3RlbQotLy8gd2l0aCBzdWItdHlwaW5nLgorLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2Ug
dXNlZCB0byBnZW5lcmF0ZSBMTFZNJ3MgVEJBQS4gSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIHdhbnQg
dG8gZ2VuZXJhdGUKKy8vIEIzIEhlYXBSYW5nZXMgaW5zdGVhZC4KKy8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzE5CiAKIGNsYXNzIEFic3RyYWN0
SGVhcFJlcG9zaXRvcnk7CiBjbGFzcyBPdXRwdXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDEwICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogLy8g
VGhpcyBjbGFzcyBpcyBtb3N0bHkgdXNlZCBmb3IgT1NSOyBpdCdzIGEgd2F5IG9mIHNwZWNpZnlp
bmcgaG93IGEgdmFsdWUgaXMgZm9ybWF0dGVkCiAvLyBpbiBjYXNlcyB3aGVyZSBpdCB3b3VsZG4n
dCBoYXZlIGJlZW4gb2J2aW91cyBmcm9tIGxvb2tpbmcgYXQgb3RoZXIgaW5kaWNhdG9ycyAobGlr
ZQotLy8gdGhlIHR5cGUgb2YgdGhlIExMVk1WYWx1ZVJlZiBvciB0aGUgdHlwZSBvZiB0aGUgREZH
OjpOb2RlKS4gVHlwaWNhbGx5IHRoaXMgYXJpc2VzCi0vLyBiZWNhdXNlIExMVk1WYWx1ZVJlZiBk
b2Vzbid0IGdpdmUgdXMgdGhlIGdyYW51bGFyaXR5IHdlIG5lZWQgdG8gYmVnaW4gd2l0aCwgYW5k
IHdlCi0vLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5
IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKLS8vIGZyb20uCisvLyB0aGUgdHlwZSBv
ZiB0aGUgQjM6OlZhbHVlKiBvciB0aGUgdHlwZSBvZiB0aGUgREZHOjpOb2RlKS4KIAogY2xhc3Mg
Rm9ybWF0dGVkVmFsdWUgewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICBq
aXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoCiAgICAgICAgIEZJTkFMSVpF
X0NPREVfSUYoCiAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50TGlua0J1
ZmZlciwKLSAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExW
TSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZSht
X3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwor
ICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0
ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwogICAgIAogICAg
IG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Z3JhcGgubV9jb2RlQmxvY2s7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKICAgICAKLSAgICAv
LyBMTFZNIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgorICAgIC8v
IEIzIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgogICAgIGNvZGVC
bG9jay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAKICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCA9IGdyYXBoLnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0
ZXIgaGF2aW5nIGJveGVkIHVwIGFsbCBvZiB0aGUKICAgICAgICAgLy8gdmFsdWVzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLiBFdmVyeXRoaW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhp
cwogICAgICAgICAvLyBwb2ludCB3ZSd2ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNp
Y2FsbHkgd2UganVzdCBoYXZlIHRvIG1ha2UgdGhlCi0gICAgICAgIC8vIGNhbGwgdG8gdGhlIExM
Vk0tZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIGNhbGwgdG8gdGhlIEIzLWdlbmVyYXRlZCBj
b2RlLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcg
KzEzMCw3IEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKICAgICAK
ICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgIGNhc2UgUmVnaXN0ZXI6Ci0gICAgICAgIC8vIExM
Vk0gdXNlZCBzb21lIHJlZ2lzdGVyIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCEKKyAgICAgICAg
Ly8gQjMgdXNlZCBzb21lIHJlZ2lzdGVyIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCEKICAgICAg
ICAgZGF0YUxvZygiVW5yZWNvZ25pemVkIGxvY2F0aW9uOiAiLCAqdGhpcywgIlxuIik7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1
MSw4ICsxNTEsNiBAQCB2b2lkIExvY2F0aW9uOjpyZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBVbnByb2Nlc3NlZDoKLSAgICAgICAg
Ly8gU2hvdWxkIG5ldmVyIHNlZSB0aGlzIC0gaXQncyBhbiBlbnVtZXJhdGlvbiBlbnRyeSBvbiBM
TFZNJ3Mgc2lkZSB0aGF0IG1lYW5zIHRoYXQKLSAgICAgICAgLy8gaXQgaGFzbid0IHByb2Nlc3Nl
ZCB0aGlzIGxvY2F0aW9uLgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMTk2NzMxKQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoxOTY3MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDQ2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMb3dlckRGR1Rv
TExWTS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1
ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRG9taW5h
dG9ycy5oIgorI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAi
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRG
dXp6LmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIkZUTEF2YWlsYWJsZVJlY292ZXJ5LmgiCisj
aW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExM
YXp5U2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRl
ICJGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
CisjaW5jbHVkZSAiRlRMV2VpZ2h0ZWRUYXJnZXQuaCIKKyNpbmNsdWRlICJKSVRBZGRHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRBbmRHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRP
ckdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkpJVERpdkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUTXVsR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkpJVFN1YkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0dlbmVyYXRvckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIK
KyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMu
aCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKKyNpbmNsdWRl
IDxhdG9taWM+CisjaWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1
c2luZyBuYW1lc3BhY2UgQjM7Cit1c2luZyBuYW1lc3BhY2UgREZHOworCituYW1lc3BhY2Ugewor
CitzdGQ6OmF0b21pYzxpbnQ+IGNvbXBpbGVDb3VudGVyOworCisjaWYgQVNTRVJUX0RJU0FCTEVE
CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVhY2hhYmxlKCkKK3sK
KyAgICBDUkFTSCgpOworfQorI2Vsc2UKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZv
aWQgZnRsVW5yZWFjaGFibGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgdW5zaWduZWQgbm9kZUluZGV4KQoreworICAgIGRhdGFMb2coIkNyYXNoaW5n
IGluIHRob3VnaHQtdG8tYmUtdW5yZWFjaGFibGUgRlRMLWdlbmVyYXRlZCBjb2RlIGZvciAiLCBw
b2ludGVyRHVtcChjb2RlQmxvY2spLCAiIGF0IGJhc2ljIGJsb2NrICMiLCBibG9ja0luZGV4KTsK
KyAgICBpZiAobm9kZUluZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBkYXRhTG9nKCIsIG5vZGUg
QCIsIG5vZGVJbmRleCk7CisgICAgZGF0YUxvZygiLlxuIik7CisgICAgQ1JBU0goKTsKK30KKyNl
bmRpZgorCisvLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVk
dWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0aW5nCisvLyBzaWduaWZpY2FudGx5IGxlc3Mg
ZGVhZCBjb2RlLgorI2RlZmluZSBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChleGl0S2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9u
KSBkbyB7IFwKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dWYWx1
ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRWRnZSBfZnRjX2hpZ2hWYWx1ZSA9
IChoaWdoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQYXNzZWRUaHJvdWdo
KTsgIFwKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGln
aFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgdHlwZUNoZWNrKF9mdGNfbG93VmFsdWUsIF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVz
UGFzc2VkVGhyb3VnaCwgKGZhaWxDb25kaXRpb24pLCBleGl0S2luZCk7IFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKKworI2RlZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0
eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pIFwKKyAgICBGVExfVFlQRV9DSEVDS19X
SVRIX0VYSVRfS0lORChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pCisKK2NsYXNzIExvd2VyREZHVG9MTFZNIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMb3dlckRGR1RvTExWTSk7CitwdWJsaWM6CisgICAgTG93ZXJERkdU
b0xMVk0oU3RhdGUmIHN0YXRlKQorICAgICAgICA6IG1fZ3JhcGgoc3RhdGUuZ3JhcGgpCisgICAg
ICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX291dChzdGF0ZSkKKyAgICAgICAg
LCBtX3Byb2MoKnN0YXRlLnByb2MpCisgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKKyAg
ICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBsb3dlcigpCisgICAgeworICAgICAgICBTdGF0ZSogc3RhdGUgPSAm
bV9mdGxTdGF0ZTsKKyAgICAgICAgCisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgbmFtZSA9IHRvQ1N0
cmluZygKKyAgICAgICAgICAgICAgICAianNCb2R5XyIsICsrY29tcGlsZUNvdW50ZXIsICJfIiwg
Y29kZUJsb2NrKCktPmluZmVycmVkTmFtZSgpLAorICAgICAgICAgICAgICAgICJfIiwgY29kZUJs
b2NrKCktPmhhc2goKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmFtZSA9ICJqc0Jv
ZHkiOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CisKKyAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkZ1bmN0aW9uIHJlYWR5LCBiZWdpbm5pbmcgbG93ZXJpbmcuXG4iKTsKKworICAgICAgICBt
X291dC5pbml0aWFsaXplKG1faGVhcHMpOworCisgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBm
cmVxdWVuY3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAgICAgICAgbV9v
dXQuc2V0RnJlcXVlbmN5KDEpOworICAgICAgICAKKyAgICAgICAgbV9wcm9sb2d1ZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiUHJvbG9ndWUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0YWNr
T3ZlcmZsb3cgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0YWNrIG92ZXJmbG93IikpOworICAg
ICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhbmRsZSBF
eGNlcHRpb25zIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tBcmd1bWVu
dHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrIGFyZ3VtZW50cyIpKTsKKworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX291dC5zZXRGcmVxdWVuY3ko
bV9oaWdoQmxvY2stPmV4ZWN1dGlvbkNvdW50KTsKKyAgICAgICAgICAgIG1fYmxvY2tzLmFkZCht
X2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2sp
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBCYWNrIHRvIHByb2xvZ3VlIGZyZXF1ZW5jeSBm
b3IgYW55IGJvY2tzIHRoYXQgZ2V0IHNuZWFraWx5IGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0
aW9uIGNvZGUuCisgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIHN0YWNrT3ZlcmZsb3cpOworICAgICAgICBt
X291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAgICAgIGNy
ZWF0ZVBoaVZhcmlhYmxlcygpOworCisgICAgICAgIHNpemVfdCBzaXplT2ZDYXB0dXJlZCA9IHNp
emVvZihKU1ZhbHVlKSAqIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICBCMzo6
U2xvdEJhc2VWYWx1ZSogY2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVP
ZkNhcHR1cmVkKTsKKyAgICAgICAgbV9jYXB0dXJlZCA9IG1fb3V0LmFkZChjYXB0dXJlZEJhc2Us
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVPZkNhcHR1cmVkKSk7CisgICAgICAgIHN0YXRlLT5jYXB0
dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlLT5zbG90KCk7CisKKyAgICAgICAgYXV0byBwcmVPcmRl
ciA9IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpOworCisgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgY3JlYXRlIGFueSBhbGxvY2EncyBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB0aGV5IHdpbGwg
Y2Vhc2UgdG8KKyAgICAgICAgLy8gYmUgbWVtMnJlZyBjYW5kaWRhdGVzLgorICAgICAgICAKKyAg
ICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5mcmFtZVBvaW50ZXIoKTsKKyAgICAgICAgbV90YWdU
eXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKKyAgICAgICAgbV90
YWdNYXNrID0gbV9vdXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKKworICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBCMyBrbm93cyB0aGF0IHdlIHJlYWxseSBjYXJlIGFib3V0IHRoZSBtYXNrIHJlZ2lz
dGVycy4gVGhpcyBmb3JjZXMgdGhlCisgICAgICAgIC8vIGNvbnN0YW50cyB0byBiZSBtYXRlcmlh
bGl6ZWQgaW4gcmVnaXN0ZXJzLgorICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFn
VHlwZU51bWJlci0+a2V5KCkpOworICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFn
TWFzay0+a2V5KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29u
c3RJbnRQdHIoY29kZUJsb2NrKCkpLCBhZGRyZXNzRm9yKEpTU3RhY2s6OkNvZGVCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgZGlkT3ZlcmZsb3dT
dGFjaygpLCByYXJlbHkoc3RhY2tPdmVyZmxvdyksIHVzdWFsbHkoY2hlY2tBcmd1bWVudHMpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0YWNrT3ZlcmZsb3csIG1faGFuZGxl
RXhjZXB0aW9ucyk7CisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciksIG1fY2FsbEZyYW1lLCBt
X291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSkpOworICAgICAgICBtX291dC5wYXRjaHBvaW50
KFZvaWQpLT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHRlcm1pbmFsLCBzbyB3ZSBjYW4gY2xvYmJlciBldmVyeXRoaW5nLiBUaGF0J3Mgd2h5
IHdlIGRvbid0IGNsYWltIHRvCisgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBzY3JhdGNoLgor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVFeGNlcHRpb25zLCBjaGVja0FyZ3VtZW50
cyk7CisgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyID0g
c3RhdGUtPmV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIG1fb3V0LnBhdGNocG9pbnQoVm9pZCkt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoKmV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrQXJndW1lbnRzLCBsb3dCbG9jayhtX2dyYXBo
LmJsb2NrKDApKSk7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CisgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQorICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAg
bV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tp
XTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVl
ID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0
IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3Vt
ZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3QgcHV0IGluCisgICAgICAgICAgICAgICAgLy8g
cGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0
cyBiZWZvcmUgaXQuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgor
ICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMy
OgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNW
YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpz
VmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fb3V0Lmp1bXAo
bG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOworICAgICAgICAKKyAgICAgICAgZm9yIChERkc6
OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpCisgICAgICAgICAgICBjb21waWxlQmxvY2so
YmxvY2spOworCisgICAgICAgIC8vIFdlIGNyZWF0ZSBhbGwgUGhpJ3MgdXAgZnJvbnQsIGJ1dCB3
ZSBtYXkgdGhlbiBkZWNpZGUgbm90IHRvIGNvbXBpbGUgdGhlIGJhc2ljIGJsb2NrCisgICAgICAg
IC8vIHRoYXQgd291bGQgaGF2ZSBjb250YWluZWQgb25lIG9mIHRoZW0uIFNvIHRoaXMgY3JlYXRl
cyBvcnBoYW5zLCB3aGljaCB0cmlnZ2VycyBCMworICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWx1
cmVzLiBDYWxsaW5nIHRoaXMgZml4ZXMgdGhlIGlzc3VlLgorICAgICAgICAvLworICAgICAgICAv
LyBOb3RlIHRoYXQgeW91IHNob3VsZCBhdm9pZCB0aGUgdGVtcHRhdGlvbiB0byBtYWtlIHRoaXMg
Y2FsbCBjb25kaXRpb25hbCB1cG9uCisgICAgICAgIC8vIHZhbGlkYXRpb24gYmVpbmcgZW5hYmxl
ZC4gQjMgbWFrZXMgbm8gZ3VhcmFudGVlcyBvZiBhbnkga2luZCBvZiBjb3JyZWN0bmVzcyB3aGVu
CisgICAgICAgIC8vIGRlYWxpbmcgd2l0aCBJUiB0aGF0IHdvdWxkIGhhdmUgZmFpbGVkIHZhbGlk
YXRpb24uIEZvciBleGFtcGxlLCBpdCB3b3VsZCBiZSB2YWxpZCB0bworICAgICAgICAvLyB3cml0
ZSBhIEIzIHBoYXNlIHRoYXQgc28gYWdncmVzc2l2ZWx5IGFzc3VtZXMgdGhlIGxhY2sgb2Ygb3Jw
aGFucyB0aGF0IGl0IHdvdWxkIGNyYXNoCisgICAgICAgIC8vIGlmIGFueSBvcnBoYW5zIHdlcmUg
YXJvdW5kLiBXZSBtaWdodCBldmVuIGhhdmUgc3VjaCBwaGFzZXMgYWxyZWFkeS4KKyAgICAgICAg
bV9wcm9jLmRlbGV0ZU9ycGhhbnMoKTsKKworICAgICAgICAvLyBXZSBwdXQgdGhlIGJsb2NrcyBp
bnRvIHRoZSBCMyBwcm9jZWR1cmUgaW4gYSBzdXBlciB3ZWlyZCBvcmRlci4gTm93IHdlIHJlb3Jk
ZXIgdGhlbS4KKyAgICAgICAgbV9vdXQuYXBwbHlCbG9ja09yZGVyKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIAorICAgIHZvaWQgY3JlYXRlUGhpVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
REZHOjpQaGkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IExUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5mbGFncygpICYgTm9k
ZVJlc3VsdE1hc2spIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHREb3VibGU6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5kb3VibGVUeXBlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDMyOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1MjoKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gbV9vdXQuYm9vbGVhbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBtX291dC5pbnQ2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG5vZGUsICJCYWQgUGhpIG5vZGUgcmVzdWx0IHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcGhpcy5hZGQobm9k
ZSwgbV9wcm9jLmFkZDxWYWx1ZT4oQjM6OlBoaSwgdHlwZSwgT3JpZ2luKG5vZGUpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQmxvY2so
REZHOjpCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nIGJsb2NrICIsICpibG9j
aywgIlxuIik7CisgICAgICAgIAorICAgICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOworICAgICAg
ICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IGJsb2NrcyBjcmVhdGVkIHdoaWxlIGxv
d2VyaW5nIGNvZGUgaW4gdGhlIGhpZ2ggYmxvY2sgaGF2ZSB0aGUgZnJlcXVlbmN5IG9mCisgICAg
ICAgIC8vIHRoZSBoaWdoIGJsb2NrLiBUaGlzIGlzIGFwcHJvcHJpYXRlIGJlY2F1c2UgQjMgZG9l
c24ndCBuZWVkIHByZWNpc2UgZnJlcXVlbmNpZXMuIEl0IGp1c3QgbmVlZHMKKyAgICAgICAgLy8g
c29tZXRoaW5nIHJvdWdobHkgYXBwcm94aW1hdGUgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFs
bG9jYXRpb24uCisgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0
aW9uQ291bnQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Js
b2Nrcy5nZXQobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9uZXh0SGlnaEJsb2Nr
ID0gMDsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gbV9oaWdoQmxv
Y2stPmluZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25l
eHRCbG9ja0luZGV4KSB7CisgICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLmJs
b2NrKG5leHRCbG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9uZXh0TG93QmxvY2sg
PSBtX25leHRIaWdoQmxvY2sgPyBtX2Jsb2Nrcy5nZXQobV9uZXh0SGlnaEJsb2NrKSA6IDA7Cisg
ICAgICAgIAorICAgICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4dCBi
bG9jayBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQorICAgICAgICAvLyBnZW5lcmF0
ZWQgSVIgaW4gcm91Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3QgdGhl
IHBlcmZvcm1hbmNlCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ugd2Ug
ZXhwZWN0IExMVk0gdG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8vIG1h
a2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Js
b2NrLCBtX25leHRMb3dCbG9jayk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6ZnRs
Q3Jhc2hlcygpKQorICAgICAgICAgICAgbV9vdXQudHJhcCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFtX2hpZ2hCbG9jay0+Y2ZhSGFzVmlzaXRlZCkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
IGJlY2F1c2UgQ0ZBIGRpZG4ndCByZWFjaC5cbiIpOworICAgICAgICAgICAgY3Jhc2gobV9oaWdo
QmxvY2stPmluZGV4LCBVSU5UX01BWCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKG1f
aGlnaEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKKyAgICAgICAg
bV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAg
Zm9yIChtX25vZGVJbmRleCA9IDA7IG1fbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsg
KyttX25vZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFjb21waWxlTm9kZShtX25vZGVJbmRl
eCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
LlxuIik7CisgICAgICAgIGNyYXNoKCk7CisKKyAgICAgICAgLy8gSW52YWxpZGF0ZSBkb21pbmF0
ZWQgYmxvY2tzLiBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSB3b3VsZCBleHBlY3QKKyAg
ICAgICAgLy8gdGhlbSB0byBiZSBpbnZhbGlkYXRlZCBhbHJlYWR5LiBCdXQgeW91IGNhbiBoYXZl
IHRoZSBDRkEgYmVjb21lIG1vcmUKKyAgICAgICAgLy8gcHJlY2lzZSBvdmVyIHRpbWUgYmVjYXVz
ZSB0aGUgc3RydWN0dXJlcyBvZiBvYmplY3RzIGNoYW5nZSBvbiB0aGUgbWFpbgorICAgICAgICAv
LyB0aHJlYWQuIEZhaWxpbmcgdG8gZG8gdGhpcyB3b3VsZCByZXN1bHQgaW4gd2VpcmQgY3Jhc2hl
cyBkdWUgdG8gYSB2YWx1ZQorICAgICAgICAvLyBiZWluZyB1c2VkIGJ1dCBub3QgZGVmaW5lZC4g
UmFjZSBjb25kaXRpb25zIEZUVyEKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBERkc6
OkJhc2ljQmxvY2sqIHRhcmdldCA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKG1faGlnaEJsb2NrLCB0YXJnZXQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmxvY2sgIiwgKnRhcmdldCwgIiB3aWxsIGJhaWwg
YWxzby5cbiIpOworICAgICAgICAgICAgICAgIHRhcmdldC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjb21waWxlTm9k
ZSh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBzYWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X25vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgbV9vcmlnaW4gPSBt
X25vZGUtPm9yaWdpbjsKKyAgICAgICAgbV9vdXQuc2V0T3JpZ2luKG1fbm9kZSk7CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
ZGF0YUxvZygiTG93ZXJpbmcgIiwgbV9ub2RlLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1f
YXZhaWxhYmxlUmVjb3Zlcmllcy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBtX2ludGVy
cHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIERGRzo6VXBzaWxvbjoKKyAgICAgICAgICAgIGNvbXBp
bGVVcHNpbG9uKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OlBoaToK
KyAgICAgICAgICAgIGNvbXBpbGVQaGkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVDb25zdGFudCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICAgICAgICAgIGNvbXBp
bGVJbnQ1MkNvbnN0YW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3Vi
bGVSZXA6CisgICAgICAgICAgICBjb21waWxlRG91YmxlUmVwKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgY29tcGlsZURvdWJs
ZUFzSW50MzIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6VmFsdWVS
ZXA6CisgICAgICAgICAgICBjb21waWxlVmFsdWVSZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludDUyUmVwOgorICAgICAgICAgICAgY29tcGlsZUludDUyUmVwKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAg
ICBjb21waWxlVmFsdWVUb0ludDMyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAgICAgICBjb21waWxlQm9vbGVhblRvTnVtYmVyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR2V0U3RhY2s6CisgICAgICAgICAgICBjb21waWxlR2V0U3Rh
Y2soKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dFN0YWNrOgorICAgICAg
ICAgICAgY29tcGlsZVB1dFN0YWNrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBERkc6OkNoZWNrOgorICAgICAgICAgICAgY29tcGlsZU5vT3AoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRvVGhpczoKKyAgICAgICAgICAgIGNvbXBpbGVUb1RoaXMoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICAgICAg
Y29tcGlsZVZhbHVlQWRkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJD
YXQ6CisgICAgICAgICAgICBjb21waWxlU3RyQ2F0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAg
IGNvbXBpbGVBcml0aEFkZE9yU3ViKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcml0aENsejMyOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQ2x6MzIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICAgICAgY29tcGlsZUFy
aXRoTXVsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aERpdjoKKyAg
ICAgICAgICAgIGNvbXBpbGVBcml0aERpdigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJpdGhNb2Q6CisgICAgICAgICAgICBjb21waWxlQXJpdGhNb2QoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoTWluT3JNYXgoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQWJzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNpbjoKKyAgICAgICAgICAg
IGNvbXBpbGVBcml0aFNpbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJp
dGhDb3M6CisgICAgICAgICAgICBjb21waWxlQXJpdGhDb3MoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFyaXRoUG93OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUG93KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFJhbmRvbToKKyAgICAgICAg
ICAgIGNvbXBpbGVBcml0aFJhbmRvbSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJpdGhSb3VuZDoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFJvdW5kKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgICAgICBjb21waWxl
QXJpdGhTcXJ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aExvZzoK
KyAgICAgICAgICAgIGNvbXBpbGVBcml0aExvZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJpdGhGUm91bmQ6CisgICAgICAgICAgICBjb21waWxlQXJpdGhGUm91bmQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgICAgICAg
ICAgY29tcGlsZUFyaXRoTmVnYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBERkc6OkJpdEFuZDoKKyAgICAgICAgICAgIGNvbXBpbGVCaXRBbmQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0T3I6CisgICAgICAgICAgICBjb21waWxlQml0
T3IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0WG9yOgorICAg
ICAgICAgICAgY29tcGlsZUJpdFhvcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJpdFJTaGlmdCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJp
dExTaGlmdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDoK
KyAgICAgICAgICAgIGNvbXBpbGVCaXRVUlNoaWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVVSW50MzJUb051
bWJlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENoZWNrQ2VsbDoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0NlbGwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrTm90RW1wdHk6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tOb3RFbXB0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrQmFkQ2VsbCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tJZGVudDoKKyAgICAgICAg
ICAgIGNvbXBpbGVDaGVja0lkZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRFeGVjdXRhYmxlOgorICAgICAgICAgICAgY29tcGlsZUdldEV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAg
ICAgICAgICBjb21waWxlQXJyYXlpZnlUb1N0cnVjdHVyZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgY29tcGlsZVB1dFN0cnVj
dHVyZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgICAgICBjb21waWxlR2V0QnlJZCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW46CisgICAgICAgICAgICBjb21waWxlSW4o
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNh
c2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CisgICAgICAgICAg
ICBjb21waWxlUHV0QnlJZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0
R2V0dGVyQnlJZDoKKyAgICAgICAgY2FzZSBQdXRTZXR0ZXJCeUlkOgorICAgICAgICAgICAgY29t
cGlsZVB1dEFjY2Vzc29yQnlJZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0R2V0dGVyU2V0dGVyQnlJZDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRHZXR0ZXJTZXR0ZXJC
eUlkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoK
KyAgICAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRBY2Nl
c3NvckJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6CisgICAgICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgICAgIGNvbXBpbGVDb25zdGFudFN0
b3JhZ2VQb2ludGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tBcnJheSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlR2V0QXJyYXlM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tJbkJvdW5kcygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWwoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVB1c2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5UG9wOgorICAgICAgICAgICAgY29tcGlsZUFycmF5UG9wKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgY29tcGls
ZUNyZWF0ZUFjdGl2YXRpb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d0Z1bmN0aW9uOgorICAgICAgICBjYXNlIE5ld0Fycm93RnVuY3Rpb246CisgICAgICAgIGNhc2Ug
TmV3R2VuZXJhdG9yRnVuY3Rpb246CisgICAgICAgICAgICBjb21waWxlTmV3RnVuY3Rpb24oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAg
IGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1bWVudHMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVDcmVh
dGVDbG9uZWRBcmd1bWVudHMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVOZXdPYmplY3QoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAg
ICAgICAgICAgIGNvbXBpbGVOZXdBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgICAgIGNvbXBpbGVOZXdBcnJh
eVdpdGhTaXplKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgorICAgICAgICAgICAg
Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNvbXBpbGVSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
b1N0cmluZzoKKyAgICAgICAgY2FzZSBDYWxsU3RyaW5nQ29uc3RydWN0b3I6CisgICAgICAgICAg
ICBjb21waWxlVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6CisgICAgICAgICAgICBjb21waWxlVG9Q
cmltaXRpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1ha2VSb3BlOgor
ICAgICAgICAgICAgY29tcGlsZU1ha2VSb3BlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAg
ICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICAgICAgICAgIGNvbXBpbGVTdHJp
bmdGcm9tQ2hhckNvZGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAg
ICAgY29tcGlsZUdldEJ5T2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRHZXR0ZXI6CisgICAgICAgICAgICBjb21waWxlR2V0R2V0dGVyKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6CisgICAgICAgICAgICBjb21waWxlR2V0
U2V0dGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgorICAgICAgICAgICAgY29tcGlsZU11bHRpR2V0QnlPZmZzZXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZVB1
dEJ5T2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHZXRH
bG9iYWxMZXhpY2FsVmFyaWFibGU6CisgICAgICAgICAgICBjb21waWxlR2V0R2xvYmFsVmFyaWFi
bGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcmlhYmxl
OgorICAgICAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICAgICAgICAgIGNvbXBpbGVOb3Rp
ZnlXcml0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgor
ICAgICAgICAgICAgY29tcGlsZUdldENhbGxlZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVu
dENvdW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTY29wZToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRTY29wZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2tpcFNjb3BlOgorICAgICAgICAgICAgY29tcGlsZVNraXBTY29wZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRDbG9zdXJlVmFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgY29tcGlsZVB1dENsb3N1cmVWYXIoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CisgICAgICAgICAg
ICBjb21waWxlR2V0RnJvbUFyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0VG9Bcmd1bWVudHM6CisgICAgICAgICAgICBjb21waWxlUHV0VG9Bcmd1bWVudHMo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAg
ICAgIGNvbXBpbGVDb21wYXJlRXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAg
ICAgY29tcGlsZUNvbXBhcmVMZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb21wYXJlTGVzc0VxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVMZXNzRXEoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICAg
ICAgY29tcGlsZUNvbXBhcmVHcmVhdGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVHcmVhdGVy
RXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAg
ICAgICAgICBjb21waWxlTG9naWNhbE5vdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0OgorICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgICAgICBj
b21waWxlVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
ICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFy
Z3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBERkc6Okp1bXA6CisgICAgICAgICAgICBjb21waWxlSnVtcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpCcmFuY2g6CisgICAgICAgICAgICBj
b21waWxlQnJhbmNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OlN3
aXRjaDoKKyAgICAgICAgICAgIGNvbXBpbGVTd2l0Y2goKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERGRzo6UmV0dXJuOgorICAgICAgICAgICAgY29tcGlsZVJldHVybigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAg
ICAgY29tcGlsZUZvcmNlT1NSRXhpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgICAg
IGNvbXBpbGVUaHJvdygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW52YWxp
ZGF0aW9uUG9pbnQ6CisgICAgICAgICAgICBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgorICAgICAgICAgICAg
Y29tcGlsZUlzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
c0Jvb2xlYW46CisgICAgICAgICAgICBjb21waWxlSXNCb29sZWFuKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJc051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVJc051bWJl
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNTdHJpbmc6CisgICAgICAg
ICAgICBjb21waWxlSXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IElzT2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZUlzT2JqZWN0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJc09iamVjdE9yTnVsbDoKKyAgICAgICAgICAgIGNvbXBpbGVJ
c09iamVjdE9yTnVsbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNGdW5j
dGlvbjoKKyAgICAgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlT2Y6CisgICAgICAgICAgICBjb21waWxlVHlwZU9mKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1R5cGVJbmZvRmxhZ3M6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tUeXBlSW5mb0ZsYWdzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPdmVycmlkZXNIYXNJbnN0YW5jZToKKyAgICAgICAgICAgIGNvbXBpbGVP
dmVycmlkZXNIYXNJbnN0YW5jZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5zdGFuY2VPZjoKKyAgICAgICAgICAgIGNvbXBpbGVJbnN0YW5jZU9mKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgorICAgICAgICAgICAgY29t
cGlsZUluc3RhbmNlT2ZDdXN0b20oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgorICAgICAgICAgICAgY29tcGlsZUNvdW50RXhlY3V0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgICAg
ICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVy
dHk6CisgICAgICAgICAgICBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICAgICAgICAg
IGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CisgICAgICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5h
bWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5n
dGg6CisgICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgorICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgorICAgICAgICAgICAgY29t
cGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmco
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAg
ICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAg
Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgorICAgICAgICAgICAgY29tcGlsZUNo
ZWNrV2F0Y2hkb2dUaW1lcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29w
eVJlc3Q6CisgICAgICAgICAgICBjb21waWxlQ29weVJlc3QoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlR2V0UmVz
dExlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBQ
aGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CisgICAgICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZUFjdGl2YXRpb246CisgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgICAgICBjYXNlIFB1dEhp
bnQ6CisgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgIGNhc2UgS2lsbFN0YWNrOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9u
b2RlLT5pc1Rlcm1pbmFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBzYWZlbHlJbnZh
bGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG1f
bm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgY29tcGls
ZVVwc2lsb24oKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHVwc2lsb25WYWx1ZSA9IG51bGxwdHI7
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgdXBzaWxvblZh
bHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CisgICAgICAgICAgICB1
cHNpbG9uVmFsdWUgPSBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6
CisgICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAg
IHVwc2lsb25WYWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHVwc2lsb24gPSBtX291dC5hbmNob3IodXBzaWxvblZh
bHVlKTsKKyAgICAgICAgTFZhbHVlIHBoaU5vZGUgPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkp
OworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBoaU5vZGUsIHVwc2lsb24pOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQaGkoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHBo
aSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKKyAgICAgICAgbV9vdXQubV9ibG9jay0+YXBwZW5kKHBo
aSk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykg
eworICAgICAgICBjYXNlIE5vZGVSZXN1bHREb3VibGU6CisgICAgICAgICAgICBzZXREb3VibGUo
cGhpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoK
KyAgICAgICAgICAgIHNldEludDMyKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOb2RlUmVzdWx0SW50NTI6CisgICAgICAgICAgICBzZXRJbnQ1MihwaGkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAg
ICBzZXRCb29sZWFuKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0SlM6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBoaSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbnN0YW50KCkKKyAgICB7CisgICAgICAg
IHNldERvdWJsZShtX291dC5jb25zdERvdWJsZShtX25vZGUtPmFzTnVtYmVyKCkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlSW50NTJDb25zdGFudCgpCisgICAgeworICAgICAgICBp
bnQ2NF90IHZhbHVlID0gbV9ub2RlLT5hc01hY2hpbmVJbnQoKTsKKyAgICAgICAgCisgICAgICAg
IHNldEludDUyKG1fb3V0LmNvbnN0SW50NjQodmFsdWUgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFt
b3VudCkpOworICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlKSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRG91YmxlUmVwKCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZWFsTnVt
YmVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiRG91YmxlUmVwIFJlYWxOdW1iZXJVc2UgaW50IGNhc2UiKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZVJl
cCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZG91YmxlVmFsdWUpOworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZh
bHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24p
LCByYXJlbHkoaW50Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1i
ZXIsCisgICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRUb0RvdWJsZSh1bmJveEludDMy
KHZhbHVlKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vdENlbGxVc2U6CisgICAg
ICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBib29sIHNob3VsZENvbnZlcnROb25O
dW1iZXIgPSBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJv
eGluZyBpbnQgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZVRlc3Rpbmcg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGRvdWJsZSBj
YXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm9uRG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgdW5kZWZpbmVkIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFs
dWVUb0RvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoZG91
YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgZG91YmxlVGVz
dGluZyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGludFRvRG91
YmxlID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFRvRG91YmxlKHVu
Ym94SW50MzIodmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZVRlc3Rpbmcs
IGRvdWJsZUNhc2UpOworICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNOdW1iZXIgPSBpc051bWJl
cih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAgICBtX291
dC5icmFuY2godmFsdWVJc051bWJlciwgdXN1YWxseShkb3VibGVDYXNlKSwgcmFyZWx5KG5vbkRv
dWJsZUNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlQ2FzZSwgbm9u
RG91YmxlQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkRG91YmxlID0g
bV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRDb252ZXJ0Tm9uTnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgdW5kZWZpbmVkIGNhc2Ui
KSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdE51bGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBudWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIG51bGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB0ZXN0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBib29sZWFuIHRydWUgY2FzZSIpKTsKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIHRydWUgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnQgYm9vbGVhbiBmYWxz
ZSBjYXNlIikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2Fz
ZSwgdW5kZWZpbmVkQ2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNVbmRlZmlu
ZWQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzVW5kZWZpbmVkLCB1bnN1cmUo
dW5kZWZpbmVkQ2FzZSksIHVuc3VyZSh0ZXN0TnVsbENhc2UpKTsKKworICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZENhc2UsIHRlc3ROdWxsQ2FzZSk7CisgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkVW5kZWZpbmVkID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0TnVsbENhc2Us
IG51bGxDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc051bGwgPSBtX291dC5l
cXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2godmFsdWVJc051bGwsIHVuc3VyZShudWxsQ2FzZSksIHVuc3VyZSh0ZXN0
Qm9vbGVhblRydWVDYXNlKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhudWxs
Q2FzZSwgdGVzdEJvb2xlYW5UcnVlQ2FzZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgY29udmVydGVkTnVsbCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgwKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8odGVzdEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xlYW5UcnVl
Q2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNCb29sZWFuVHJ1ZSA9IG1fb3V0
LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVHJ1ZSkpOworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzQm9vbGVhblRydWUsIHVuc3VyZShjb252ZXJ0Qm9vbGVh
blRydWVDYXNlKSwgdW5zdXJlKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKSk7CisKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9v
bGVhbkZhbHNlQ2FzZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVk
VHJ1ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgxKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udmVydEJvb2xlYW5GYWxzZUNhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWVJc05vdEJvb2xlYW5GYWxzZSA9IG1fb3V0Lm5vdEVxdWFsKHZh
bHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKKyAgICAgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCB+U3BlY0Nl
bGwsIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNvbnZlcnRlZEZhbHNlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDApKTsK
KyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1
bmJveGVkRG91YmxlLCBjb252ZXJ0ZWRVbmRlZmluZWQsIGNvbnZlcnRlZE51bGwsIGNvbnZlcnRl
ZFRydWUsIGNvbnZlcnRlZEZhbHNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2FzZSwgY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlciwgbV9vdXQuYm9vbGVhblRydWUp
OworICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisKKyAgICAgICAgICAgIHNldERvdWJs
ZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldERvdWJsZShzdHJpY3RJbnQ1MlRv
RG91YmxlKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMigpCisgICAgeworICAg
ICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50MzIobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRo
TW9kZSgpKSk7CisgICAgICAgIHNldEludDMyKGludGVnZXJWYWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCBjb21waWxlVmFsdWVSZXAoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhtX25v
ZGUtPmNoaWxkMSgpLCB+U3BlY0RvdWJsZUltcHVyZU5hTikpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1
YWwodmFsdWUsIHZhbHVlKSwgdmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShib3hEb3VibGUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3RyaWN0
SW50NTJUb0pTVmFsdWUobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW50NTJSZXAoKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIobV9vdXQuc2lnbkV4
dDMyVG82NChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAg
IHNldFN0cmljdEludDUyKAorICAgICAgICAgICAgICAgIGpzVmFsdWVUb1N0cmljdEludDUyKAor
ICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6Cisg
ICAgICAgICAgICBzZXRTdHJpY3RJbnQ1MigKKyAgICAgICAgICAgICAgICBkb3VibGVUb1N0cmlj
dEludDUyKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIo
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2Fz
dFRvSW50MzIobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgICAg
ICAgICAgc2V0SW50MzIoZG91YmxlVG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVy
VXNlOgorICAgICAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgICAgIExvd2VyZWROb2Rl
VmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHNldEludDMyKG51bWJlck9yTm90Q2VsbFRvSW50MzIobV9u
b2RlLT5jaGlsZDEoKSwgdmFsdWUudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSdsbCBiYXNpY2Fs
bHkganVzdCBnZXQgaGVyZSBmb3IgY29uc3RhbnRzLiBCdXQgaXQncyBnb29kIHRvIGhhdmUgdGhp
cworICAgICAgICAgICAgLy8gY2F0Y2gtYWxsIHNpbmNlIHdlIG9mdGVuIGFkZCBuZXcgcmVwcmVz
ZW50YXRpb25zIGludG8gdGhlIG1peC4KKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAg
ICAgICAgIG51bWJlck9yTm90Q2VsbFRvSW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9k
ZS0+Y2hpbGQxKCksCisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQm9vbGVhblRvTnVt
YmVyKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgICAgICBzZXRJbnQzMihtX291
dC56ZXJvRXh0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmludDMyKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbEludDMyIHwgU3Bl
Y0Jvb2xlYW4pKSB7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKG1fb3V0
LmNhc3RUb0ludDMyKHZhbHVlKSwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGJvb2xlYW5DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29sZWFuVG9OdW1iZXIg
Ym9vbGVhbiBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29sZWFuVG9OdW1iZXIgY29udGludWF0aW9uIikpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RCb29sZWFuUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgICAgICBpc0Jvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkp
LAorICAgICAgICAgICAgICAgIHVuc3VyZShib29sZWFuQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhib29sZWFuQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYml0T3IoCisg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dCh1bmJveEJvb2xlYW4odmFsdWUpLCBtX291dC5p
bnQ2NCksIG1fdGFnVHlwZU51bWJlcikpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCBib29sZWFuUmVzdWx0LCBub3RCb29sZWFuUmVzdWx0KSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2Fs
KCkKKyAgICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JP
U1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOworICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2Vk
TG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFN0
YWNrKCkKKyAgICB7CisgICAgICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJl
ZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4gRm9yIGFyZ3VtZW50cywgd2UgbWlnaHQgaGF2ZQor
ICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZCBpdC4KKyAgICAgICAgaWYgKExWYWx1ZSB2YWx1ZSA9
IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuZ2V0KG1fbm9kZSkpIHsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
OworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBtX25vZGUsIGRhdGEtPmZvcm1hdCAhPSBGbHVzaGVkRG91YmxlKTsgLy8gVGhpcyBq
dXN0IGhhcHBlbnMgdG8gbm90IGFyaXNlIGZvciBHZXRTdGFja3MsIHJpZ2h0IG5vdy4gSXQgd291
bGQgYmUgdHJpdmlhbCB0byBzdXBwb3J0LgorICAgICAgICAKKyAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyKHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVM
b2NhbCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0U3RhY2soKQorICAgIHsK
KyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KTsKKyAgICAgICAgc3dpdGNoIChkYXRhLT5mb3JtYXQpIHsKKyAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZTogeworICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9v
dXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRG
b3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOiB7CisgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1
c2hlZENlbGw6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVMb2NhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCgKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgZmx1c2ggZm9ybWF0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVOb09wKCkKKyAgICB7CisgICAgICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgc3BlY3VsYXRlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlVG9UaGlzKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgaXMgY2VsbCBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiVG9UaGlzIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIHNsb3dDYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc1R5cGUodmFsdWUsIEZpbmFsT2JqZWN0VHlwZSksIHVzdWFsbHkoY29udGludWF0aW9uKSwg
cmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247
CisgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYykpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAg
ICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIG1fY2FsbEZy
YW1lLCB2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQorICAgIHsKKyAg
ICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUQWRkR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUFk
ZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVN0ckNhdCgpCisgICAgeworICAgICAg
ICBMVmFsdWUgcmVzdWx0OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDMoKSkgeworICAgICAg
ICAgICAgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MyksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAg
ICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMygpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAg
ICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiksCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFyaXRoQWRkT3JTdWIoKQorICAg
IHsKKyAgICAgICAgYm9vbCBpc1N1YiA9ICBtX25vZGUtPm9wKCkgPT0gQXJpdGhTdWI7CisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpOworCisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0
aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihpc1N1YiA/IG1fb3V0LnN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkg
OiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVj
dWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsK
KyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAg
ICAgIGlmICghYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVj
SW50NTIpCisgICAgICAgICAgICAgICAgJiYgIWFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDIo
KSkuY291bGRCZVR5cGUoU3BlY0ludDUyKSkgeworICAgICAgICAgICAgICAgIEludDUyS2luZCBr
aW5kOworICAgICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9u
b2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93
SW50NTIobV9ub2RlLT5jaGlsZDIoKSwga2luZCk7CisgICAgICAgICAgICAgICAgc2V0SW50NTIo
aXNTdWIgPyBtX291dC5zdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSwg
a2luZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IENoZWNrVmFsdWUqIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVj
dWxhdGVTdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERv
dWJsZVJlcFVzZTogeworICAgICAgICAgICAgTFZhbHVlIEMxID0gbG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIEMyID0gbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQyKCkpOworCisgICAgICAgICAgICBzZXREb3VibGUoaXNTdWIgPyBtX291dC5kb3VibGVTdWIo
QzEsIEMyKSA6IG1fb3V0LmRvdWJsZUFkZChDMSwgQzIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBpZiAo
IWlzU3ViKSB7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRTdWJHZW5lcmF0b3I+KG9wZXJhdGlvblZh
bHVlU3ViKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhDbHozMigpCisgICAgeworICAgICAgICBMVmFsdWUgb3BlcmFuZCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRJbnQzMihtX291dC5jdGx6MzIob3BlcmFu
ZCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVBcml0aE11bCgpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50
MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKworICAgICAg
ICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBDaGVja1ZhbHVlKiBzcGVjdWxhdGlvbiA9IG1fb3V0
LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgYmxlc3NTcGVjdWxh
dGlvbihzcGVjdWxhdGlvbiwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4p
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWN1bGF0aW9uOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMy
KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxl
ZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQp
OworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwg
b3Bwb3NpdGUoa2luZCkpOworCisgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291
dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlv
bihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFyaXRoTXVsIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVy
bywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQ2NFpl
cm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQ2NFplcm8pKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7
CisgICAgICAgICAgICBzZXREb3VibGUoCisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTXVs
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVW50eXBl
ZFVzZTogeworICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUTXVsR2VuZXJhdG9yPihv
cGVyYXRpb25WYWx1ZU11bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUFyaXRoRGl2KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAg
TFZhbHVlIG51bWVyYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIGRlbm9taW5hdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHplcm9OdW1lcmF0b3IgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2IHplcm8gbnVtZXJhdG9yIikpOworICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhEaXYgbnVtZXJhdG9yIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvMzIobnVt
ZXJhdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHplcm9OdW1lcmF0b3IpLCB1c3Vh
bGx5KG51bWVyYXRvckNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHplcm9OdW1lcmF0b3IsIG51bWVyYXRv
ckNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAg
ICAgICAgICAgIE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihkZW5v
bWluYXRvciwgbV9vdXQuaW50MzJaZXJvKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5qdW1w
KG51bWVyYXRvckNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhudW1lcmF0b3JDb250aW51YXRpb24sIGlubmVyTGFzdE5leHQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUt
PmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuc2FmZURlbm9t
aW5hdG9yID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiB1bnNhZmUgZGVub21pbmF0
b3IiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aERpdiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWluYXRvciA9IG1fb3V0LmFkZChkZW5vbWluYXRvciwg
bV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWJvdmUoYWRqdXN0ZWREZW5vbWluYXRvciwgbV9vdXQuaW50MzJP
bmUpLAorICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseSh1
bnNhZmVEZW5vbWluYXRvcikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdEludDMyKC0yMTQ3
NDgzNjQ3LTEpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5lcXVhbChudW1l
cmF0b3IsIG5lZzJUb1RoZTMxKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmRpdihudW1l
cmF0b3IsIGRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAg
ICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKG1fb3V0Lm11bChyZXN1bHQsIGRlbm9taW5hdG9yKSwgbnVtZXJhdG9y
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNoaWxsRGl2KG51bWVyYXRvciwgZGVu
b21pbmF0b3IpKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAgICAgICAgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZURpdigKKyAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIGVtaXRC
aW5hcnlTbmlwcGV0PEpJVERpdkdlbmVyYXRvciwgTmVlZFNjcmF0Y2hGUFI+KG9wZXJhdGlvblZh
bHVlRGl2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUFyaXRoTW9kKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVl
IG51bWVyYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZh
bHVlIGRlbm9taW5hdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAg
ICAgIExWYWx1ZSByZW1haW5kZXI7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxv
dyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVu
c2FmZURlbm9taW5hdG9yID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1vZCB1bnNhZmUg
ZGVub21pbmF0b3IiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1vZCBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWluYXRvciA9IG1fb3V0LmFkZChkZW5v
bWluYXRvciwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYWRqdXN0ZWREZW5vbWluYXRvciwgbV9v
dXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseSh1bnNhZmVEZW5vbWluYXRvcikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdElu
dDMyKC0yMTQ3NDgzNjQ3LTEpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5l
cXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMxKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
Lm1vZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIg
PSByZXN1bHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZW1haW5kZXIg
PSBtX291dC5jaGlsbE1vZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKworICAgICAgICAgICAg
aWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmVnYXRpdmVOdW1lcmF0b3IgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFyaXRoTW9kIG5lZ2F0aXZlIG51bWVyYXRvciIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBudW1lcmF0b3JDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoTW9kIG51bWVyYXRvciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmxlc3NUaGFuKG51bWVy
YXRvciwgbV9vdXQuaW50MzJaZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKG5lZ2F0
aXZlTnVtZXJhdG9yKSwgdW5zdXJlKG51bWVyYXRvckNvbnRpbnVhdGlvbikpOworCisgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5lZ2F0
aXZlTnVtZXJhdG9yLCBudW1lcmF0b3JDb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm8zMihyZW1h
aW5kZXIpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVh
dGlvbiwgaW5uZXJMYXN0TmV4dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldElu
dDMyKHJlbWFpbmRlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBzZXREb3VibGUo
CisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTW9kKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoTWluT3JNYXgo
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEludDMyKAor
ICAgICAgICAgICAgICAgIG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9ub2Rl
LT5vcCgpID09IEFyaXRoTWluCisgICAgICAgICAgICAgICAgICAgICAgICA/IG1fb3V0Lmxlc3NU
aGFuKGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgOiBtX291dC5sZXNzVGhh
bihyaWdodCwgbGVmdCksCisgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90TGVz
c1RoYW4gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTWluL0FyaXRoTWF4IG5vdCBsZXNz
IHRoYW4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFyaXRoTWluL0FyaXRoTWF4IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobGVm
dCkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBBcml0aE1pbgorICAgICAgICAgICAgICAgICAgICA/IG1fb3V0LmRvdWJsZUxlc3NU
aGFuKGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICA6IG1fb3V0LmRvdWJsZUdyZWF0
ZXJUaGFuKGxlZnQsIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9u
KSwgdW5zdXJlKG5vdExlc3NUaGFuKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90TGVzc1RoYW4sIGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuc2VsZWN0
KAorICAgICAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBBcml0aE1pbgorICAgICAgICAgICAg
ICAgICAgICA/IG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCkKKyAg
ICAgICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwobGVmdCwgcmln
aHQpLAorICAgICAgICAgICAgICAgIHJpZ2h0LCBtX291dC5jb25zdERvdWJsZShQTmFOKSkpKTsK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUFyaXRoQWJzKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgICAgIExW
YWx1ZSBtYXNrID0gbV9vdXQuYVNocih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigzMSkpOworICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmJpdFhvcihtYXNrLCBtX291dC5hZGQobWFz
aywgdmFsdWUpKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2Rl
LT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1Zh
bHVlKCksIDAsIG1fb3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8IDMxKSkp
OworCisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlQXJpdGhTaW4oKSB7IHNldERvdWJsZShtX291dC5kb3VibGVTaW4obG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoQ29z
KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlQ29zKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSkpOyB9CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogaW52ZXN0aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyBwZXJm
b3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0
byBoYXZlIHRoZSBpbmxpbmUgbG9vcCBpbiBERkcgdG9vLgorICAgICAgICBpZiAobV9ub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICBzZXREb3VibGUobV9v
dXQuZG91YmxlUG93aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25l
bnQgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGludGVnZXJFeHBvbmVudElzU21hbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
QXJpdGhQb3cgdGVzdCBpbnRlZ2VyIGV4cG9uZW50IGlzIHNtYWxsLiIpKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGludGVnZXJFeHBvbmVudFBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJBcml0aFBvdyBwb3coZG91YmxlLCAoaW50KWRvdWJsZSkuIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5ID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aFBvdyBwb3coZG91YmxlLCBkb3VibGUpLiIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgY2hlY2sgZXhwb25lbnQgaXMgaW5maW5p
dHkuIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0aW9uQmFzZUlzT25lID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCBjaGVjayBiYXNl
IGlzIG9uZS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBwb3dCbG9jayA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcmVndWxhciBwb3ciKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBuYW5FeGNlcHRpb25SZXN1bHRJc05hTiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
QXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgcmVzdWx0IGlzIE5hTi4iKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93
IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudCA9
IG1fb3V0LmRvdWJsZVRvSW50KGV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2Vy
RXhwb25lbnRDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0LmludFRvRG91YmxlKGludGVnZXJFeHBv
bmVudCk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnRJc0ludGVnZXIgPSBtX291dC5kb3Vi
bGVFcXVhbChleHBvbmVudCwgaW50ZWdlckV4cG9uZW50Q29udmVydGVkVG9Eb3VibGUpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGV4cG9uZW50SXNJbnRlZ2VyLCB1bnN1cmUoaW50ZWdlckV4
cG9uZW50SXNTbWFsbEJsb2NrKSwgdW5zdXJlKGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSkp
OworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlu
dGVnZXJFeHBvbmVudElzU21hbGxCbG9jaywgaW50ZWdlckV4cG9uZW50UG93QmxvY2spOworICAg
ICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudEJlbG93MTAwMCA9IG1fb3V0LmJlbG93KGlu
dGVnZXJFeHBvbmVudCwgbV9vdXQuY29uc3RJbnQzMigxMDAwKSk7CisgICAgICAgICAgICBtX291
dC5icmFuY2goaW50ZWdlckV4cG9uZW50QmVsb3cxMDAwLCB1c3VhbGx5KGludGVnZXJFeHBvbmVu
dFBvd0Jsb2NrKSwgcmFyZWx5KGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSkpOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbnRlZ2VyRXhwb25lbnRQb3dCbG9jaywgZG91YmxlRXhw
b25lbnRQb3dCbG9ja0VudHJ5KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd0RvdWJs
ZUludFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3dpKGJhc2UsIGludGVnZXJF
eHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgICAgICAvLyBJZiB5IGlzIE5hTiwgdGhlIHJlc3VsdCBpcyBOYU4uCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnksIG5hbkV4Y2VwdGlvbkV4
cG9uZW50SXNJbmZpbml0eSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnRJc05hTjsKKyAg
ICAgICAgICAgIGlmIChwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQyKCkpICYgU3BlY0RvdWJsZU5h
TikKKyAgICAgICAgICAgICAgICBleHBvbmVudElzTmFOID0gbV9vdXQuZG91YmxlTm90RXF1YWxP
clVub3JkZXJlZChleHBvbmVudCwgZXhwb25lbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGV4cG9uZW50SXNOYU4gPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgICAg
ICBtX291dC5icmFuY2goZXhwb25lbnRJc05hTiwgcmFyZWx5KG5hbkV4Y2VwdGlvblJlc3VsdElz
TmFOKSwgdXN1YWxseShuYW5FeGNlcHRpb25FeHBvbmVudElzSW5maW5pdHkpKTsKKworICAgICAg
ICAgICAgLy8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMgK2luZmluaXR5LCB0aGUgcmVzdWx0IGlz
IE5hTi4KKyAgICAgICAgICAgIC8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIC1pbmZpbml0eSwg
dGhlIHJlc3VsdCBpcyBOYU4uCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRp
b25FeHBvbmVudElzSW5maW5pdHksIG5hbkV4Y2VwdGlvbkJhc2VJc09uZSk7CisgICAgICAgICAg
ICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudCA9IG1fb3V0LmRvdWJsZUFicyhleHBvbmVudCk7Cisg
ICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHkgPSBtX291dC5kb3Vi
bGVFcXVhbChhYnNvbHV0ZUV4cG9uZW50LCBtX291dC5jb25zdERvdWJsZShzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChh
YnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSwgcmFyZWx5KG5hbkV4Y2VwdGlvbkJhc2VJc09uZSks
IHVzdWFsbHkocG93QmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhj
ZXB0aW9uQmFzZUlzT25lLCBwb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVC
YXNlID0gbV9vdXQuZG91YmxlQWJzKGJhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFic29sdXRl
QmFzZUlzT25lID0gbV9vdXQuZG91YmxlRXF1YWwoYWJzb2x1dGVCYXNlLCBtX291dC5jb25zdERv
dWJsZSgxKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goYWJzb2x1dGVCYXNlSXNPbmUsIHVu
c3VyZShuYW5FeGNlcHRpb25SZXN1bHRJc05hTiksIHVuc3VyZShwb3dCbG9jaykpOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhwb3dCbG9jaywgbmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4p
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmRvdWJsZVBvdyhiYXNlLCBleHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25S
ZXN1bHRJc05hTiwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHB1
cmVOYW4gPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5w
aGkobV9vdXQuZG91YmxlVHlwZSwgcG93RG91YmxlSW50UmVzdWx0LCBwb3dSZXN1bHQsIHB1cmVO
YW4pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUmFuZG9tKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisKKyAgICAgICAgLy8gSW5s
aW5lZCBXZWFrUmFuZG9tOjphZHZhbmNlKCkuCisgICAgICAgIC8vIHVpbnQ2NF90IHggPSBtX2xv
dzsKKyAgICAgICAgdm9pZCogbG93QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6d2Vha1JhbmRvbU9mZnNldCgpICsgV2Vh
a1JhbmRvbTo6bG93T2Zmc2V0KCk7CisgICAgICAgIExWYWx1ZSBsb3cgPSBtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUobG93QWRkcmVzcykpOworICAgICAgICAvLyB1aW50NjRfdCB5ID0gbV9o
aWdoOworICAgICAgICB2b2lkKiBoaWdoQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6d2Vha1JhbmRvbU9mZnNldCgpICsg
V2Vha1JhbmRvbTo6aGlnaE9mZnNldCgpOworICAgICAgICBMVmFsdWUgaGlnaCA9IG1fb3V0Lmxv
YWQ2NChtX291dC5hYnNvbHV0ZShoaWdoQWRkcmVzcykpOworICAgICAgICAvLyBtX2xvdyA9IHk7
CisgICAgICAgIG1fb3V0LnN0b3JlNjQoaGlnaCwgbV9vdXQuYWJzb2x1dGUobG93QWRkcmVzcykp
OworCisgICAgICAgIC8vIHggXj0geCA8PCAyMzsKKyAgICAgICAgTFZhbHVlIHBoYXNlMSA9IG1f
b3V0LmJpdFhvcihtX291dC5zaGwobG93LCBtX291dC5jb25zdEludDY0KDIzKSksIGxvdyk7CisK
KyAgICAgICAgLy8geCBePSB4ID4+IDE3OworICAgICAgICBMVmFsdWUgcGhhc2UyID0gbV9vdXQu
Yml0WG9yKG1fb3V0LmxTaHIocGhhc2UxLCBtX291dC5jb25zdEludDY0KDE3KSksIHBoYXNlMSk7
CisKKyAgICAgICAgLy8geCBePSB5IF4gKHkgPj4gMjYpOworICAgICAgICBMVmFsdWUgcGhhc2Uz
ID0gbV9vdXQuYml0WG9yKG1fb3V0LmJpdFhvcihoaWdoLCBtX291dC5sU2hyKGhpZ2gsIG1fb3V0
LmNvbnN0SW50NjQoMjYpKSksIHBoYXNlMik7CisKKyAgICAgICAgLy8gbV9oaWdoID0geDsKKyAg
ICAgICAgbV9vdXQuc3RvcmU2NChwaGFzZTMsIG1fb3V0LmFic29sdXRlKGhpZ2hBZGRyZXNzKSk7
CisKKyAgICAgICAgLy8gcmV0dXJuIHggKyB5OworICAgICAgICBMVmFsdWUgcmFuZG9tNjQgPSBt
X291dC5hZGQocGhhc2UzLCBoaWdoKTsKKworICAgICAgICAvLyBFeHRyYWN0IHJhbmRvbSA1M2Jp
dC4gWzAsIDUzXSBiaXQgaXMgc2FmZSBpbnRlZ2VyIG51bWJlciByYW5nZXMgaW4gZG91YmxlIHJl
cHJlc2VudGF0aW9uLgorICAgICAgICBMVmFsdWUgcmFuZG9tNTMgPSBtX291dC5iaXRBbmQocmFu
ZG9tNjQsIG1fb3V0LmNvbnN0SW50NjQoKDFVTEwgPDwgNTMpIC0gMSkpOworCisgICAgICAgIExW
YWx1ZSBkb3VibGU1M0ludGVnZXIgPSBtX291dC5pbnRUb0RvdWJsZShyYW5kb201Myk7CisKKyAg
ICAgICAgLy8gQ29udmVydCBgKDUzYml0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlKSAvICgxIDw8IDUz
KWAgdG8gYCg1M2JpdCBkb3VibGUgaW50ZWdlciB2YWx1ZSkgKiAoMS4wIC8gKDEgPDwgNTMpKWAu
CisgICAgICAgIC8vIEluIGxhdHRlciBjYXNlLCBgMS4wIC8gKDEgPDwgNTMpYCB3aWxsIGJlY29t
ZSBhIGRvdWJsZSB2YWx1ZSByZXByZXNlbnRlZCBhcyAobWFudGlzc2EgPSAwICYgZXhwID0gOTcw
LCBpdCBtZWFucyAxZS0oMioqNTQpKS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2Fs
ZSA9IDEuMCAvICgxVUxMIDw8IDUzKTsKKworICAgICAgICAvLyBNdWx0aXBseWluZyAxZS0oMioq
NTQpIHdpdGggdGhlIGRvdWJsZSBpbnRlZ2VyIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBvZiB0
aGUgbWFudGlzc2EgcGFydCBvZiB0aGUgZG91YmxlIGludGVnZXIuCisgICAgICAgIC8vIEl0IGp1
c3QgcmVkdWNlcyB0aGUgZXhwIHBhcnQgb2YgdGhlIGdpdmVuIDUzYml0IGRvdWJsZSBpbnRlZ2Vy
LgorICAgICAgICAvLyAoRXhjZXB0IGZvciAwLjAuIFRoaXMgaXMgc3BlY2lhbGx5IGhhbmRsZWQg
YW5kIGluIHRoaXMgY2FzZSwgZXhwIGp1c3QgYmVjb21lcyAwLikKKyAgICAgICAgLy8gTm93IHdl
IGdldCA1M2JpdCBwcmVjaXNpb24gcmFuZG9tIGRvdWJsZSB2YWx1ZSBpbiBbMCwgMSkuCisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kb3VibGVNdWwoZG91YmxlNTNJbnRlZ2VyLCBtX291
dC5jb25zdERvdWJsZShzY2FsZSkpOworCisgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAg
IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUm91bmQoKQorICAgIHsKKyAgICAgICAgTEJhc2lj
QmxvY2sgcmVhbFBhcnRJc01vcmVUaGFuSGFsZiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhSb3VuZCBzaG91bGQgcm91bmQgZG93biIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFJvdW5kIGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVDZWlsKHZhbHVlKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGludGVnZXJWYWx1ZSk7CisKKyAgICAgICAgTFZhbHVlIHJlYWxQYXJ0ID0gbV9vdXQuZG91Ymxl
U3ViKGludGVnZXJWYWx1ZSwgdmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5k
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKHJlYWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgw
LjUpKSwgdW5zdXJlKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFs
UGFydElzTW9yZVRoYW5IYWxmLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgaW50ZWdl
clZhbHVlUm91bmRlZERvd24gPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5j
b25zdERvdWJsZSgxKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJvdW5k
ZWREb3duUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludGVnZXJWYWx1ZVJvdW5kZWREb3duKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
cGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludGVnZXJWYWx1ZVJlc3VsdCwgaW50ZWdlclZhbHVlUm91
bmRlZERvd25SZXN1bHQpOworCisgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5h
cml0aFJvdW5kaW5nTW9kZSgpKSkgeworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9
IGNvbnZlcnREb3VibGVUb0ludDMyKHJlc3VsdCwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihpbnRlZ2Vy
VmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydCgpIHsgc2V0RG91YmxlKG1fb3V0LmRv
dWJsZVNxcnQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29t
cGlsZUFyaXRoTG9nKCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlTG9nKGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSkpOyB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhGUm91bmQoKQor
ICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fb3V0LmZyb3VuZChsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhOZWdhdGUoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRo
TW9kZSgpKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOworICAg
ICAgICAgICAgZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhN
b2RlKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gIjAgLSB4IiBpcyB0aGUgY2Fub25pY2FsIHdh
eSBvZiBzYXlpbmcgIi14IiBpbiBib3RoIEIzIGFuZCBMTFZNLiBUaGlzIGdldHMKKyAgICAgICAg
ICAgICAgICAvLyBsb3dlcmVkIHRvIHRoZSByaWdodCB0aGluZy4KKyAgICAgICAgICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQzMlplcm8sIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNoZWNrLCBPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y2hlY2s7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShP
dmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC50ZXN0SXNaZXJvMzIodmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIoMHg3ZmZmZmZmZikpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5u
ZWcodmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0ludDUyKSkgeworICAgICAgICAgICAgICAgIElu
dDUyS2luZCBraW5kOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd1doaWNoZXZl
ckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOworICAgICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1
bHQpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQsIGtpbmQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIENo
ZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQ2NFplcm8sIHZh
bHVlKTsKKyAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBJbnQ1Mk92ZXJmbG93
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShO
ZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CisgICAg
ICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUJpdEFuZCgpCisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8
SklUQml0QW5kR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdEFuZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRPcigpCisgICAgeworICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQ8SklUQml0T3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0T3IpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9y
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRYb3IoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBl
bWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJVEJpdFhvckdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVC
aXRYb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMy
KG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0UlNoaWZ0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
eworICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3I6OlNpZ25lZFNoaWZ0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBzZXRJbnQzMihtX291dC5hU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVCaXRMU2hpZnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJVExl
ZnRTaGlmdEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRMU2hpZnQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAgICAg
ICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5k
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCisgICAgeworICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVt
aXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpVbnNpZ25lZFNoaWZ0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXRJbnQzMihtX291
dC5sU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0
SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJl
cigpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKworICAgICAgICBpZiAoZG9lc092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7
CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICBzZXRJbnQzMih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIEV4aXRLaW5kIGV4aXRL
aW5kOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBL
bm93bkNlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25v
ZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBjYXNlIikpOwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxs
Q2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwg
bV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSog
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQo
c3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhl
cih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxs
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIEJhZENlbGwsIGpz
VmFsdWVWYWx1ZShjZWxsKSwgbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChjZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUtPmNlbGxPcGVyYW5kKCktPmNl
bGwoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tCYWRDZWxsKCkKKyAg
ICB7CisgICAgICAgIHRlcm1pbmF0ZShCYWRDZWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVDaGVja05vdEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZShURFpGYWlsdXJlLCBu
b1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDaGVja0lkZW50KCkKKyAgICB7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX25vZGUtPnVpZE9wZXJhbmQoKTsKKyAg
ICAgICAgaWYgKHVpZC0+aXNTeW1ib2woKSkgeworICAgICAgICAgICAgTFZhbHVlIHN5bWJvbCA9
IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihzeW1ib2wsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRJZGVudCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5ub3RFcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93U3RyaW5nSWRlbnQobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0Lmxv
YWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRJZGVudCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ub3RFcXVhbChzdHJpbmdJ
bXBsLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24obV9u
b2RlLT5jaGlsZDEoKSwgY2VsbCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihj
ZWxsLCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0YWJsZSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gISFtX25vZGUtPmNoaWxkMigpID8gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkgOiAwOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5leHBlY3RlZFN0cnVjdHVyZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQXJyYXlpZnlUb1N0cnVjdHVyZSB1bmV4cGVjdGVkIHN0cnVjdHVy
ZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcnJheWlmeVRvU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKG1fbm9k
ZS0+c3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIHJhcmVseSh1bmV4cGVjdGVkU3RydWN0dXJl
KSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5leHBlY3RlZFN0cnVjdHVyZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eSkgeworICAgICAgICAgICAgc3dp
dGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHByb3BlcnR5LCBtX291dC5jb25zdEludDMyKE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0
LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlSW50MzIpLCBtX2NhbGxG
cmFtZSwgY2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uRW5zdXJlRG91YmxlKSwgbV9jYWxsRnJhbWUsIGNlbGwpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICB2bUNh
bGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzKSwgbV9jYWxsRnJhbWUsIGNlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKKyAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2Rl
LT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCisgICAgeworICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFu
c2l0aW9uKG1fZ3JhcGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKworICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsK
KyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+
bmV4dDsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgPT0gbmV3U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAg
IEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gbmV3
U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKKyAgICAgICAgQVNTRVJU
KG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSk7CisKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOyAKKyAgICAgICAgbV9vdXQuc3RvcmUzMigKKyAgICAgICAgICAgIHdlYWtTdHJ1Y3R1
cmVJRChuZXdTdHJ1Y3R1cmUpLAorICAgICAgICAgICAgY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBDZWxsVXNlOiB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGdldEJ5SWQobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIHByZXR0eSB3ZWlyZCwgc2luY2Ugd2UgZHVwbGljYXRlIHRoZSBzbG93IHBhdGggYm90aCBo
ZXJlIGFuZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBJQy4g
V2Ugc2hvdWxkIGludmVzdGlnYXRlIG1ha2luZyB0aGlzIGxlc3MgYmFkLgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzgzMAorICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5
cGVkIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBjb250aW51YXRpb24i
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUo
Y2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2Vs
bENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihnZXRCeUlkKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkR2VuZXJpYyksCisgICAgICAgICAgICAgICAg
bV9jYWxsRnJhbWUsIHZhbHVlLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1f
Z3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGNlbGxSZXN1bHQsIG5vdENlbGxSZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlUHV0QnlJZCgpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0g
bV9ub2RlOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGFib3ZlOyBDZWxsVXNlIGlzIGVhc2ll
ciBzbyB3ZSBkbyBvbmx5IHRoYXQgZm9yIG5vdy4KKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2UpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIodmFsdWUpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHRo
aXMgaXMgYSBQdXRCeUlkRmx1c2gsIHdlIG1pZ2h0IHdhbnQgdG8gbGF0ZS1jbG9iYmVyIHZvbGF0
aWxlIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Mjg0OAorCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0
YXRlOworICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IG1fZ3JhcGguZXhlY3V0YWJsZUZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5lY21hTW9kZSgpOworICAgICAgICAKKyAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisK
KyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgo
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAg
ICAgICAgICAgICAgLy8gSlMgc2V0dGVyIGNhbGwgSUNzIGdlbmVyYXRlZCBieSB0aGUgUHV0QnlJ
ZCBJQyB3aWxsIG5lZWQgdGhpcy4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNj
aGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAg
ICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeUlkR2VuZXJhdG9yPjo6
Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2FsbFNpdGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEdQUkluZm86OnBh
dGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIsIGVjbWFNb2RlLAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOworCisgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAg
ICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBnZW5lcmF0
b3ItPnNsb3dQYXRoRnVuY3Rpb24oKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5m
bygpKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93
UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+ZmluYWxpemUobGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgpCisgICAgeworICAgICAgICBzZXRTdG9yYWdl
KGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5UmVhZE9ubHkoKQorICAgIHsKKyAg
ICAgICAgc2V0U3RvcmFnZShsb2FkQnV0dGVyZmx5UmVhZE9ubHkobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQ
b2ludGVyKCkKKyAgICB7CisgICAgICAgIHNldFN0b3JhZ2UobV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpIHsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlIFN0cmluZyBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UgU3RyaW5nIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RS
ZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludFB0
ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVSb3BlKSwgbV9jYWxsRnJhbWUsIGNl
bGwpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0U3RvcmFnZShtX291dC5s
b2FkUHRyKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpLCBt
X2hlYXBzLlN0cmluZ0ltcGxfZGF0YSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzZXRTdG9yYWdlKGxvYWRWZWN0b3JXaXRoQmFycmllcihjZWxs
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrQXJyYXkoKQorICAgIHsKKyAg
ICAgICAgRWRnZSBlZGdlID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKGVkZ2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbV9ub2RlLCBhYnN0cmFjdFZhbHVlKGVkZ2UpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAorICAgICAgICAg
ICAgbV9vdXQubG9naWNhbE5vdChpc0FycmF5VHlwZShjZWxsLCBtX25vZGUtPmFycmF5TW9kZSgp
KSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsgICAgCisKKyAgICAgICAgTEJhc2ljQmxvY2sgc2ltcGxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVsZXNzIHR5cGVkIGFycmF5Iikp
OworICAgICAgICBMQmFzaWNCbG9jayB3YXN0ZWZ1bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3RlZnVsIHR5cGVkIGFycmF5IikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdl
dFR5cGVkQXJyYXlCeXRlT2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSBtb2RlID0gbV9vdXQubG9hZDMyKGJhc2VQdHIsIG1faGVhcHMuSlNBcnJheUJ1ZmZl
clZpZXdfbW9kZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0Lm5v
dEVxdWFsKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoV2FzdGVmdWxUeXBlZEFycmF5KSksCisgICAg
ICAgICAgICB1bnN1cmUoc2ltcGxlQ2FzZSksIHVuc3VyZSh3YXN0ZWZ1bENhc2UpKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNpbXBsZUNhc2UsIHdh
c3RlZnVsQ2FzZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlT3V0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8od2FzdGVmdWxDYXNlLCBjb250aW51
YXRpb24pOworCisgICAgICAgIExWYWx1ZSB2ZWN0b3JQdHIgPSBsb2FkVmVjdG9yUmVhZE9ubHko
YmFzZVB0cik7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBsb2FkQnV0dGVyZmx5UmVh
ZE9ubHkoYmFzZVB0cik7CisgICAgICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0Lmxv
YWRQdHIoYnV0dGVyZmx5UHRyLCBtX2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CisgICAg
ICAgIExWYWx1ZSBkYXRhUHRyID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFw
cy5BcnJheUJ1ZmZlcl9kYXRhKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayB3YXN0ZWZ1bE91
dCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIodmVjdG9yUHRyLCBkYXRhUHRyKSk7CisKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQz
MihtX291dC5waGkobV9vdXQuaW50UHRyLCBzaW1wbGVPdXQsIHdhc3RlZnVsT3V0KSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5l
Z2F0aXZlKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7CisgICAgICAgICAgICBMVmFsdWUgc3Ry
aW5nID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50
cyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVh
cHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNf
bGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBhcmd1bWVudHMgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobV9vdXQubG9hZDhaZXJvRXh0
MzIoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19vdmVycm9kZVRoaW5ncykpKTsK
KyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywg
bV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdG90YWxMZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc1NvbWVUeXBlZEFycmF5VmlldygpKSB7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNBcnJheUJ1ZmZl
clZpZXdfbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBpbGVDaGVja0luQm91bmRzKCkKKyAgICB7CisgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgIE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsCisgICAgICAgICAg
ICBtX291dC5hYm92ZU9yRXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFw
JiBoZWFwID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KKyAg
ICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmlu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgs
IG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaXNIb2xlID0gbV9v
dXQuaXNaZXJvNjQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1v
ZGUoKS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgaXNIb2xlLCBtX291
dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2Fk
RnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgaXNIb2xlKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQvY29udGlndW91cyBmYXN0IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiR2V0QnlWYWwgaW50L2NvbnRpZ3VvdXMgc2xvdyBjYXNlIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBpbnQvY29udGlndW91cyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICByYXJl
bHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGZhc3RDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIHNsb3dD
YXNlKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJl
c3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBt
X291dC5pc1plcm82NChmYXN0UmVzdWx0VmFsdWUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCksIG1fY2FsbEZy
YW1lLCBiYXNlLCBpbmRleCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAg
ICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5p
bmRleGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LmxvYWREb3VibGUoCisgICAgICAgICAgICAgICAgICAgIGJhc2VJbmRl
eChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgZG91YmxlIGluIGJvdW5kcyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGJveFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGRvdWJsZSBib3hpbmci
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiR2V0QnlWYWwgZG91YmxlIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgZG91Ymxl
IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAg
ICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCkpLAorICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkoaW5Cb3VuZHMpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgYm94UGF0aCk7CisgICAgICAgICAg
ICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2FkRG91YmxlKAorICAgICAgICAgICAgICAg
IGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAgICAg
ICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGJveFBhdGgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm94UGF0aCwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihib3hEb3VibGUoZG91Ymxl
VmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAor
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsQXJyYXlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVl
KCksIG1fbm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybykpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRy
LAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihiYXNlLCBtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2Us
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpKTsKKworICAgICAgICAgICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFw
cy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzcykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAg
ICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTFZhbHVlIHRhYmxlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c190YWJsZSk7CisgICAgICAgICAgICBMVmFsdWUgbmFtZWRMZW5ndGggPSBtX291
dC5sb2FkMzIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFtZWRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRBcmd1bWVudHMgbmFtZWQgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG92ZXJmbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIG92ZXJmbG93IGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFNjb3BlZEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
aW5kZXgsIG5hbWVkTGVuZ3RoKSwgdW5zdXJlKG92ZXJmbG93Q2FzZSksIHVuc3VyZShuYW1lZENh
c2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNfc2NvcGUpOworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0
LmxvYWRQdHIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5i
YXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5zY29wZWRBcmd1bWVudHNUYWJsZUFy
Z3VtZW50cywgYXJndW1lbnRzLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7CisgICAgICAgICAg
ICBMVmFsdWUgc2NvcGVPZmZzZXQgPSBtX291dC5sb2FkMzIoYWRkcmVzcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RN
b2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc2Nv
cGVPZmZzZXQsIG1fb3V0LmNvbnN0SW50MzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisg
ICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcywgc2Nv
cGUsIG1fb3V0Lnplcm9FeHRQdHIoc2NvcGVPZmZzZXQpKTsKKyAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG92ZXJmbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIGJhc2Us
CisgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVk
TGVuZ3RoKSkpOworICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2Fk
NjQoYWRkcmVzcyk7CisgICAgICAgICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9W
YWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihvdmVyZmxv
d1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgbmFtZWRSZXN1
bHQsIG92ZXJmbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUg
dHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
VHlwZWRQb2ludGVyIHBvaW50ZXIgPSBUeXBlZFBvaW50ZXIoCisgICAgICAgICAgICAgICAgICAg
IG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5zaGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuemVy
b0V4dFB0cihpbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGlzU2lnbmVkKHR5cGUpID8gbV9vdXQubG9hZDhTaWduRXh0MzIocG9pbnRlcikgOiAg
bV9vdXQubG9hZDhaZXJvRXh0MzIocG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gaXNTaWduZWQodHlwZSkgPyBtX291dC5sb2FkMTZTaWduRXh0MzIocG9pbnRl
cikgOiAgbV9vdXQubG9hZDE2WmVyb0V4dDMyKHBvaW50ZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmxvYWQzMihwb2ludGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNp
emUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxk
U3BlY3VsYXRlTWFjaGluZUludCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJp
Y3RJbnQ1MihtX291dC56ZXJvRXh0KHJlc3VsdCwgbV9vdXQuaW50NjQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9E
b3VibGUocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5mbG9hdFRvRG91Ymxl
KG1fb3V0LmxvYWRGbG9hdChwb2ludGVyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fb3V0LmxvYWREb3VibGUocG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZXREb3VibGUocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlw
ZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKKyAgICB7CisgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxpbWl0
OworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKQorICAgICAgICAgICAgbGltaXQgPSBtX291dC5jb25zdEludDMyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1
YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwgbV9vdXQu
aW50MzJPbmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoRXhvdGlj
T2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxpbWl0
KSk7CisgICAgICAgIAorICAgICAgICBUeXBlZFBvaW50ZXIgYmFzZTsKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSA8PSAxKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxy
ZWFkeSBleGl0ZWQgZHVlIHRvIHRoZSBib3VuZHMgY2hlY2ssIGFib3ZlLiBKdXN0IHRlbGwgdGhl
CisgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgdGhhdCBhbnl0aGluZyBkb21pbmF0ZWQgYnkg
dGhpcyBpbnN0cnVjdGlvbiBpcyBub3QgcmVhY2hhYmxlLCBzbworICAgICAgICAgICAgICAgIC8v
IHRoYXQgd2UgZG9uJ3Qgd2FzdGUgdGltZSBnZW5lcmF0aW5nIHN1Y2ggY29kZS4gVGhpcyB3aWxs
IGFsc28gcGxhbnQgc29tZQorICAgICAgICAgICAgICAgIC8vIGtpbmQgb2YgY3Jhc2hpbmcgaW5z
dHJ1Y3Rpb24gc28gdGhhdCBpZiBieSBzb21lIGZsdWtlIHRoZSBib3VuZHMgY2hlY2sgZGlkbid0
CisgICAgICAgICAgICAgICAgLy8gd29yaywgd2UnbGwgY3Jhc2ggaW4gYW4gZWFzeS10by1zZWUg
d2F5LgorICAgICAgICAgICAgICAgIGRpZEFscmVhZHlUZXJtaW5hdGUoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYXNlID0gYWRkcmVzc0Zv
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHBvaW50ZXIgPSBtX291
dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlLnZhbHVlKCksIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIG1fb3V0LmludFB0ciksIFNjYWxlRWlnaHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWQ2NChUeXBlZFBvaW50ZXIobV9oZWFwcy52YXJpYWJsZXMuYXRBbnlJbmRleCgpLCBwb2lu
dGVyKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbCgpCisgICAgewor
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAg
ICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSk7CisgICAg
ICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOworICAgICAg
ICBFZGdlIGNoaWxkNCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsKKyAgICAgICAg
RWRnZSBjaGlsZDUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCk7CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0VKSkogb3Bl
cmF0aW9uOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkg
eworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3Q7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0
TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB2bUNhbGwo
CisgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b24pLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxv
d0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChjaGls
ZDEpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihjaGlsZDIpOworICAgICAgICBM
VmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UoY2hpbGQ0KTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obV9vdXQubV9ibG9j
aywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgY2hpbGQzLCBTcGVjSW50MzIsIGlzTm90SW50
MzIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBUeXBlZFBvaW50
ZXIgZWxlbWVudFBvaW50ZXIgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAg
IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/CisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291
dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoY2hpbGQyKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGVsZW1lbnRQb2ludGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRz
KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkKKyAgICAg
ICAgICAgICAgICAgICAgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
CisgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3RvcmFnZSwgaW5kZXgsIHZh
bHVlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIGVsZW1lbnRQb2ludGVyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShj
aGlsZDMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KAorICAgICAgICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGNoaWxkMywgU3BlY0Rv
dWJsZVJlYWwsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQodmFsdWUsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VHlwZWRQb2ludGVyIGVsZW1lbnRQb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KAorICAgICAgICAg
ICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBzdG9yYWdlLCBtX291
dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVmFsdWUoY2hp
bGQyKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91
YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb250
aWd1b3VzUHV0QnlWYWxPdXRPZkJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
KCktPmlzU3RyaWN0TW9kZSgpCisgICAgICAgICAgICAgICAgICAgID8gb3BlcmF0aW9uUHV0RG91
YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdAorICAgICAgICAgICAgICAgICAgICA6IG9w
ZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIHN0b3JhZ2UsIGluZGV4LCB2YWx1ZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1
ZSwgZWxlbWVudFBvaW50ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
ZEFycmF5VHlwZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXco
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IFR5cGVkUG9p
bnRlcigKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5UHJvcGVydGllcywK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGxvZ0VsZW1lbnRTaXpl
KHR5cGUpKSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBPdXRwdXQ6OlN0
b3JlVHlwZSBzdG9yZVR5cGU7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9TdG9yZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGludFZhbHVlOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNoaWxkMy51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1
MlJlcFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkMy51c2VLaW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBsb3dJbnQzMihjaGlsZDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZh
bHVlID0gbV9vdXQuY2FzdFRvSW50MzIobG93U3RyaWN0SW50NTIoY2hpbGQzKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgYXRMZWFzdFplcm8gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGludCBjbGFt
cCBhdExlYXN0WmVybyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGludCBjbGFt
cCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBpbnRWYWx1ZXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNo
b3IobV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihp
bnRWYWx1ZSwgbV9vdXQuaW50MzJaZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShhdExlYXN0WmVybykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oYXRMZWFzdFplcm8sIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuc2VsZWN0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5ncmVhdGVyVGhhbihpbnRWYWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMigyNTUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMigyNTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1
ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZh
bHVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6
ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIGF0TGVhc3RaZXJvIikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJhbmdlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgd2l0aGluUmFuZ2UiKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gaW50VmFsdWVzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmludDMyWmVybykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW5PclVub3JkZXJlZChkb3VibGVW
YWx1ZSwgbV9vdXQuZG91YmxlWmVybyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoYXRMZWFzdFplcm8pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGF0TGVhc3RaZXJvLCB3aXRoaW5SYW5nZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3Io
bV9vdXQuY29uc3RJbnQzMigyNTUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVH
cmVhdGVyVGhhbihkb3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUoMjU1KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUod2l0
aGluUmFuZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh3aXRoaW5SYW5nZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hv
cihtX291dC5kb3VibGVUb0ludChkb3VibGVWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUg
PSBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IGRvdWJs
ZVRvSW50MzIoZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0b3JlID0gaW50VmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpT
dG9yZTMyQXM4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1
dDo6U3RvcmUzMkFzMTY7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0g
T3V0cHV0OjpTdG9yZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGVsZW1lbnQgc2l6ZSIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIC8qICFpc0ludCh0eXBlKSAqLyB7CisgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShjaGlsZDMpOworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IG1fb3V0LmRv
dWJsZVRvRmxvYXQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0g
T3V0cHV0OjpTdG9yZUZsb2F0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVRvU3RvcmUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlw
ZSA9IE91dHB1dDo6U3RvcmVEb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSB8fCBtX25v
ZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3Rv
cmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5cGUpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0luQm91bmRzID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCB0eXBlZCBhcnJheSBpbiBib3VuZHMgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCB0eXBlZCBhcnJheSBjb250aW51YXRpb24iKSk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxvd0ludDMyKGNo
aWxkNSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShpc0luQm91bmRzKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW5Cb3VuZHMsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlKHZhbHVlVG9TdG9y
ZSwgcG9pbnRlciwgc3RvcmVUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgY29tcGlsZVB1dEFjY2Vzc29yQnlJZCgpCisgICAgeworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBhY2Nl
c3NvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGF1dG8gdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAg
dm1DYWxsKAorICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCisgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCksCisgICAgICAgICAgICBtX2NhbGxGcmFt
ZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUt
PmFjY2Vzc29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOworICAgIH0KKworICAgIHZvaWQgY29t
cGlsZVB1dEdldHRlclNldHRlckJ5SWQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgZ2V0dGVyID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIHNldHRlciA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIGF1dG8gdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAgdm1DYWxsKAorICAg
ICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIpLAorICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIG1fb3V0LmNvbnN0SW50
UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSks
IGdldHRlciwgc2V0dGVyKTsKKworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVB1dEFjY2Vzc29y
QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBMVmFsdWUgc3Vic2NyaXB0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1dEdldHRlckJ5VmFsID8g
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCksCisgICAg
ICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgc3Vic2NyaXB0LCBtX291dC5jb25zdEludDMyKG1f
bm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUFycmF5UHVzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3Rv
cmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTog
eworICAgICAgICAgICAgTFZhbHVlIHZhbHVlOworICAgICAgICAgICAgT3V0cHV0OjpTdG9yZVR5
cGUgc3RvcmVUeXBlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkgeworICAgICAgICAgICAgICAgIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJh
eTo6SW50MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMigpLCBT
cGVjSW50MzIsIGlzTm90SW50MzIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTY0OworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgZG91
YmxlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMigpLCBTcGVjRG91YmxlUmVhbCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRG91YmxlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RI
ZWFwJiBoZWFwID0gbV9oZWFwcy5mb3JBcnJheVR5cGUobV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpOworCisgICAgICAgICAgICBMVmFsdWUgcHJldkxlbmd0aCA9IG1fb3V0LmxvYWQzMihzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJy
YXlQdXNoIGZhc3QgcGF0aCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVB1c2ggc2xvdyBwYXRoIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJh
eVB1c2ggY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAg
ICAgICAgICBwcmV2TGVuZ3RoLCBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5z
dXJlKGZhc3RQYXRoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNsb3dQYXRoKTsKKyAgICAgICAgICAg
IG1fb3V0LnN0b3JlKAorICAgICAgICAgICAgICAgIHZhbHVlLCBtX291dC5iYXNlSW5kZXgoaGVh
cCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihwcmV2TGVuZ3RoKSksIHN0b3JlVHlwZSk7Cisg
ICAgICAgICAgICBMVmFsdWUgbmV3TGVuZ3RoID0gbV9vdXQuYWRkKHByZXZMZW5ndGgsIG1fb3V0
LmludDMyT25lKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGJveEludDMyKG5l
d0xlbmd0aCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9u
KTsKKyAgICAgICAgICAgIExWYWx1ZSBvcGVyYXRpb247CisgICAgICAgICAgICBpZiAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQdXNoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uQXJyYXlQdXNoRG91YmxlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0
LCBvcGVyYXRpb24sIG1fY2FsbEZyYW1lLCB2YWx1ZSwgYmFzZSkpOworICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlQXJyYXlQb3AoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9u
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAg
ICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmZvckFycmF5VHlwZSht
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGZhc3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBmYXN0
IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJyYXlQb3Agc2xvdyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBjb250aW51
YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2TGVuZ3RoID0g
bV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpKTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5pc1plcm8zMihwcmV2TGVuZ3RoKSwgcmFy
ZWx5KGNvbnRpbnVhdGlvbiksIHVzdWFsbHkoZmFzdENhc2UpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwg
c2xvd0Nhc2UpOworICAgICAgICAgICAgTFZhbHVlIG5ld0xlbmd0aCA9IG1fb3V0LnN1YihwcmV2
TGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBtX291dC5zdG9yZTMyKG5ld0xl
bmd0aCwgc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgIFR5cGVkUG9pbnRlciBwb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2Us
IG1fb3V0Lnplcm9FeHRQdHIobmV3TGVuZ3RoKSk7CisgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkgeworICAgICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5sb2FkNjQocG9pbnRlcik7CisgICAgICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChtX291dC5pbnQ2NFplcm8sIHBvaW50ZXIpOworICAgICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZShw
b2ludGVyKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmNvbnN0SW50NjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgcG9pbnRlcik7CisgICAgICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveERvdWJsZShyZXN1bHQpKSk7CisgICAgICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVF
cXVhbChyZXN1bHQsIHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGlu
dWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UG9wQW5kUmVj
b3Zlckxlbmd0aCksIG1fY2FsbEZyYW1lLCBiYXNlKSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigpCisgICAgewor
ICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4o
KTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgSlNWYWx1ZSBpbml0aWFsaXphdGlvblZhbHVlID0gbV9ub2RlLT5pbml0aWFsaXphdGlvblZh
bHVlRm9yQWN0aXZhdGlvbigpOworICAgICAgICBBU1NFUlQoaW5pdGlhbGl6YXRpb25WYWx1ZS5p
c1VuZGVmaW5lZCgpIHx8IGluaXRpYWxpemF0aW9uVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKKyAg
ICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAg
ICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50NjQsCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0
ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJlKSwK
KyAgICAgICAgICAgICAgICBzY29wZSwgd2Vha1BvaW50ZXIodGFibGUpLCBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24g
Y29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0xleGljYWxFbnZpcm9ubWVu
dD4oCisgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUodGFi
bGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgbWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFz
dC1jcmVhdGVkIHRoZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbiBt
dXN0IGJlIHlvdW5nLgorICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwg
bV9oZWFwcy5KU1Njb3BlX25leHQpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRl
cih0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1ib2xU
YWJsZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUt
PnNjb3BlU2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25W
YWx1ZSkpLAorICAgICAgICAgICAgICAgIGZhc3RPYmplY3QsIG1faGVhcHMuSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXNbaV0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQg
PSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlv
blZhbHVlKSkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNjb3BlKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9ub2RlLT5vcCgpID09IE5ld0Z1bmN0aW9uIHx8IG1fbm9kZS0+b3AoKSA9PSBOZXdBcnJvd0Z1
bmN0aW9uIHx8IG1fbm9kZS0+b3AoKSA9PSBOZXdHZW5lcmF0b3JGdW5jdGlvbik7CisgICAgICAg
IGJvb2wgaXNHZW5lcmF0b3JGdW5jdGlvbiA9IG1fbm9kZS0+b3AoKSA9PSBOZXdHZW5lcmF0b3JG
dW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAg
ICAgIGlmIChleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5pc1N0aWxsVmFsaWQoKSkg
eworICAgICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPQorICAgICAgICAgICAgICAgIGlzR2Vu
ZXJhdG9yRnVuY3Rpb24gPyB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50
ZXIoZXhlY3V0YWJsZSkpIDoKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBzY29wZSwg
d2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsUmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+Z2VuZXJh
dG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSA6CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmZ1bmN0aW9uU3RydWN0dXJlKCk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTmV3RnVuY3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0Z1bmN0aW9uIGNvbnRpbnVhdGlvbiIp
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0
TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBmYXN0
T2JqZWN0ID0KKyAgICAgICAgICAgIGlzR2VuZXJhdG9yRnVuY3Rpb24gPyBhbGxvY2F0ZU9iamVj
dDxKU0dlbmVyYXRvckZ1bmN0aW9uPihzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKSA6CisgICAgICAgICAgICBhbGxvY2F0ZU9iamVjdDxKU0Z1bmN0aW9uPihzdHJ1Y3R1cmUs
IG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAg
ICAvLyBXZSBkb24ndCBuZWVkIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3Jl
YXRlZCB0aGUgZnVuY3Rpb24sIHNvIGl0CisgICAgICAgIC8vIG11c3QgYmUgeW91bmcuCisgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rpb25f
c2NvcGUpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSwg
ZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX2V4ZWN1dGFibGUpOworICAgICAgICBtX291
dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rp
b25fcmFyZURhdGEpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgVmVjdG9yPExWYWx1ZT4gc2xvd1BhdGhBcmd1bWVudHM7Cisg
ICAgICAgIHNsb3dQYXRoQXJndW1lbnRzLmFwcGVuZChzY29wZSk7CisgICAgICAgIExWYWx1ZSBj
YWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRvckZ1bmN0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVh
bGxvY2F0aW9uV2F0Y2hwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlk
YXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEEgbW9yZSBlZmZlY3RpdmUgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGUgYXJndW1lbnQg
Y291bnQgYW5kIGNhbGxlZSBpcyB0byBoYXZlCisgICAgICAgIC8vIHRoZW0gYmUgZXhwbGljaXQg
YXJndW1lbnRzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MjIwNworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPQorICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIG1pbkNhcGFjaXR5ID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q3JlYXRlRGlyZWN0QXJndW1lbnRzIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVu
dHMgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgQXJndW1lbnRzTGVuZ3RoIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aCgpOworICAg
ICAgICAKKyAgICAgICAgTFZhbHVlIGZhc3RPYmplY3Q7CisgICAgICAgIGlmIChsZW5ndGguaXNL
bm93bikgeworICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PERpcmVjdEFy
Z3VtZW50cz4oCisgICAgICAgICAgICAgICAgRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6
ZShzdGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KSksIHN0cnVjdHVyZSwKKyAgICAg
ICAgICAgICAgICBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBMVmFsdWUgc2l6ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICBt
X291dC5zaGwobGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKDMpKSwKKyAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgPSBtX291dC5zZWxlY3QoCisgICAgICAg
ICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihtaW5DYXBhY2l0eSkpLAorICAgICAgICAgICAgICAgIHNpemUsIG1fb3V0LmNvbnN0SW50MzIo
RGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBhY2l0eSkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVj
dDxEaXJlY3RBcmd1bWVudHM+KAorICAgICAgICAgICAgICAgIHNpemUsIHN0cnVjdHVyZSwgbV9v
dXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X291dC5zdG9yZTMyKGxlbmd0aC52YWx1ZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1p
bkNhcGFjaXR5KSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWluQ2FwYWNp
dHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0
LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpOworICAgICAgICAKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBjYWxsUmVz
dWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7CisgICAgICAgICAg
ICB9LCBsZW5ndGgudmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOworCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGdldEN1cnJl
bnRDYWxsZWUoKSwgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19jYWxsZWUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGxlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhcnQgPSBBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3Ioc3RhcnQgKyBpKSksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5E
aXJlY3RBcmd1bWVudHNfc3RvcmFnZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBMVmFsdWUgc3RhY2tCYXNlID0gZ2V0QXJndW1lbnRzU3RhcnQoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0QXJndW1lbnRzIGxvb3AgYm9keSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGVuZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0
QXJndW1lbnRzIGxvb3AgZW5kIikpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmln
aW5hbExlbmd0aDsKKyAgICAgICAgICAgIGlmIChtaW5DYXBhY2l0eSkgeworICAgICAgICAgICAg
ICAgIExWYWx1ZSBjYXBhY2l0eSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihtaW5DYXBh
Y2l0eSkpLAorICAgICAgICAgICAgICAgICAgICBsZW5ndGgudmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpKTsKKyAgICAgICAgICAgICAgICBM
VmFsdWUgb3JpZ2luYWxMZW5ndGhWYWx1ZSA9IG1fb3V0Lnplcm9FeHRQdHIoY2FwYWNpdHkpOwor
ICAgICAgICAgICAgICAgIG9yaWdpbmFsTGVuZ3RoID0gbV9vdXQuYW5jaG9yKG9yaWdpbmFsTGVu
Z3RoVmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0aFZhbHVlID0g
bV9vdXQuemVyb0V4dFB0cihsZW5ndGgudmFsdWUpOworICAgICAgICAgICAgICAgIG9yaWdpbmFs
TGVuZ3RoID0gbV9vdXQuYW5jaG9yKG9yaWdpbmFsTGVuZ3RoVmFsdWUpOworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwob3JpZ2luYWxMZW5ndGhWYWx1ZSksIHVuc3Vy
ZShlbmQpLCB1bnN1cmUobG9vcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3AsIGVuZCk7CisgICAgICAgICAg
ICBMVmFsdWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIG9yaWdpbmFs
TGVuZ3RoKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0lu
ZGV4LCBtX291dC5pbnRQdHJPbmUpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVz
LCBzdGFja0Jhc2UsIGluZGV4KSksCisgICAgICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIHJlc3VsdCwgaW5kZXgpKTsKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAg
ICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKGluZGV4KSwgdW5zdXJlKGVu
ZCksIHVuc3VyZShsb29wKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGVuZCwgbGFzdE5leHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFy
Z3VtZW50cygpCisgICAgeworICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAg
ICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICB3ZWFrUG9pbnRlcigKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgIGdldEFyZ3Vt
ZW50c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVl
KCksIHNjb3BlKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50cyksIG1fY2FsbEZy
YW1lLAorICAgICAgICAgICAgd2Vha1BvaW50ZXIoCisgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5vdXRPZkJhbmRBcmd1bWVu
dHNTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBnZXRBcmd1
bWVudHNMZW5ndGgoKS52YWx1ZSwgZ2V0Q3VycmVudENhbGxlZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDb3B5UmVz
dCgpCisgICAgeyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBkb0NvcHlSZXN0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJDb3B5UmVzdCBDIGNhbGwiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRmlsbFJlc3RQYXJh
bWV0ZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBhcnJheUxlbmd0aCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKGFycmF5TGVuZ3RoLCBtX291dC5jb25zdEludDMyKDApKSwKKyAg
ICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZG9Db3B5UmVzdCkpOworICAg
ICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
ZG9Db3B5UmVzdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMs
IDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50
cyB0byBza2lwLCA0OmFycmF5IGxlbmd0aAorICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSk7CisgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25Db3B5UmVzdCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAsIGFycmF5TGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFJlc3RMZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm9uWmVyb0xlbmd0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
UmVzdExlbmd0aCBub24gemVybyIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIGNvbnRpbnVhdGlvbiIpKTsK
KyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHplcm9MZW5ndGhSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisKKyAgICAgICAgTFZhbHVlIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1l
bnRzTGVuZ3RoKCkudmFsdWU7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZShhcmd1
bWVudHNMZW5ndGgsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShub25aZXJvTGVuZ3RoKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub25aZXJvTGVuZ3RoLCBj
b250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub25aZXJvTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHplcm9MZW5ndGhSZXN1bHQsIG5vblpl
cm9MZW5ndGhSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTmV3T2JqZWN0
KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoYWxsb2NhdGVPYmplY3QobV9ub2RlLT5zdHJ1
Y3R1cmUoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVOZXdBcnJheSgpCisgICAg
eworICAgICAgICAvLyBGaXJzdCBzcGVjdWxhdGUgYXBwcm9wcmlhdGVseSBvbiBhbGwgb2YgdGhl
IGNoaWxkcmVuLiBEbyB0aGlzIHVuY29uZGl0aW9uYWxseSB1cCBoZXJlCisgICAgICAgIC8vIGJl
Y2F1c2Ugc29tZSBvZiB0aGUgc2xvdyBwYXRocyBtYXkgb3RoZXJ3aXNlIGZvcmdldCB0byBkbyBp
dC4gSXQncyBzb3J0IG9mIGFyZ3VhYmxlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgdGhlIHNwZWN1
bGF0aW9ucyB1cCBoZXJlIG1pZ2h0IGJlIHVucHJvZml0YWJsZSBmb3IgUkEgLSBzbyB3ZSBjYW4g
Y29uc2lkZXIKKyAgICAgICAgLy8gc2lua2luZyB0aGlzIHRvIGJlbG93IHRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpZiB3ZSBmaW5kIHRoYXQgdGhpcyBoYXMgYSBsb3Qgb2YKKyAgICAgICAgLy8g
cmVnaXN0ZXIgcHJlc3N1cmUuCisgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0g
MDsgb3BlcmFuZEluZGV4IDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFu
ZEluZGV4KSk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSk7CisKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRp
bWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJyYXlWYWx1ZXMgYXJyYXlWYWx1ZXMgPSBhbGxv
Y2F0ZUpTQXJyYXkoc3RydWN0dXJlLCBudW1FbGVtZW50cyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbV9u
b2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgeworICAgICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmRleGluZyB0
eXBlIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
bG93RG91YmxlKGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0
dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW29wZXJhbmRJbmRleF0pOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5
VmFsdWVzLmJ1dHRlcmZseSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuZm9ySW5k
ZXhpbmdUeXBlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpLT5hdChvcGVyYW5kSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJDb3JydXB0IGluZGV4aW5nIHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFtX25vZGUtPm51bUNoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIG1f
b3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSksIG1fY2Fs
bEZyYW1lLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90
IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG1fbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUp
OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFuZEluZGV4KTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKGJ1ZmZlciAr
IG9wZXJhbmRJbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9y
ZVB0cigKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNjcmF0Y2hTaXplKSwgbV9vdXQu
YWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5KSwgbV9jYWxsRnJhbWUsCisgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291dC5jb25zdEludFB0cihidWZm
ZXIpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5udW1DaGlsZHJlbigp
KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBt
X291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSkpOworICAgICAg
ICAKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVOZXdBcnJheUJ1ZmZlcigpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9u
b2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWdsb2JhbE9iamVj
dC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2Rl
LT5udW1Db25zdGFudHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJyYXlWYWx1ZXMg
YXJyYXlWYWx1ZXMgPSBhbGxvY2F0ZUpTQXJyYXkoc3RydWN0dXJlLCBudW1FbGVtZW50cyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBjb2RlQmxvY2soKS0+Y29u
c3RhbnRCdWZmZXIobV9ub2RlLT5zdGFydENvbnN0YW50KCkpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9ub2RlLT5udW1Db25zdGFudHMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICAgICAgaWYg
KGhhc0RvdWJsZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oZGF0YVtpbmRleF0uYXNOdW1iZXIoKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEpTVmFsdWU6
OmVuY29kZShkYXRhW2luZGV4XSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCh2YWx1
ZSksCisgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsdWVzLmJ1dHRlcmZseSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5pbmRleGluZ1R5cGUo
KSktPmF0KGluZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAg
IG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIpLCBt
X2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSksIG1f
b3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+c3RhcnRDb25zdGFudCgpKSwKKyAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ29uc3RhbnRzKCkpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKQorICAgIHsKKyAgICAgICAgTFZhbHVl
IHB1YmxpY0xlbmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbigKKyAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55
QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpCisgICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKKyAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKKyAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZmFzdCBjYXNlIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFyZ2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdp
dGhTaXplIGxhcmdlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBmYWlsIGNhc2UiKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TmV3QXJyYXlXaXRoU2l6ZSBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgY29u
dGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHB1YmxpY0xlbmd0aCwgbV9vdXQuY29u
c3RJbnQzMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSksCisgICAgICAg
ICAgICAgICAgcmFyZWx5KGxhcmdlQ2FzZSksIHVzdWFsbHkoZmFzdENhc2UpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwgbGFy
Z2VDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgcm91bmQgdXAg
dG8gQkFTRV9WRUNUT1JfTEVOIGZvciBuZXcgQXJyYXkoYmxhaCkuCisgICAgICAgICAgICBMVmFs
dWUgdmVjdG9yTGVuZ3RoID0gcHVibGljTGVuZ3RoOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMVmFsdWUgcGF5bG9hZFNpemUgPQorICAgICAgICAgICAgICAgIG1fb3V0LnNobChtX291dC56
ZXJvRXh0KHZlY3Rvckxlbmd0aCwgbV9vdXQuaW50UHRyKSwgbV9vdXQuY29uc3RJbnRQdHIoMykp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0
LmFkZCgKKyAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
ZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6
ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5
ID0gbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0
dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
dXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBidXR0
ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChoYXNEb3VibGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TmV3QXJyYXlXaXRoU2l6ZSBkb3VibGUgaW5pdCBsb29wIikpOworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGluaXREb25lID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhT
aXplIGRvdWJsZSBpbml0IGRvbmUiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxJbmRleCA9IG1fb3V0LmFuY2hvcih2ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsUG9pbnRlciA9IG1f
b3V0LmFuY2hvcihidXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKHZlY3Rvckxlbmd0aCksIHVuc3VyZShp
bml0TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGluaXRMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluaXRMb29w
LCBpbml0RG9uZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQucGhpKG1f
b3V0LmludDMyLCBvcmlnaW5hbEluZGV4KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcG9pbnRl
ciA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIG9yaWdpbmFsUG9pbnRlcik7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLAorICAgICAg
ICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIobV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGll
cy5hdEFueUluZGV4KCksIHBvaW50ZXIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgbmV4dEluZGV4ID0gbV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleCwgbV9vdXQuYW5j
aG9yKG5leHRJbmRleCkpOworICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGko
cG9pbnRlciwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChwb2ludGVyLCBtX291dC5pbnRQdHJFaWdo
dCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdFplcm8zMihuZXh0SW5kZXgpLCB1bnN1cmUoaW5pdExvb3ApLCB1bnN1cmUoaW5p
dERvbmUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhpbml0RG9uZSwgaW5pdExhc3ROZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihvYmpl
Y3QpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2UsIGZhaWxDYXNlKTsKKyAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlU3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmNvbnN0SW50UHRyKAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFpbFN0cnVjdHVyZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdElu
dFB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKKyAg
ICAgICAgICAgICAgICBtX291dC5pbnRQdHIsIGxhcmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisg
ICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sy
XS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZVZhbHVlID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFs
KHB1YmxpY0xlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAg
ICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSwKKyAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHN0cnVjdHVyZSkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5p
bnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUpLCBtX2NhbGxG
cmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCkpOworICAgIH0KKworICAgIHZvaWQg
Y29tcGlsZU5ld1R5cGVkQXJyYXkoKQorICAgIHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IG1fbm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUodHlwZSk7CisKKyAg
ICAgICAgICAgIExWYWx1ZSBzaXplID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHNtYWxsRW5vdWdoQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTmV3VHlwZWRBcnJheSBzbWFsbCBlbm91Z2ggY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIG5vblplcm9DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFy
cmF5IG5vbi16ZXJvIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBzbG93IGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik5ld1R5cGVkQXJyYXkgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihK
U0FycmF5QnVmZmVyVmlldzo6ZmFzdFNpemVMaW1pdCkpLAorICAgICAgICAgICAgICAgIHJhcmVs
eShzbG93Q2FzZSksIHVzdWFsbHkoc21hbGxFbm91Z2hDYXNlKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21hbGxFbm91Z2hDYXNlLCBub25a
ZXJvQ2FzZSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RaZXJvMzIoc2l6
ZSksIHVzdWFsbHkobm9uWmVyb0Nhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm9uWmVyb0Nhc2UsIHNsb3dDYXNlKTsKKworICAgICAgICAgICAg
TFZhbHVlIGJ5dGVTaXplID0KKyAgICAgICAgICAgICAgICBtX291dC5zaGwobV9vdXQuemVyb0V4
dFB0cihzaXplKSwgbV9vdXQuY29uc3RJbnQzMihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpOworICAg
ICAgICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgOCkgeworICAgICAgICAgICAgICAgIGJ5
dGVTaXplID0gbV9vdXQuYml0QW5kKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hZGQoYnl0
ZVNpemUsIG1fb3V0LmNvbnN0SW50UHRyKDcpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0cl90Pig3KSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2UoYnl0ZVNpemUsIHNsb3dDYXNlKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRW
YWx1ZSA9CisgICAgICAgICAgICAgICAgYWxsb2NhdGVPYmplY3Q8SlNBcnJheUJ1ZmZlclZpZXc+
KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBt
X291dC5zdG9yZVB0cihzdG9yYWdlLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1
ZmZlclZpZXdfdmVjdG9yKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIoc2l6ZSwgZmFzdFJl
c3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5cGVkQXJyYXkpLCBmYXN0UmVz
dWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7CisKKyAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVl
KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIExW
YWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1d
IChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFy
cmF5V2l0aFNpemVGb3JUeXBlKHR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHNpemUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJn
dW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKHR5
cGUpKSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKHR5cGUpKSwgYXJndW1lbnQpOworCisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzKSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9u
ID0gbV9ub2RlLT50cmFuc2l0aW9uKCk7CisgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgb2xkU3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBzZXRTdG9yYWdlKAorICAg
ICAgICAgICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLCB0cmFuc2l0aW9uLT5uZXh0KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nT3JDYWxsU3RyaW5nQ29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZTogeworICAgICAgICAgICAgTFZhbHVl
IGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nT2JqZWN0Rm9yQ2VsbChtX25vZGUtPmNoaWxkMSgpLCBjZWxsKTsKKyAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZmlsdGVyKG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmdPYmplY3Qp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoY2Vs
bCwgbV9oZWFwcy5KU1dyYXBwZXJPYmplY3RfaW50ZXJuYWxWYWx1ZSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJU
b1N0cmluZyBTdHJpbmdPclN0cmluZ09iamVjdCBub3Qgc3RyaW5nIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRv
U3RyaW5nIFN0cmluZ09yU3RyaW5nT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGNlbGwpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJl
LT5pZCgpKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShu
b3RTdHJpbmcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChtX25vZGUtPmNoaWxkMSgpLCBz
dHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFw
cy5KU1dyYXBwZXJPYmplY3RfaW50ZXJuYWxWYWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCBzaW1wbGVSZXN1bHQsIHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIobV9ub2RlLT5jaGlsZDEoKSwg
U3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIGlm
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgICAg
IHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVkVXNlIGlzIGNlbGwiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3Ry
aW5nIENlbGxVc2UvVW50eXBlZFVzZSBub3Qgc3RyaW5nIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBDZWxs
VXNlL1VudHlwZWRVc2UgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMVmFsdWUgaXNDZWxsUHJlZGljYXRlOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICAgICAgaXNDZWxsUHJlZGljYXRl
ID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNDZWxsUHJlZGljYXRlID0gdGhpcy0+aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+
Y2hpbGQxKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGxQcmVkaWNhdGUsIHVu
c3VyZShpc0NlbGwpLCB1bnN1cmUobm90U3RyaW5nKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsLCBub3RTdHJp
bmcpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZhbHVlKTsKKyAgICAgICAgICAgIExWYWx1ZSBpc1N0cmluZ1ByZWRpY2F0ZTsKKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjU3RyaW5nKSB7
CisgICAgICAgICAgICAgICAgaXNTdHJpbmdQcmVkaWNhdGUgPSBpc1N0cmluZyh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZ1ByZWRpY2F0ZSwgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShub3RTdHJpbmcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90U3RyaW5nLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIG9wZXJh
dGlvbjsKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxs
VXNlKQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihtX25vZGUt
Pm9wKCkgPT0gVG9TdHJpbmcgPyBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbCA6IG9wZXJhdGlvbkNh
bGxTdHJpbmdDb25zdHJ1Y3Rvck9uQ2VsbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmlu
ZyA/IG9wZXJhdGlvblRvU3RyaW5nIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKTsK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNpbXBsZVJlc3VsdCwgY29udmVy
dGVkUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlVG9QcmltaXRpdmUoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJp
bWl0aXZlIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNPYmplY3RDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJUb1ByaW1pdGl2ZSBvYmplY3QgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1By
aW1pdGl2ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDM+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZCht
X291dC5hbmNob3IodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzT2JqZWN0Q2FzZSk7
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkpOworICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICB1bnN1cmUoaXNPYmplY3RDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNPYmpl
Y3RDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3Iodm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25Ub1ByaW1pdGl2ZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpKTsKKyAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1ha2VSb3Bl
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBraWRzWzNdOworICAgICAgICB1bnNpZ25lZCBudW1L
aWRzOworICAgICAgICBraWRzWzBdID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAga2lkc1sxXSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICBraWRzWzJdID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIG51bUtpZHMgPSAzOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAga2lkc1syXSA9IDA7CisgICAgICAgICAgICBudW1LaWRzID0gMjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk1ha2VSb3BlIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYWtlUm9wZSBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBNYXJrZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9CisgICAgICAgICAgICB2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aERlc3RydWN0b3Ioc2l6ZW9mKEpTUm9wZVN0cmluZykpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLAorICAgICAgICAgICAgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCksCisgICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9y
ZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQorICAgICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIoa2lkc1tpXSwgcmVzdWx0LCBtX2hlYXBzLkpTUm9wZVN0cmluZ19m
aWJlcnNbaV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1LaWRzOyBpIDwgSlNSb3Bl
U3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgcmVzdWx0LCBtX2hlYXBzLkpTUm9wZVN0cmluZ19m
aWJlcnNbaV0pOworICAgICAgICBMVmFsdWUgZmxhZ3MgPSBtX291dC5sb2FkMzIoa2lkc1swXSwg
bV9oZWFwcy5KU1N0cmluZ19mbGFncyk7CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5s
b2FkMzIoa2lkc1swXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgbnVtS2lkczsgKytpKSB7CisgICAgICAgICAgICBmbGFncyA9IG1f
b3V0LmJpdEFuZChmbGFncywgbV9vdXQubG9hZDMyKGtpZHNbaV0sIG1faGVhcHMuSlNTdHJpbmdf
ZmxhZ3MpKTsKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGxlbmd0aENoZWNrID0gbV9vdXQuc3Bl
Y3VsYXRlQWRkKAorICAgICAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQubG9hZDMyKGtpZHNbaV0s
IG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7CisgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9u
KGxlbmd0aENoZWNrLCBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7
CisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGhDaGVjazsKKyAgICAgICAgfQorICAgICAgICBt
X291dC5zdG9yZTMyKAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKG1fb3V0LmNvbnN0SW50MzIo
SlNTdHJpbmc6OklzOEJpdCksIGZsYWdzKSwKKyAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5K
U1N0cmluZ19mbGFncyk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCByZXN1bHQsIG1f
aGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IocmVzdWx0KTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWU7CisgICAgICAg
IHN3aXRjaCAobnVtS2lkcykgeworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTIsIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LCBr
aWRzWzBdLCBraWRzWzFdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAg
ICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtl
Um9wZTMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbM10uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNb
MV0sIGtpZHNbMl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIG51bWJlciBvZiBjaGlsZHJl
biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
bV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBm
YXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGZhc3QgcGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0Lmxv
YWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSksCisgICAgICAg
ICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwg
c2xvd1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9v
dXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBpczhCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFN0cmluZyA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBpczE2Qml0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgMTYtYml0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGJpdHNDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyBiaXRuZXNzIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgYmlnQ2hhcmFjdGVyID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBT
dHJpbmcgYmlnIGNoYXJhY3RlciIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgp
KSksCisgICAgICAgICAgICB1bnN1cmUoaXMxNkJpdCksIHVuc3VyZShpczhCaXQpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOworICAgICAg
ICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXI4Qml0ID0gbV9vdXQuYW5jaG9yKAor
ICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAorICAgICAg
ICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpLAorICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkp
OworICAgICAgICBtX291dC5qdW1wKGJpdHNDb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzMTZCaXQsIGJpZ0NoYXJhY3Rlcik7CisKKyAgICAgICAg
TFZhbHVlIGNoYXIxNkJpdFZhbHVlID0gbV9vdXQubG9hZDE2WmVyb0V4dDMyKAorICAgICAgICAg
ICAgbV9vdXQuYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2
LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICBwcm92
ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFy
MTZCaXQgPSBtX291dC5hbmNob3IoY2hhcjE2Qml0VmFsdWUpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoY2hhcjE2Qml0VmFsdWUsIG1fb3V0
LmNvbnN0SW50MzIoMHgxMDApKSwKKyAgICAgICAgICAgIHJhcmVseShiaWdDaGFyYWN0ZXIpLCB1
c3VhbGx5KGJpdHNDb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhiaWdDaGFyYWN0ZXIsIGJpdHNDb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgND4gcmVzdWx0czsKKyAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKSwKKyAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLCBjaGFyMTZCaXRWYWx1ZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpdHND
b250aW51YXRpb24sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgY2hh
cmFjdGVyID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBjaGFyOEJpdCwgY2hhcjE2Qml0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICBMVmFsdWUgc21hbGxTdHJpbmdzID0gbV9vdXQuY29uc3RJbnRQ
dHIodm0oKS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubG9hZFB0ciht
X291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z3MsIHNtYWxsU3RyaW5ncywgbV9vdXQuemVyb0V4dFB0cihjaGFyYWN0ZXIpKSkpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJv
dG90eXBlQ2hhaW5Jc1NhbmUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIGNhcHR1cmVkIHVzaW5nIGEgU3BlY3VsYXRpb24gbW9kZSB0aGF0IG1lYW5zCisgICAg
ICAgICAgICAgICAgLy8gIm91dC1vZi1ib3VuZHMgbG9hZHMgcmV0dXJuIGEgdHJpdmlhbCB2YWx1
ZSIsIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgICAgLy8gU2FuZUNoYWluT3V0T2ZCb3Vu
ZHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDY2OAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgu
d2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGUoKS0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5lZ2F0aXZlSW5kZXggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBuZWdhdGl2ZSBpbmRleCIpKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybyksCisgICAgICAgICAgICAgICAg
ICAgIHJhcmVseShuZWdhdGl2ZUluZGV4KSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmVnYXRpdmVJ
bmRleCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAg
ICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbFN0cmlu
Z0ludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgpCisgICAgeworICAgICAgICBMQmFzaWNC
bG9jayBpczhCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgOC1i
aXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXMxNkJpdCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiU3RyaW5nQ2hhckNvZGVBdCAxNi1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29k
ZUF0IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBVbmNv
dW50YWJsZSwgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAor
ICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCkpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8z
MigKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJp
bmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihT
dHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpczE2Qml0KSwg
dW5zdXJlKGlzOEJpdCkpOworICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBt
X2hlYXBzLmNoYXJhY3RlcnM4LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAg
ICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlzMTZCaXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2hhcjE2Qml0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQu
bG9hZDE2WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBz
LmNoYXJhY3RlcnMxNiwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCisgICAgICAg
ICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAgICAgc2V0SW50MzIobV9vdXQu
cGhpKG1fb3V0LmludDMyLCBjaGFyOEJpdCwgY2hhcjE2Qml0KSk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlU3RyaW5nRnJvbUNoYXJDb2RlKCkKKyAgICB7CisgICAgICAgIEVkZ2UgY2hpbGRF
ZGdlID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZEVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2
bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5cGVkKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAg
ICAgICAgbG93SlNWYWx1ZShjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCBjaGlsZEVkZ2UudXNlS2luZCgpID09IEludDMyVXNlKTsKKwor
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihjaGlsZEVkZ2UpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc21hbGxJbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
dHJpbmdGcm9tQ2hhckNvZGUgc21hbGwgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdGcm9tQ2hhckNvZGUgc2xv
dyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHZhbHVlLCBt
X291dC5jb25zdEludDMyKDB4ZmYpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkoc21hbGxJbnRDYXNlKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhzbWFsbEludENhc2UsIHNsb3dDYXNlKTsKKworICAgICAgICBMVmFsdWUg
c21hbGxTdHJpbmdzID0gbV9vdXQuY29uc3RJbnRQdHIodm0oKS5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5ncygpKTsKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1f
b3V0LmxvYWRQdHIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzLCBzbWFsbFN0cmluZ3MsIG1fb3V0Lnplcm9FeHRQdHIodmFsdWUpKSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJl
c3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgIExWYWx1
ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUpLCBtX2NhbGxGcmFtZSwg
dmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRCeU9mZnNldCgpCisgICAgewor
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUobG9hZFByb3BlcnR5KAorICAgICAg
ICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCBkYXRhLm9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIo
KQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX2dldHRlcikpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0
dGVyX3NldHRlcikpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zm
c2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCisgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9u
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOworCisgICAgICAgIGlmIChkYXRhLmNhc2VzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhp
IGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAg
ICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRh
LmNhc2VzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6
ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNdWx0aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBleGl0
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVs
dGlHZXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBnZXRDYXNlLnNldCgpLnNpemUoKTsgai0tOykgewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FzZS5zZXQoKVtqXTsK
KyAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9j
a3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1f
b3V0LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwgY2FzZXMsIGV4aXQsIFdlaWdodCgwKSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0aG9kLmNvbnN0YW50KCktPnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eUJhc2U7CisgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kKCkgPT0g
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFz
ZSA9IGJhc2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxs
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbG9hZEJ1dHRlcmZseVJlYWRP
bmx5KHByb3BlcnR5QmFzZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5
KAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJl
ciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3IocmVzdWx0KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkp
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1f
b3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1dEJ5
T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbV9ub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgc3RvcmVQcm9wZXJ0eSgK
KyAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSksCisgICAgICAgICAgICBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIGRhdGEu
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgp
CisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9j
aywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0QnlPZmZzZXQgY2FzZSAiLCBpKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0
QnlPZmZzZXQgZmFpbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKKyAgICAgICAgU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQu
b2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdOworICAgICAgICAgICAgICAg
IGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3
aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1
Y3Rpb24oCisgICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKworICAgICAgICAgICAg
Y2hlY2tJbmZlcnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwgdmFsdWUsIHZhcmlhbnQucmVxdWly
ZWRUeXBlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVy
KGJhc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
cGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9j
aygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFy
aWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworCisgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOworICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24pOworICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1
YnNldE9mKGJhc2VTZXQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgp
CisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSht
X25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVQdXRHbG9iYWxWYXJpYWJsZSgpCisgICAgeworICAgICAgICBtX291dC5zdG9yZTY0KAorICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuYWJzb2x1dGUobV9u
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVO
b3RpZnlXcml0ZSgpCisgICAgeworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUt
PndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52
YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIG5vdCBpbnZhbGlk
YXRlZCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmFic29sdXRl
KHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5lcXVhbChzdGF0ZSwgbV9vdXQuY29uc3RJbnQzMihJc0ludmFsaWRhdGVkKSks
CisgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc05vdEludmFsaWRh
dGVkKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSwgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNldCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQorICAgIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoSlNTdGFjazo6Q2FsbGVlKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50KCkKKyAgICB7Cisg
ICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKKyAgICB7
CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2hlYXBzLkpTRnVuY3Rpb25fc2NvcGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlU2tpcFNjb3BlKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0
cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTU2NvcGVfbmV4dCkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRDbG9zdXJlVmFyKCkKKyAgICB7CisgICAgICAg
IHNldEpTVmFsdWUoCisgICAgICAgICAgICBtX291dC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW21fbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKV0p
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0Q2xvc3VyZVZhcigpCisgICAgewor
ICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKSwKKyAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW21fbm9kZS0+c2NvcGVP
ZmZzZXQoKS5vZmZzZXQoKV0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRGcm9t
QXJndW1lbnRzKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoCisgICAgICAgICAgICBtX291
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAg
ICAgICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgK
KyAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfc3RvcmFnZVttX25vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUVxKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKKyAgICAgICAgICAgIHx8
IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDUyUmVwVXNlKQorICAgICAgICAgICAgfHwgbV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoQm9vbGVhblVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFN5bWJvbFVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFN0cmluZ0lkZW50VXNlKQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3RyaW5nVXNlKSkgeworICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlLCBPYmplY3RPck90aGVyVXNlKSkgeworICAgICAg
ICAgICAgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCksIG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSwg
T2JqZWN0VXNlKSkgeworICAgICAgICAgICAgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0
KG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZSgKKyAg
ICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVFcSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gT3RoZXJVc2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKTsKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDIoKSwgQWxsQ2Vs
bHNBcmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE90aGVyVXNlKSB7CisgICAgICAgICAgICBBU1NFUlQo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDIoKSwgU3BlY090aGVy
KSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+
Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCisgICAgeworICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CisgICAgICAgICAgICBz
ZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50NTJSZXBVc2UpKSB7CisgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKKyAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwg
a2luZCk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBraW5kKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwobGVmdCwgcmln
aHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKERvdWJsZVJlcFVzZSkpIHsKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkgeworICAgICAgICAgICAgc2V0Qm9vbGVh
bigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dTdHJpbmdJZGVudChtX25vZGUtPmNo
aWxkMSgpKSwgbG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChTdHJpbmdVc2UpKSB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RUcml2aWFsbHlFcXVhbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcS9TdHJpbmcgbm90IHRy
aXZpYWxseSBlcXVhbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEvU3RyaW5nIGNvbnRp
bnVhdGlvbiIpKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG1fbm9kZS0+Y2hpbGQx
KCksIGxlZnQpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsZWZ0LCByaWdodCksIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobm90VHJpdmlhbGx5RXF1YWxDYXNlKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5RXF1YWxDYXNl
LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobV9ub2RlLT5j
aGlsZDIoKSwgcmlnaHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHN0cmluZ3NFcXVhbChsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChPYmplY3RVc2UsIFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29s
ZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBs
b3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5
cGVkVXNlLCBPYmplY3RVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0
KG1fbm9kZS0+Y2hpbGQyKCkpLAorICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgeworICAgICAgICAgICAg
c2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoQm9vbGVhblVzZSkpIHsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAg
ICAgICAgICAgbV9vdXQuZXF1YWwobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbG93Qm9v
bGVhbihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN5bWJvbFVzZSkpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICAgICAgTFZhbHVlIGxlZnRTdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihsZWZ0LCBtX2hl
YXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRTdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihyaWdodCwgbV9oZWFwcy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwor
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0U3RyaW5nSW1wbCwgcmlnaHRT
dHJpbmdJbXBsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlLCBVbnR5cGVkVXNlKQor
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSwgTWlzY1Vz
ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRV
c2UsIE5vdFN0cmluZ1ZhclVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2UpKSB7CisgICAgICAgICAgICBFZGdl
IGxlZnRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihTdHJpbmdJZGVudFVzZSk7CisgICAgICAgICAg
ICBFZGdlIHJpZ2h0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3IoTm90U3RyaW5nVmFyVXNlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dTdHJpbmdJZGVudChsZWZ0
RWRnZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRWYWx1ZSA9IGxvd0pTVmFsdWUocmlnaHRF
ZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJl
U3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1ZhciBpcyBzdHJpbmcg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1Zh
ciBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwocmlnaHRWYWx1
ZSwgcHJvdmVuVHlwZShyaWdodEVkZ2UpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXNDZWxs
Q2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmlu
Z0Nhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90U3RyaW5nUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICAgICAgaXNTdHJpbmcocmlnaHRWYWx1ZSwgcHJvdmVuVHlwZShyaWdodEVk
Z2UpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0
cmluZ0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291
dC5sb2FkUHRyKHJpZ2h0VmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQocmlnaHRFZGdlLCByaWdodFZhbHVlLCByaWdodCk7Cisg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpc1N0cmluZ1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0
LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIG5vdFN0cmluZ1Jlc3VsdCwgaXNTdHJpbmdSZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAg
SlNWYWx1ZSBjb25zdGFudCA9IG1fbm9kZS0+Y2hpbGQyKCktPmFzSlNWYWx1ZSgpOworCisgICAg
ICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAg
ICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlQ29tcGFyZUxlc3MoKQorICAgIHsKKyAgICAgICAgY29tcGFyZSgKKyAgICAg
ICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sZXNzVGhhbihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmRvdWJsZUxlc3NUaGFuKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlTGVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVMZXNzRXEoKQorICAgIHsKKyAgICAgICAgY29tcGFyZSgKKyAg
ICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX291dC5sZXNzVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlcigpCisgICAgewor
ICAgICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmdyZWF0ZXJUaGFuKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRlclRo
YW4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0
ZXJFcSgpCisgICAgeworICAgICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmdyZWF0
ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
WyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5sb2dpY2FsTm90KGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgTm9kZSog
bm9kZSA9IG1fbm9kZTsKKyAgICAgICAgdW5zaWduZWQgbnVtQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworCisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisKKyAgICAgICAgdW5zaWduZWQgZnJhbWVTaXplID0g
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7CisgICAgICAgIHVuc2lnbmVk
IGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKKworICAgICAgICAvLyBKUy0+SlMgY2FsbGluZyBj
b252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBhbGxvd3MgdGhpcyBtdWNoIHNwYWNl
IG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAvLyBnZXQgdHJhc2hlZCBieSB0aGUgY2FsbGVl
LCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFjZSBpcyB1c2VkIHRvIHBhc3MgYXJndW1lbnRz
LiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMgZXhwbGljaXRseSBmb3IgdHdvIHJlYXNvbnM6
CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ugd2lsbCBvbmx5IHBhc3MgZnJhbWVTaXplIHdv
cnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRoZSB0cmFzaGVkIHN0YWNrIGd1YXJhbnRlZSBp
cyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUgYWN0IG9mIHBhc3NpbmcgYXJndW1lbnRzLCBz
byB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCByZWx5IG9uIEFpciB0byBpbmZlciB0aGUgdHJh
c2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgYXJndW1lbnRzIGl0IGVuZHMKKyAgICAg
ICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIGFyZ3VtZW50cywg
c2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBhbmQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpdCBi
ZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUgY2FsbC4KKyAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
Y2FsbGVlIGdvZXMgaW50byBHUFIwIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBzbG93IHBhdGgg
dGh1bmtzIGV4cGVjdCB0aGUKKyAgICAgICAgLy8gY2FsbGVlIHRvIGJlLgorICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6cmVnVDApKSk7CisKKyAgICAgICAgYXV0byBhZGRBcmd1bWVudCA9IFsmXSAoTFZhbHVl
IHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgICAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tU1AgPQorICAgICAgICAgICAgICAgIChyZWcub2Zmc2V0KCkgLSBK
U1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsg
b2Zmc2V0OworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZh
bHVlLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChvZmZzZXRGcm9tU1ApKSk7CisgICAgICAgIH07
CisKKyAgICAgICAgYWRkQXJndW1lbnQoanNDYWxsZWUsIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNr
OjpDYWxsZWUpLCAwKTsKKyAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1B
cmdzKSwgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBQYXlsb2FkT2Zm
c2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKKyAg
ICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7CisKKyAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3Rvcihhcmd1bWVudHMpOworCisgICAgICAgIFJl
ZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAg
ICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworICAgICAg
ICAKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJl
c3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25P
ZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+
aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CisKKyAg
ICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53
aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisK
KyAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwg
PSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENh
bGxMaW5rSW5mbzo6Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2Mo
KS5mcmFtZVNpemUoKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbGlua0NhbGwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIo
bGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlVGFpbENhbGwoKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAg
ICAgdW5zaWduZWQgbnVtQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworCisgICAgICAg
IExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IEIzIHRvIGdpdmUgdXMgYWxsIG9mIHRo
ZSBhcmd1bWVudHMgdXNpbmcgd2hhdGV2ZXIgbWVjaGFuaXNtIGl0IHRoaW5rcyBpcworICAgICAg
ICAvLyBjb252ZW5pZW50LiBUaGUgZ2VuZXJhdG9yIHRoZW4gc2h1ZmZsZXMgdGhvc2UgYXJndW1l
bnRzIGludG8gb3VyIG93biBjYWxsIGZyYW1lLAorICAgICAgICAvLyBkZXN0cm95aW5nIG91ciBm
cmFtZSBpbiB0aGUgcHJvY2Vzcy4KKworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBleGNlcHRpb25zLiBBIHRhaWwgY2FsbCBpcyBv
bmx5IGEKKyAgICAgICAgLy8gdGFpbCBjYWxsIGlmIGl0IGlzIG5vdCBpbnNpZGUgYSB0cnkgYmxv
Y2suCisKKyAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6cmVnVDApKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUFyZ3M7ICsraSkgeworICAgICAgICAgICAgLy8gTm90ZTogd2UgY291bGQgbGV0IHRo
ZSBzaHVmZmxlciBkbyBib3hpbmcgZm9yIHVzLCBidXQgaXQncyBub3Qgc3VwZXIgY2xlYXIgdGhh
dCB0aGlzCisgICAgICAgICAgICAvLyB3b3VsZCBiZSBiZXR0ZXIuIEFsc28sIGlmIHdlIHdhbnRl
ZCB0byBkbyB0aGF0LCB0aGVuIHdlJ2QgaGF2ZSB0byB0ZWFjaCB0aGUgc2h1ZmZsZXIKKyAgICAg
ICAgICAgIC8vIHRoYXQgMzItYml0IHZhbHVlcyBjb3VsZCBsYW5kIGF0IDQtYnl0ZSBhbGlnbm1l
bnQgYnV0IG5vdCA4LWJ5dGUgYWxpZ25tZW50LgorICAgICAgICAgICAgCisgICAgICAgICAgICBD
b25zdHJhaW5lZFZhbHVlIGNvbnN0cmFpbmVkVmFsdWUoCisgICAgICAgICAgICAgICAgbG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksCisgICAgICAgICAgICAgICAg
VmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdHJh
aW5lZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZFZlY3Rvcihhcmd1bWVudHMpOworCisgICAgICAgIC8vIFByZXZlbnQgYW55IG9mIHRoZSBhcmd1
bWVudHMgZnJvbSB1c2luZyB0aGUgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisK
KyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0ZWxsIHRoZSBwYXRjaHBvaW50IHRoYXQgd2Ug
d2lsbCBjbG9iYmVyIHJlZ2lzdGVycywgc2luY2Ugd2Ugd29uJ3QgcmV0dXJuCisgICAgICAgIC8v
IGFueXdheS4KKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVz
Y3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRl
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgg
PSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bik7CisKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsK
KyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihHUFJJbmZvOjpyZWdUMCwgRGF0YUZvcm1hdEpT
KTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sx
ICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CisKKyAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKCk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKworICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBZZXMsIHRoaXMgaXMgcmVhbGx5
IG5lY2Vzc2FyeS4gWW91IGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBhIGhvc3QgY2FsbCBv
biB0aGUKKyAgICAgICAgICAgICAgICAvLyBzbG93IHBhdGguIFRoYXQnbGwgcm91dGUgdXMgdG8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlcigpLCB3aGljaCB1bndpbmRzIHN0YXJ0aW5nCisgICAgICAg
ICAgICAgICAgLy8gd2l0aCB0aGUgY2FsbCBzaXRlIGluZGV4IG9mIG91ciBmcmFtZS4gQmFkIHRo
aW5ncyBoYXBwZW4gaWYgaXQncyBub3Qgc2V0LgorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworCisgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdz
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhT
aHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKKworICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBjb2RlT3JpZ2luLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGws
IEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxs
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFy
Z2V0VG9DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHRoaXNBcmcgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpz
QXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBmb3J3YXJkaW5nID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgorICAgICAgICAgICAgZm9yd2FyZGluZyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNo
cG9pbnQoSW50NjQpOworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgZm9ybXMgb2YgdGhlIGFyZ3Vt
ZW50cyB0aGF0IHdlIHdpbGwgdXNlIGJlZm9yZSBhbnkgY2xvYmJlcmluZyBoYXBwZW5zLgorICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKGpzQXJndW1lbnRzKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kU29tZVJlZ2lzdGVyKHRoaXNBcmcpOworCisgICAgICAgIGlmICghZm9yd2FyZGluZykg
eworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGVtIGFnYWluIGZvciBhZnRlciBjbG9iYmVy
aW5nLiBOb3RlIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBhc2sgdXMgdG8gdXNlIGEKKyAgICAgICAg
ICAgIC8vIGRpZmZlcmVudCByZWdpc3RlciBmb3IgdGhlIGxhdGUgZm9yIHRoZSBwb3N0LWNsb2Ji
ZXJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUuIFRoaXMgZ2l2ZXMKKyAgICAgICAgICAgIC8vIHRo
ZSBjb21waWxlciBhIGNoYW5jZSB0byBzcGlsbCB0aGVzZSB2YWx1ZXMgd2l0aG91dCBoYXZpbmcg
dG8gYnVybiBhbnkgY2FsbGVlLXNhdmVzLgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGpzQXJndW1lbnRzLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKHRoaXNBcmcsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhj
ZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhwYXRjaHBvaW50KTsKKyAgICAgICAgCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbWluaW11bSBh
bW91bnQgb2YgY2FsbCBhcmcgYXJlYSBzdGFjayBzcGFjZSB0aGF0IGFsbCBKUy0+SlMgY2FsbHMg
YWx3YXlzIGhhdmUuCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1KU0NhbGxBcmVhU2l6ZSA9Cisg
ICAgICAgICAgICBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKworICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKG1p
bmltdW1KU0NhbGxBcmVhU2l6ZSk7CisgICAgICAgIAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRl
KiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
CisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29k
ZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CisKKyAgICAgICAg
ICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1z
KS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1
bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOworCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworICAgICAgICAgICAgICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYXJnSW5kZXggPSAxOworICAgICAgICAgICAgICAgIEdQUlJlZyBjYWxs
ZWVHUFIgPSBwYXJhbXNbYXJnSW5kZXgrK10uZ3ByKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGNhbGxlZUdQUiA9PSBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFy
Z3VtZW50c0dQUiA9IGpzQXJndW1lbnRzID8gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpIDogSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGhpc0dQUiA9IHBhcmFtc1thcmdJ
bmRleCsrXS5ncHIoKTsKKworICAgICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCBjYWxsZWVMYXRl
UmVwOworICAgICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCBhcmd1bWVudHNMYXRlUmVwOworICAg
ICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCB0aGlzTGF0ZVJlcDsKKyAgICAgICAgICAgICAgICBp
ZiAoIWZvcndhcmRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGZv
cndhcmRpbmcgdGhlbiB3ZSdsbCBuZWVkIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBhZnRl
ciB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHBvdGVudGlhbGx5IGNsb2JiZXJlZCBj
YWxsZWVHUFIsIGFyZ3VtZW50c0dQUiwgYW5kIHRoaXNHUFIuIE91ciB0ZWNobmlxdWUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgaXMgdG8gc3VwcGx5IGFsbCBvZiB0aG9zZSBvcGVy
YW5kcyBhcyBsYXRlIHVzZXMgaW4gYWRkaXRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
c3BlY2lmeWluZyB0aGVtIGFzIGVhcmx5IHVzZXMuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGF0
ZSB1c2UgdXNlcyBhIHNwaWxsCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBlYXJs
eSB1c2UgdXNlcyBhIHJlZ2lzdGVyLCBhbmQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGxhdGUgYW5k
IGVhcmx5CisgICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgdG8gdXNlIGRpZmZlcmVudCByZWdp
c3RlcnMuIFdlIGRvIGtub3cgdGhhdCB0aGUgbGF0ZSB1c2VzIGludGVyZmVyZSB3aXRoCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMgYW5kIHNvIHdvbid0IHVz
ZSB0aG9zZSwgYnV0IHRoZSBlYXJseSB1c2VzIG1heSB1c2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdm9sYXRpbGUgcmVnaXN0ZXJzIGFuZCBpbiB0aGUgY2FzZSBvZiBjYWxsZWVHUFIsIGl0J3Mg
cGlubmVkIHRvIHJlZ1QwIHNvIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluaXRlbHkg
d2lsbC4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGhhdmUgdG8gYmUgc3VwZXIgY2FyZWZ1bCB3aXRoIHRoZXNlLiBJdCdzIHBvc3Np
YmxlIHRoYXQgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGEgc2h1ZmZsaW5nIG9m
IHRoZSByZWdpc3RlcnMgdXNlZCBmb3IgY2FsbGVlR1BSLCBhcmd1bWVudHNHUFIsIGFuZAorICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzR1BSLiBJZiB0aGF0IGhhcHBlbnMgYW5kIHdlIGRvIGZv
ciBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGNhbGxlZUdQUik7CisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICBhcmd1bWVudHNMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgY2Fs
bGVlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhlbiB3ZSBtaWdodCBlbmQgdXAgd2l0aCBnYXJiYWdlIGlmIGNhbGxlZUxhdGVSZXAuZ3ByKCkg
PT0gYXJndW1lbnRzR1BSIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRl
UmVwLmdwcigpID09IGNhbGxlZUdQUi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgZG8gYSB2YXJpZXR5IG9mIHRoaW5ncyB0byBwcmV2ZW50IHRoaXMg
ZnJvbSBoYXBwZW5pbmcuIEZvciBleGFtcGxlLCB3ZSB1c2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndW1lbnRzTGF0ZVJlcCBiZWZvcmUgbmVlZGluZyB0aGUgb3RoZXIgdHdvIGFuZCBhZnRl
ciB3ZSd2ZSBhbHJlYWR5IHN0b3BwZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhl
ICpHUFJzLiBBbHNvLCB3ZSBwaW4gY2FsbGVlR1BSIHRvIHJlZ1QwLCBhbmQgcmVseSBvbiB0aGUg
ZmFjdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAqTGF0ZVJlcHMgY2Fubm90IHVz
ZSB2b2xhdGlsZSByZWdpc3RlcnMgKHNvIHRoZXkgY2Fubm90IGJlIHJlZ1QwLCBzbworICAgICAg
ICAgICAgICAgICAgICAvLyBjYWxsZWVHUFIgIT0gYXJndW1lbnRzTGF0ZVJlcC5ncHIoKSBhbmQg
Y2FsbGVlR1BSICE9IHRoaXNMYXRlUmVwLmdwcigpKS4KKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgd291bGQgaGF2ZSBiZWVuIHRv
IGp1c3QgdXNlIGVhcmx5IHVzZXMgYW5kIGVhcmx5LWNsb2JiZXIgYWxsCisgICAgICAgICAgICAg
ICAgICAgIC8vIHZvbGF0aWxlIHJlZ2lzdGVycy4gQnV0IHRoYXQgd291bGQgZm9yY2UgY2FsbGVl
LCBhcmd1bWVudHMsIGFuZCB0aGlzIGludG8KKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGVl
LXNhdmUgcmVnaXN0ZXJzIGV2ZW4gaWYgd2UgaGF2ZSB0byBzcGlsbCB0aGVtLiBXZSBkb24ndCB3
YW50IHNwaWxsaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB1cCB0aHJlZSBjYWxs
ZWUtc2F2ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
IFRMO0RSOiBUaGUgd2F5IHdlIHVzZSBMYXRlUmVwcyBoZXJlIGlzIGRhbmdlcm91cyBhbmQgYmFy
ZWx5IHdvcmtzIGJ1dCBhY2hpZXZlcworICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGRlc2ly
YWJsZSBwZXJmb3JtYW5jZSBwcm9wZXJ0aWVzLCBzbyBkb24ndCBtaXN0YWtlIHRoZSBjbGV2ZXJu
ZXNzIGZvcgorICAgICAgICAgICAgICAgICAgICAvLyBlbGVnYW5jZS4KKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGVlTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsrXTsKKyAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsrXTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpc0xhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gR2V0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgICAgICAg
ICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhh
cmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2Uo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMu
c2V0KGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQodGhp
c0dQUik7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZUxhdGVSZXAuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoY2FsbGVlTGF0ZVJlcC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0xhdGVSZXAuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzTGF0ZVJlcC5yZWcoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXNMYXRlUmVwLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNMYXRlUmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0g
Zm9yd2FyZGluZyA/IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKSA6IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJl
dXNlZFJlZ2lzdGVycygpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRp
b25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpO
b3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBhZGp1c3RTdGFjayA9IFsm
XSAoR1BSUmVnIGFtb3VudCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGFtb3VudCwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMu
cHJvYygpLmZyYW1lU2l6ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGZvcndhcmRpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
b3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
Mik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgICAgICAgICBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5jaGlsZDIoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKworICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBjYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uVGhyb3dTdGFja092
ZXJmbG93Rm9yVmFyYXJncykpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVh
c29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RUaHJvdyk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
c0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBhcmd1bWVudHNHUFIpOworICAgICAgICAgICAgICAg
ICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1taW5pbXVtSlNDYWxsQXJlYVNpemUpLCBzY3JhdGNoR1BS
MiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2NyYXRjaEdQUjIsIGFyZ3VtZW50
c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQp
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0U3RhY2soR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUxhdGVSZXAu
ZW1pdFJlc3RvcmUoaml0LCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtYXkgbm90IGVtaXQgY29kZSBpZiB0aGlzR1BSIGdvdCBhIGNhbGxlZS1zYXZlLiBB
bHNvLCB3ZSdyZSBndWFyYW50ZWVkCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhpc0dQ
UiAhPSBHUFJJbmZvOjpyZWdUMCBiZWNhdXNlIHJlZ1QwIGludGVyZmVyZXMgd2l0aCBpdC4KKyAg
ICAgICAgICAgICAgICAgICAgdGhpc0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCB0aGlzR1BSKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KEpT
U3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIEND
YWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUg
PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6
Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2Fs
bCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZhc3RD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVj
ayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKCkKKyAgICB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25T
aXplT2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRw
b2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEg
c3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9u
IHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJn
cyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50
MzJPbmUpOworICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAg
ICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+
bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRh
dGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBh
IHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBt
X291dC5sU2hyKAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzKSwg
bV9jYWxsRnJhbWUsCisgICAgICAgICAgICBtX291dC5jYXN0VG9JbnQzMihtYWNoaW5lU3RhcnQp
LCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpLAorICAgICAgICAg
ICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQorICAgIHsKKyAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxkMSgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpLnZhbHVlOwor
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmNvbnN0SW50MzIoMSAtIGRhdGEtPm9mZnNldCkpOworICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
CisgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAg
ICAgICAKKyAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZp
bmVkTG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgdW5kZWZpbmVk
IGxvb3AgYm9keSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWFpbkxvb3BFbnRyeSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgbWFpbiBsb29wIGVudHJ5IikpOworICAg
ICAgICBMQmFzaWNCbG9jayBtYWluTG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2Fy
ZFZhcmFyZ3MgbWFpbiBsb29wIGJvZHkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEFzUHRyID0gbV9vdXQuemVyb0V4
dFB0cihsZW5ndGgpOworICAgICAgICBMVmFsdWUgbG9vcEJvdW5kVmFsdWUgPSBtX291dC5jb25z
dEludFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bG9vcEJvdW5kID0gbV9vdXQuYW5jaG9yKGxvb3BCb3VuZFZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9vcEJvdW5kVmFsdWUsIGxlbmd0aEFz
UHRyKSwgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmRl
ZmluZWRMb29wLCBtYWluTG9vcEVudHJ5KTsKKyAgICAgICAgTFZhbHVlIHByZXZpb3VzSW5kZXgg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBsb29wQm91bmQpOworICAgICAgICBMVmFsdWUgY3Vy
cmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBjdXJyZW50SW5kZXgpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1cnJlbnRJbmRleCk7Cisg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUoY3VycmVudElu
ZGV4LCBsZW5ndGhBc1B0ciksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKG1haW5Mb29w
RW50cnkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5Mb29wRW50cnks
IG1haW5Mb29wKTsKKyAgICAgICAgbG9vcEJvdW5kID0gbV9vdXQuYW5jaG9yKGxlbmd0aEFzUHRy
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwobGVuZ3RoQXNQdHIpLCB1bnN1
cmUobWFpbkxvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhtYWluTG9vcCwgY29udGludWF0aW9uKTsKKyAgICAgICAgcHJldmlvdXNJ
bmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGxvb3BCb3VuZCk7CisgICAgICAgIGN1cnJl
bnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBtX291dC5pbnRQdHJPbmUpOworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5sb2FkNjQoCisgICAgICAgICAgICBtX291dC5iYXNl
SW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy52YXJpYWJsZXMsIHNvdXJjZVN0YXJ0LAor
ICAgICAgICAgICAgICAgIG1fb3V0LmFkZChjdXJyZW50SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRy
KGRhdGEtPm9mZnNldCkpKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJh
c2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwor
ICAgICAgICBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKKyAgICAgICAg
bV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOworICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKGN1cnJlbnRJbmRleCksIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobWFpbkxvb3ApKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUp1
bXAoKQorICAgIHsKKyAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJs
b2NrKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQnJhbmNoKCkKKyAgICB7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGJvb2xpZnkobV9ub2RlLT5jaGlsZDEo
KSksCisgICAgICAgICAgICBXZWlnaHRlZFRhcmdldCgKKyAgICAgICAgICAgICAgICBsb3dCbG9j
ayhtX25vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2spLAorICAgICAgICAgICAgICAgIG1f
bm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5jb3VudCksCisgICAgICAgICAgICBXZWlnaHRlZFRh
cmdldCgKKyAgICAgICAgICAgICAgICBsb3dCbG9jayhtX25vZGUtPmJyYW5jaERhdGEoKS0+bm90
VGFrZW4uYmxvY2spLAorICAgICAgICAgICAgICAgIG1fbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RU
YWtlbi5jb3VudCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTd2l0Y2goKQorICAg
IHsKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG1fbm9kZS0+c3dpdGNoRGF0YSgpOworICAg
ICAgICBzd2l0Y2ggKGRhdGEtPmtpbmQpIHsKKyAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKKyAg
ICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gaW50VmFsdWVzOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgc3dpdGNoT25JbnRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoSW1tIGludCBjYXNlIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG1fb3V0Lm1fYmxvY2ssIHN3aXRjaE9u
SW50cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAg
ICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRzKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
SW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoSW1tIGlzIGludCIpKTsK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiU3dpdGNoL1N3aXRjaEltbSBpcyBub3QgaW50IikpOworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzRG91YmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNo
SW1tIGlzIGRvdWJsZSIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFs
dWUgYm94ZWRWYWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYm94ZWRWYWx1ZSksIHVuc3VyZShpc05vdElu
dCksIHVuc3VyZShpc0ludCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0ludCwgaXNOb3RJbnQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9v
dXQuYW5jaG9yKHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHN3aXRjaE9uSW50cyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXNOb3RJbnQsIGlzRG91YmxlKTsKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyhib3hlZFZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdXN1YWxs
eShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCByYXJlbHkoaXNEb3VibGUpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc0RvdWJs
ZSwgaW5uZXJMYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0g
dW5ib3hEb3VibGUoYm94ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGludEluRG91
YmxlID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgIGlu
dFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGludEluRG91YmxlKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbCht
X291dC5pbnRUb0RvdWJsZShpbnRJbkRvdWJsZSksIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAg
ICAgICAgICAgdW5zdXJlKHN3aXRjaE9uSW50cyksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhzd2l0Y2hPbkludHMsIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIGJ1aWxkU3dp
dGNoKGRhdGEsIG1fb3V0LmludDMyLCBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZhbHVlcykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNl
IFN3aXRjaENoYXI6IHsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdWYWx1ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2Ugc29tZXRoaW5nIG90aGVy
IHRoYW4gdW5zdXJlKCkgZm9yIHRoZSBicmFuY2ggd2VpZ2h0CisgICAgICAgICAgICAvLyBvZiB0
aGUgZmFsbFRocm91Z2ggYmxvY2suIFRoZSBtYWluIGNoYWxsZW5nZSBpcyBqdXN0IHRoYXQgd2Ug
aGF2ZSBtdWx0aXBsZQorICAgICAgICAgICAgLy8gYnJhbmNoZXMgdG8gZmFsbFRocm91Z2ggYnV0
IGEgc2luZ2xlIGNvdW50LCBzbyB3ZSB3b3VsZCBuZWVkIHRvIGRpdnZ5IGl0IHVwCisgICAgICAg
ICAgICAvLyBhbW9uZyB0aGUgZGlmZmVyZW50IGxvd2VyZWQgYnJhbmNoZXMuCisgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDgyCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7CisgICAgICAgICAgICAgICAgc3RyaW5n
VmFsdWUgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFVu
dHlwZWRVc2U6IHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gv
U3dpdGNoQ2hhciBpcyBjZWxsIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3Ry
aW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgaXMgc3Ry
aW5nIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgaXNOb3RDZWxsKHVuYm94ZWRWYWx1ZSwgcHJvdmVuVHlwZSht
X25vZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhk
YXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUoaXNDZWxsQ2FzZSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
Y2VsbFZhbHVlID0gdW5ib3hlZFZhbHVlOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgaXNOb3RTdHJpbmcoY2VsbFZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRh
dGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGNlbGxWYWx1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsZW5ndGhJczEgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGxlbmd0aCBpcyAxIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbmVlZFJlc29sdXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIHJlc29sdXRpb24iKSk7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayByZXNvbHZlZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIg
cmVzb2x2ZWQiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpczhCaXQgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIDhiaXQiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBpczE2Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hh
ciAxNmJpdCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmludDMyT25lKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGxlbmd0aElzMSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlbmd0
aElzMSwgbmVlZFJlc29sdXRpb24pOworICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
LCAyPiB2YWx1ZXM7CisgICAgICAgICAgICBMVmFsdWUgZmFzdFZhbHVlID0gbV9vdXQubG9hZFB0
cihzdHJpbmdWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgICAgICB2YWx1
ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihmYXN0VmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc051bGwoZmFzdFZhbHVlKSwgcmFyZWx5KG5lZWRSZXNvbHV0aW9uKSwgdXN1
YWxseShyZXNvbHZlZCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhuZWVkUmVzb2x1dGlvbiwgcmVzb2x2ZWQpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCht
X291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludFB0ciwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVSb3BlKSwgbV9jYWxsRnJhbWUsIHN0cmluZ1ZhbHVl
KSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChyZXNvbHZlZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlc29sdmVkLCBpczhCaXQpOworICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgdmFsdWVzKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBjaGFyYWN0ZXJEYXRhID0gbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5T
dHJpbmdJbXBsX2RhdGEpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
ICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mih2YWx1ZSwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCisgICAg
ICAgICAgICAgICAgdW5zdXJlKGlzOEJpdCksIHVuc3VyZShpczE2Qml0KSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gY2hhcmFjdGVyczsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7CisgICAgICAgICAgICBj
aGFyYWN0ZXJzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubG9hZDhaZXJvRXh0MzIoY2hhcmFj
dGVyRGF0YSwgbV9oZWFwcy5jaGFyYWN0ZXJzOFswXSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oaXMxNkJpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5k
KG1fb3V0LmFuY2hvcihtX291dC5sb2FkMTZaZXJvRXh0MzIoY2hhcmFjdGVyRGF0YSwgbV9oZWFw
cy5jaGFyYWN0ZXJzMTZbMF0pKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50MzIs
IG1fb3V0LnBoaShtX291dC5pbnQzMiwgY2hhcmFjdGVycykpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogeworICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBTdHJpbmdJZGVudFVzZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5jb25zdEludFB0cihkYXRh
LT5jYXNlc1tpXS52YWx1ZS5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBibG9jayA9IGxvd0Jsb2NrKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIFdlaWdodCB3ZWlnaHQgPSBXZWlnaHQoZGF0YS0+Y2FzZXNbaV0u
dGFyZ2V0LmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENh
c2UodmFsdWUsIGJsb2NrLCB3ZWlnaHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAg
ICAgICAgICAgICAgIHN0cmluZ0ltcGwsIGNhc2VzLCBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayksCisgICAgICAgICAgICAgICAgICAgIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5j
b3VudCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7CisgICAgICAgICAgICAgICAg
c3dpdGNoU3RyaW5nKGRhdGEsIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaFN0cmluZyBVbnR5cGVkIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc1N0cmluZ0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoU3RyaW5nIFVudHlwZWQgc3RyaW5nIGNhc2UiKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc0Nl
bGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAgICAgICAg
ICAgICB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91
Z2guYmxvY2spKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jaywgaXNTdHJpbmdCbG9jayk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgp
KSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc1N0cmluZ0Jsb2NrKSwgdW5zdXJlKGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQmxvY2ssIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwgdmFsdWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgU3dpdGNoQ2VsbDogeworICAgICAgICAgICAgTFZhbHVlIGNlbGw7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAg
ICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgICAgICBjZWxsID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlN3aXRjaC9Td2l0Y2hDZWxsIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjZWxsQ2FzZSksIHVu
c3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSk7CisgICAgICAgICAgICAgICAgY2VsbCA9IHZhbHVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBidWlsZFN3aXRjaChtX25vZGUt
PnN3aXRjaERhdGEoKSwgbV9vdXQuaW50UHRyLCBjZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfSB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHN3aXRjaCBraW5kIik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVJldHVy
bigpCisgICAgeworICAgICAgICBtX291dC5yZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUZvcmNlT1NSRXhpdCgpCisgICAgewor
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlVGhyb3coKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQorICAg
IHsKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2
YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgp
LCBudWxscHRyKTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGRlc2NyaXB0
b3IsIG9yaWdpbi5mb3JFeGl0LCBub1ZhbHVlKCkpKTsKKyAgICAgICAgCisgICAgICAgIFN0YXRl
KiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIC8vIFRoZSBNYWNy
b0Fzc2VtYmxlciBrbm93cyBtb3JlIGFib3V0IHRoaXMgdGhhbiBCMyBkb2VzLiBUaGUgd2F0Y2hw
b2ludExhYmVsKCkgbWV0aG9kCisgICAgICAgICAgICAgICAgLy8gd2lsbCBlbnN1cmUgdGhhdCB0
aGlzIGlzIGZvbGxvd2VkIGJ5IGEgbm9wIHNoYWRvdyBidXQgb25seSB3aGVuIHRoaXMgaXMgYWN0
dWFsbHkKKyAgICAgICAgICAgICAgICAvLyBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBsYWJlbCA9IGppdC53YXRjaHBvaW50TGFiZWwoKTsKKworICAgICAg
ICAgICAgICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBkZXNjcmlwdG9yLT5lbWl0
T1NSRXhpdExhdGVyKAorICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIFVuY291bnRhYmxlSW52
YWxpZGF0aW9uLCBvcmlnaW4sIHBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8SklU
Q29kZT4gaml0Q29kZSA9IHN0YXRlLT5qaXRDb2RlLmdldCgpOworCisgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBSZXBsYWNlbWVudCBqdW1w
UmVwbGFjZW1lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGxhYmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29k
ZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKGp1bXBSZXBsYWNlbWVudCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU2V0IHNv
bWUgb2J2aW91cyB0aGluZ3MuCisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwg
PSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0g
ZmFsc2U7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNMb2NhbFN0YXRlID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIGhvdyB3ZSB0ZWxsIEIzIGFib3V0IHRo
ZSBwb3NzaWJpbGl0eSBvZiBqdW1wIHJlcGxhY2VtZW50LgorICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBu
b3QgcG9zc2libGUgZm9yIHNvbWUgcHJpb3IgYnJhbmNoIHRvIGRldGVybWluZSB0aGUgc2FmZXR5
IG9mIHRoaXMgb3BlcmF0aW9uLiBJdCdzIGFsd2F5cworICAgICAgICAvLyBmaW5lIHRvIGV4ZWN1
dGUgdGhpcyBvbiBzb21lIHBhdGggdGhhdCB3b3VsZG4ndCBoYXZlIG9yaWdpbmFsbHkgZXhlY3V0
ZWQgaXQgYmVmb3JlCisgICAgICAgIC8vIG9wdGltaXphdGlvbi4KKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gZmFsc2U7CisKKyAgICAgICAgLy8gSWYgdGhp
cyBmYWxscyB0aHJvdWdoIHRoZW4gaXQgd29uJ3Qgd3JpdGUgYW55dGhpbmcuCisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKCk7CisKKyAgICAgICAgLy8gV2hl
biB0aGlzIGFicnVwdGx5IHRlcm1pbmF0ZXMsIGl0IGNvdWxkIHJlYWQgYW55IGhlYXAgbG9jYXRp
b24uCisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJc1VuZGVmaW5lZCgpCisgICAgeworICAg
ICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFs
bENlbGxzQXJlRmFsc2UsIEVxdWFsVW5kZWZpbmVkKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUlzQm9vbGVhbigpCisgICAgeworICAgICAgICBzZXRCb29sZWFuKGlzQm9vbGVhbihs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUlzTnVtYmVyKCkKKyAgICB7CisgICAg
ICAgIHNldEJvb2xlYW4oaXNOdW1iZXIobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVJc1N0cmluZygpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNTdHJpbmcgY2VsbCBjYXNlIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzU3Ry
aW5nIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
dENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IoaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGNlbGxS
ZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc09iamVjdCgpCisgICAgeworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2Jq
ZWN0IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdCBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IoaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBjZWxs
UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQorICAg
IHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIEVk
Z2UgY2hpbGQgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGNoaWxkKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBjZWxsIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
SXNPYmplY3RPck51bGwgbm90IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG9iamVj
dCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSXNPYmplY3RPck51bGwgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgbm90
IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSks
IHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVu
Y3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNGdW5jdGlvblJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBvYmplY3RDYXNl
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90T2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICB1bnN1cmUo
b2JqZWN0Q2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG9iamVjdENhc2UsIHNsb3dQYXRoKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgb2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNFeG90aWNGb3JUeXBlb2YodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHko
Y29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0
aCwgbm90Q2VsbENhc2UpOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uT2JqZWN0SXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxv
Y2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90WmVybzY0
KHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgTFZhbHVlIG5vdENlbGxSZXN1bHRWYWx1ZSA9IG1fb3V0LmVxdWFsKHZhbHVl
LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihub3RDZWxsUmVzdWx0
VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sCisgICAg
ICAgICAgICBpc0Z1bmN0aW9uUmVzdWx0LCBub3RPYmplY3RSZXN1bHQsIG9iamVjdFJlc3VsdCwg
c2xvd1Jlc3VsdCwgbm90Q2VsbFJlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbigpCisgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgRWRnZSBjaGlsZCA9
IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hp
bGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gbm90
IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIGNv
bnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdEZ1bmN0
aW9uQ2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZ1bmN0aW9uUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAg
dW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgc2xvd1BhdGgpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNFeG90aWNG
b3JUeXBlb2YodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHJhcmVseShz
bG93UGF0aCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dS
ZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAg
ICB9LCB2YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQubm90TnVsbChzbG93UmVzdWx0VmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoCisg
ICAgICAgICAgICBtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBmdW5jdGlvblJlc3VsdCwg
b2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUeXBlT2YoKQorICAgIHsKKyAgICAgICAgRWRn
ZSBjaGlsZCA9IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoY2hpbGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUeXBlT2YgY29udGludWF0aW9uIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1
bHRzOworICAgICAgICAKKyAgICAgICAgYnVpbGRUeXBlT2YoCisgICAgICAgICAgICBjaGlsZCwg
dmFsdWUsCisgICAgICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgeworICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih3ZWFrUG9pbnRlcih2bSgpLnNtYWxsU3Ry
aW5ncy50eXBlU3RyaW5nKHR5cGUpKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUluKCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIEVkZ2Ug
YmFzZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoYmFz
ZSk7CisgICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nLT50
cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpLT5pc0F0b21pYygp
KSB7CisgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9IGJpdHdpc2VfY2Fz
dDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOworICAgICAg
ICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoY2VsbCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBwYXJhbXNbMF0uZ3By
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5hZGRTdHVi
SW5mbyhBY2Nlc3NUeXBlOjpJbik7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+
Y2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENv
ZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0g
c3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0g
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBqdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5s
YWJlbCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcC5tX2p1bXAubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBudWxscHRyLCBvcGVy
YXRpb25Jbk9wdGltaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBiYXNlR1BSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cikpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0
Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGhDYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxU
b0p1bXAgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihqdW1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxs
VG9TbG93Q2FzZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IAorCisgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uR2VuZXJpY0luKSwgbV9jYWxsRnJhbWUsIGNlbGwsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZSgp
CisgICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obV9ub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKwor
ICAgICAgICBMVmFsdWUgY29uc3RydWN0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBMVmFsdWUgaGFzSW5zdGFuY2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGRlZmF1bHRIYXNJbnN0YW5jZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiT3ZlcnJpZGVzSGFzSW5zdGFuY2UgU3ltYm9sLmhhc0luc3RhbmNlIGlzIGRl
ZmF1bHQiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiT3ZlcnJpZGVzSGFzSW5zdGFuY2UgY29udGludWF0aW9uIikpOworCisgICAg
ICAgIC8vIFVubGlrZSBpbiB0aGUgREZHLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBjbGVhbmluZyB0
aGlzIGNvZGUgdXAgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgcHJvdmVuIHRoZSBoYXNJbnN0
YW5jZVZhbHVlIGlzIGEgY29uc3RhbnQgYXMgTExWTSBzaG91bGQgZml4IGl0IGZvciB1cy4KKwor
ICAgICAgICBBU1NFUlQoIW1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpLT5pc0NlbGxDb25zdGFudCgp
IHx8IGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uID09IG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
LT5hc0NlbGwoKSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90RGVmYXVsdEhhc0luc3Rh
bmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGhhc0luc3RhbmNlLCBtX291dC5jb25zdEludFB0cihk
ZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbikpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJl
KGRlZmF1bHRIYXNJbnN0YW5jZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oZGVmYXVsdEhhc0luc3RhbmNlLCBjb250aW51YXRpb24pOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNvbnN0cnVjdG9yLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShtX291dC5ib29sZWFuLCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlUmVzdWx0LCBub3RE
ZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDaGVj
a1R5cGVJbmZvRmxhZ3MoKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
QmFkVHlwZUluZm9GbGFncywgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgbV9vdXQudGVzdElz
WmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT50eXBlSW5mb09wZXJhbmQoKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZigpCisgICAgeworICAgICAgICBM
VmFsdWUgY2VsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgY2VsbCA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNlbGwgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHByb3RvdHlwZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBp
c0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGNlbGwgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5z
dGFuY2VPZiBsb29wIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RZZXRJbnN0YW5jZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBub3QgeWV0IGluc3RhbmNlIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklu
c3RhbmNlT2YgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNvbmRp
dGlvbjsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpCisgICAgICAgICAgICBjb25kaXRpb24gPSBpc0NlbGwoY2VsbCwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1f
b3V0LmJvb2xlYW5UcnVlOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2Vs
bFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291
dC5icmFuY2goY29uZGl0aW9uLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgbG9vcCk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgbm9WYWx1ZSgpLCAwLCBpc05vdE9iamVjdChwcm90b3R5cGUsIHByb3ZlblR5cGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdp
bmFsVmFsdWUgPSBtX291dC5hbmNob3IoY2VsbCk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wLCBub3RZZXRJbnN0YW5jZSk7
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQ2NCwgb3JpZ2luYWxW
YWx1ZSk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKHZhbHVlKTsK
KyAgICAgICAgTFZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX291dC5sb2FkNjQoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9wcm90b3R5cGUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBp
c0luc3RhbmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoY3VycmVudFByb3RvdHlw
ZSwgcHJvdG90eXBlKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
bm90WWV0SW5zdGFuY2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFll
dEluc3RhbmNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RJbnN0
YW5jZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKHZhbHVlLCBtX291dC5hbmNob3IoY3VycmVudFByb3RvdHlw
ZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGN1cnJlbnRQcm90b3R5cGUpLCB1bnN1
cmUobG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKAor
ICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGlzSW5z
dGFuY2VSZXN1bHQsIG5vdEluc3RhbmNlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlSW5zdGFuY2VPZkN1c3RvbSgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgY29uc3RydWN0b3IgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgaGFzSW5zdGFuY2UgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIHNldEJvb2xlYW4obV9vdXQu
bG9naWNhbE5vdChtX291dC5lcXVhbChtX291dC5jb25zdEludDMyKDApLCB2bUNhbGwobV9vdXQu
aW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKSwgbV9jYWxs
RnJhbWUsIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2UpKSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpCisgICAgeworICAgICAgICBUeXBlZFBv
aW50ZXIgY291bnRlciA9IG1fb3V0LmFic29sdXRlKG1fbm9kZS0+ZXhlY3V0aW9uQ291bnRlcigp
LT5hZGRyZXNzKCkpOworICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmFkZChtX291dC5sb2Fk
NjQoY291bnRlciksIG1fb3V0LmNvbnN0SW50NjQoMSkpLCBjb3VudGVyKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKCkKKyAgICB7CisgICAgICAgIGVtaXRTdG9y
ZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgICAgICBJbmRleGVkQWJzdHJh
Y3RIZWFwJiBoZWFwID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ID8KKyAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hl
YXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY2hlY2tIb2xlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkg
aW50L2NvbnRpZ3VvdXMgY2hlY2sgaG9sZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgaW50L2Nv
bnRpZ3VvdXMgc2xvdyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgaW50L2NvbnRp
Z3VvdXMgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2Fz
ZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xlLCBzbG93Q2FzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgY2hlY2tIb2xlUmVzdWx0VmFsdWUgPQorICAgICAgICAgICAgICAgIG1fb3V0Lm5v
dFplcm82NChtX291dC5sb2FkNjQoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25v
ZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hlY2tIb2xlUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGNoZWNrSG9sZVJlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChjaGVja0hvbGVSZXN1bHRWYWx1ZSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7CisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBM
VmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhl
ZERvdWJsZVByb3BlcnRpZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNoZWNrSG9sZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGRv
dWJsZSBjaGVjayBob2xlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3VibGUgc2xvdyBjYXNl
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCkpLAorICAgICAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNo
ZWNrSG9sZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjaGVja0hvbGUpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNoZWNrSG9sZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAgTFZhbHVlIGRvdWJs
ZVZhbHVlID0gbV9vdXQubG9hZERvdWJsZShiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgs
IG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVSZXN1bHRW
YWx1ZSA9IG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSk7CisgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2hl
Y2tIb2xlUmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJl
c3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAorICAgICAgICAgICAgICAgIHZtQ2FsbChtX291
dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1f
Y2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291
dC5ib29sZWFuLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkp
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAg
eworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkhhc1N0cnVjdHVyZVByb3BlcnR5IGNvcnJlY3Qgc3RydWN0dXJlIikpOworICAgICAgICBM
QmFzaWNCbG9jayB3cm9uZ1N0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3Ry
dWN0dXJlUHJvcGVydHkgd3Jvbmcgc3RydWN0dXJlIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc1N0cnVjdHVyZVByb3BlcnR5
IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1YWwo
CisgICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpLAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisgICAgICAgICAgICByYXJl
bHkod3JvbmdTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvcnJlY3RTdHJ1Y3R1cmUpKTsKKworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUs
IHdyb25nU3RydWN0dXJlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVy
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyh3cm9uZ1N0cnVj
dHVyZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgd3JvbmdTdHJ1Y3R1
cmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3Bl
cnR5KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQsIHdyb25nU3Ry
dWN0dXJlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKSk7CisgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1l
cmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY2hlY2tPZmZzZXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldERp
cmVjdFBuYW1lIGNoZWNrIG9mZnNldCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9h
ZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgaW5saW5lIGxvYWQiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldERpcmVjdFBuYW1lIG91dC1vZi1saW5lIGxvYWQiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFtZSBzbG93
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNl
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5sb2FkMzIo
ZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0
dXJlSUQpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY2hlY2tPZmZz
ZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNo
ZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3Zl
T3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSksCisgICAgICAgICAgICB1bnN1
cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaW5saW5lTG9hZCwgb3V0T2ZMaW5lTG9hZCk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGlubGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2
NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIAorICAg
ICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludDY0KSwgU2Nh
bGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZM
aW5lTG9hZCwgc2xvd0Nhc2UpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvYWRCdXR0ZXJm
bHlSZWFkT25seShiYXNlKTsKKyAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25F
eHQzMlRvNjQoCisgICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5s
b2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
SW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBvdXRPZkxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2Fk
NjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9y
YWdlLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93Q2Fz
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHBy
b3BlcnR5KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBz
bG93Q2FzZVJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVM
ZW5ndGgoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3Bl
cnR5RW51bWVyYXRvciksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxv
Y2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSBpbiBib3VuZHMiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUgb3V0IG9m
IGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUgY29udGludWF0aW9uIikp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXgpKSwKKyAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHko
b3V0T2ZCb3VuZHMpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0g
bV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5C
b3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1f
b3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVOdWxsKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91
bmRzUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSgpCisgICAgeworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lIGluIGJvdW5kcyIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVu
dW1lcmF0b3JHZW5lcmljUG5hbWUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
YmVsb3coaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRleCkpLAorICAgICAgICAgICAgdXN1
YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3IpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9u
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBp
bkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlVG9JbmRleFN0cmluZygpCisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9v
dXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nKSwgbV9jYWxs
RnJhbWUsIGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0
dXJlSW1tZWRpYXRlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAg
IHN0cnVjdHVyZSwgbm9WYWx1ZSgpLCBCYWRDYWNoZSwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwK
KyAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkKKyAgICB7
CisgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvd2VyIHRoZSB2
YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNyZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250cm9sIGZs
b3cgZGlhbW9uZC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0ID0gbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxMQmFzaWNCbG9jaywgMT4gYmxvY2tzKHNldC5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjYXNlICIsIGkpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgZHVtbXlEZWZhdWx0ID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNYXRlcmlhbGl6ZU5ld09iamVjdCBkZWZhdWx0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIG91dGVyQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZU5ld09iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMT4gY2FzZXMoc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3aXRjaENhc2Uod2Vh
a1N0cnVjdHVyZShzZXRbaV0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSk7CisgICAgICAgIG1fb3V0
LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBjYXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQoMCkpOworICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2Nr
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAxPiByZXN1bHRzOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IHNldC5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZHVtbXlEZWZhdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExWYWx1ZSBvYmplY3Q7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNs
b3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0
IGFsbG9jYXRpb24gY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0g
bV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgZmFzdE9iamVjdFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihm
YXN0QnV0dGVyZmx5VmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBzbG93T2Jq
ZWN0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3RX
aXRoQnV0dGVyZmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
T2JqZWN0ID0gbV9vdXQuYW5jaG9yKHNsb3dPYmplY3RWYWx1ZSk7CisgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93T2JqZWN0VmFsdWUsIG1faGVhcHMuSlNPYmplY3Rf
YnV0dGVyZmx5KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RPYmplY3Qs
IHNsb3dPYmplY3QpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG1fb3V0LnBoaShtX291
dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBjYXNlIHdoZXJlIHdlIGNhbiBk
byBhIG9uZS1zaG90IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxvY2F0ZSB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBvYmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUgZGVzaXJlZCBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9u
J3QgbmVlZCBvbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1
cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3By
b3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIFBoYW50b21Qcm9w
ZXJ0eVZhbHVlIHZhbHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyXSAh
PSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gaXNJbmxpbmVP
ZmZzZXQoZW50cnkub2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZseTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZhbHVlLm1faWRlbnRpZmllck51
bWJlciwgZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZHVtbXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNv
bnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludFB0ciwgcmVzdWx0cykpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZU1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbigpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisK
KyAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVzOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2
YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIgKyBp
KSkpOworCisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0
T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CisgICAgICAgIEFTU0VSVCh0YWJsZSA9PSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMCktPmNhc3RDb25zdGFudDxTeW1ib2xUYWJsZSo+KCkpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZUNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZh
dGlvbiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworCisgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAorICAgICAg
ICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHRhYmxlKSwgc3RydWN0
dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisKKyAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoc2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTY29wZV9uZXh0KTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIod2Vha1BvaW50ZXIodGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU3lt
Ym9sVGFibGVPYmplY3Rfc3ltYm9sVGFibGUpOworCisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOworICAgICAgICAvLyBXZSBlbnN1cmUgYWxsb2NhdGlvbiBzaW5raW5nIGV4cGxp
Y3RseSBzZXRzIGJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBmaWVsZCBtZW1iZXJzLiAKKyAgICAgICAg
Ly8gVGhlcmVmb3JlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IEpTVmFsdWUgd2UgcGFzcyBpbiBh
cyB0aGUgaW5pdGlhbGl6YXRpb24gdmFsdWUKKyAgICAgICAgLy8gYmVjYXVzZSBhbGwgZmllbGRz
IHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisgICAgICAgIC8vIEZJWE1FOiBJdCBtYXkgYmUgd29ydGgg
Y3JlYXRpbmcgYW4gb3BlcmF0aW9uIHRoYXQgY2FsbHMgYSBjb25zdHJ1Y3RvciBvbiBKU0xleGlj
YWxFbnZpcm9ubWVudCB0aGF0IAorICAgICAgICAvLyBkb2Vzbid0IGluaXRpYWxpemUgZXZlcnkg
c2xvdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIGRvIHRoYXQgaGVyZS4KKyAgICAgICAg
TFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSkpOworICAgICAgICAgICAgfSwgc2NvcGUpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gIG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgYWN0aXZhdGlvbiA9IG1f
b3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkYXRhLm1fcHJvcGVydGllcy5zaXplKCkgPT0gdGFibGUtPnNjb3BlU2l6
ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlc1tpXSwKKyAg
ICAgICAgICAgICAgICBhY3RpdmF0aW9uLAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZp
cm9ubWVudFJlY29yZF92YXJpYWJsZXNbZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVy
TnVtYmVyXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkg
eworICAgICAgICAgICAgLy8gVmFsaWRhdGUgdG8gbWFrZSBzdXJlIGV2ZXJ5IHNsb3QgaW4gdGhl
IHNjb3BlIGhhcyBvbmUgdmFsdWUuCisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcih0YWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUt
PmJlZ2luKGxvY2tlciksIGVuZCA9IHRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCku
b2Zmc2V0KCkgPT0gZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVyTnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpCisgICAgeworICAgICAgICBMQmFz
aWNCbG9jayB0aW1lckRpZEZpcmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrV2F0Y2hk
b2dUaW1lciB0aW1lciBkaWQgZmlyZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1dhdGNoZG9nVGltZXIgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDhaZXJv
RXh0MzIobV9vdXQuYWJzb2x1dGUodm0oKS53YXRjaGRvZygpLT50aW1lckRpZEZpcmVBZGRyZXNz
KCkpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKHN0YXRlKSwKKyAgICAg
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHRpbWVyRGlkRmlyZSkpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odGltZXJEaWRGaXJl
LCBjb250aW51YXRpb24pOworCisgICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcihv
cGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisKKyAgICBM
VmFsdWUgZGlkT3ZlcmZsb3dTdGFjaygpCisgICAgeworICAgICAgICAvLyBUaGlzIGRvZXMgYSB2
ZXJ5IHNpbXBsZSBsZWFmIGZ1bmN0aW9uIGFuYWx5c2lzLiBUaGUgaW52YXJpYW50IG9mIEZUTCBj
YWxsCisgICAgICAgIC8vIGZyYW1lcyBpcyB0aGF0IHRoZSBjYWxsZXIgaGFkIGFscmVhZHkgZG9u
ZSBlbm91Z2ggb2YgYSBzdGFjayBjaGVjayB0bworICAgICAgICAvLyBwcm92ZSB0aGF0IHRoaXMg
Y2FsbCBmcmFtZSBoYXMgZW5vdWdoIHN0YWNrIHRvIHJ1biwgYW5kIGFsc28gZW5vdWdoIHN0YWNr
CisgICAgICAgIC8vIHRvIG1ha2UgcnVudGltZSBjYWxscy4gU28sIHdlIG9ubHkgbmVlZCB0byBz
dGFjayBjaGVjayB3aGVuIG1ha2luZyBjYWxscworICAgICAgICAvLyB0byBvdGhlciBKUyBmdW5j
dGlvbnMuIElmIHdlIGRvbid0IGZpbmQgc3VjaCBjYWxscyB0aGVuIHdlIGRvbid0IG5lZWQgdG8K
KyAgICAgICAgLy8gZG8gYW55IHN0YWNrIGNoZWNrcy4KKyAgICAgICAgCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKHZtKCkuYWRkcmVz
c09mRlRMU3RhY2tMaW1pdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X291dC5ib29sZWFuRmFsc2U7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcmd1bWVudHNMZW5n
dGggeworICAgICAgICBBcmd1bWVudHNMZW5ndGgoKQorICAgICAgICAgICAgOiBpc0tub3duKGZh
bHNlKQorICAgICAgICAgICAgLCBrbm93bihVSU5UX01BWCkKKyAgICAgICAgICAgICwgdmFsdWUo
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlz
S25vd247CisgICAgICAgIHVuc2lnbmVkIGtub3duOworICAgICAgICBMVmFsdWUgdmFsdWU7Cisg
ICAgfTsKKyAgICBBcmd1bWVudHNMZW5ndGggZ2V0QXJndW1lbnRzTGVuZ3RoKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxl
bmd0aDsKKworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBsZW5ndGgua25vd24gPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0
cnVlOworICAgICAgICAgICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgu
a25vd24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gVUlO
VF9NQVg7CisgICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAg
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbGVu
Z3RoLnZhbHVlID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKGFyZ3VtZW50Q291
bnRSZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorICAgIAorICAgIEFyZ3VtZW50c0xlbmd0aCBnZXRB
cmd1bWVudHNMZW5ndGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50c0xlbmd0
aChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgZ2V0Q3VycmVudENhbGxlZSgpCisgICAgeworICAgICAgICBpZiAoSW5saW5l
Q2FsbEZyYW1lKiBmcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1cmVDYWxsKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoZnJh
bWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9
IEFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhcnQpLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIExW
YWx1ZSBnZXRBcmd1bWVudHNTdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0QXJndW1l
bnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGNoZWNrU3Ry
dWN0dXJlKAorICAgICAgICBMVmFsdWUgc3RydWN0dXJlRGlzY3JpbWluYW50LCBjb25zdCBGb3Jt
YXR0ZWRWYWx1ZSYgZm9ybWF0dGVkVmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgRnVuY3RvciYgd2Vha1N0cnVjdHVyZURpc2Ny
aW1pbmFudCkKKyAgICB7CisgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICB0ZXJtaW5hdGUoZXhpdEtpbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVEaXNjcmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVE
aXNjcmltaW5hbnQoc2V0WzBdKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgp
IC0gMTsgKytpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVj
dHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbaV0pKSwKKyAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUp
KTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBleGl0S2luZCwgZm9y
bWF0dGVkVmFsdWUsIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVEaXNj
cmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVEaXNjcmltaW5hbnQoc2V0Lmxhc3QoKSkpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBu
dW1iZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVU
b0ludDMyIGludCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RJbnRDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgbm90IGludCBjYXNlIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gMDsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90TnVt
YmVyQ2FzZSA9IDA7CisgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlKSB7
CisgICAgICAgICAgICBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRv
SW50MzIgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBub3ROdW1iZXJDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgbm90IG51bWJlciBjYXNlIikpOworICAgICAg
ICB9CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiVmFsdWVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdEludDMyKHZhbHVlKSwgdW5zdXJlKG5vdEludENhc2UpLCB1bnN1cmUoaW50Q2Fz
ZSkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbnRDYXNlLCBub3RJbnRDYXNlKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQu
YW5jaG9yKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2Up
IHsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEludENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsIGlzQ2VsbE9yTWlzYyh2YWx1ZSkpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRvSW50MzIodW5ib3hEb3VibGUodmFsdWUp
KSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90SW50Q2FzZSwgZG91YmxlQ2FzZSk7
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsT3JNaXNj
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpLCB1bnN1cmUo
ZG91YmxlQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhk
b3VibGVDYXNlLCBub3ROdW1iZXJDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihkb3VibGVUb0ludDMyKHVuYm94RG91YmxlKHZhbHVlKSkpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwg
flNwZWNDZWxsLCBpc0NlbGwodmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHNwZWNpYWxSZXN1bHQgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgbV9vdXQu
ZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpKSwKKyAgICAgICAgICAgICAgICBtX291dC5pbnQzMk9uZSwgbV9vdXQuaW50MzJaZXJv
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihzcGVjaWFsUmVzdWx0
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKTsKKyAgICB9CisK
KyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlLCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAgeworICAgICAgICAvLyBUaGlz
IGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNrKCkgYmVjYXVzZSBpdCBpcyBj
YWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAvLworICAgICAgICAvLyBtYXkg
YmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIHN3aXRjaCAob2JqZWN0
LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6CisgICAgICAgIC8vICAgICAg
ICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAgICAgIC8vICAgICAgICAgLi4u
CisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAgICBjYXNlIDQzOgorICAg
ICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTIpOworICAgICAgICAv
LyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICAg
fQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBhbmQgdHlwZTIgYXJlIGRpZmZl
cmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0IHRoZSBlZGdlIHdvdWxkIGJl
CisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIsIGluc3RlYWQgb2YgdHlwZTEg
fCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgbV9vdXQuYm9vbGVhblRydWUp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE51bWJl
cih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmluZyh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpTeW1ib2w6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBpc05vdFN5bWJvbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9m
KFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUu
c3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RD
ZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2Vs
bCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRp
b24iKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5
cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwg
bm90Q2VsbENhc2UpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAg
ICAgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSAmIH5TcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlRvcDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgbG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gbV9vdXQubG9hZDY0KGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1i
ZXIsIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoCisgICAg
ICAgIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
dmFsdWUsIGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNl
dCkpOworICAgIH0KKyAgICAKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc09mUHJvcGVydHkoCisg
ICAgICAgIExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcygKKyAg
ICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tpZGVudGlmaWVyTnVtYmVyXSwgc3RvcmFnZSwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBz
dG9yYWdlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5leHRTdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIAorICAgICAgICBpZiAo
cHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkQnV0dGVyZmx5V2l0
aEJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAg
ICAgIGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3Ry
dWN0dXJlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKG9iamVjdCksCisgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5l
eHRTdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbWl0U3RvcmVCYXJy
aWVyKG9iamVjdCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgU3Ry
dWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c1N0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgcmV0dXJu
IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnRQdHIsCisgICAgICAgICAgICAgICAg
bV9vdXQub3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCisgICAg
ICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1w
bChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1
bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSgKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVyZSog
cHJldmlvdXMsIFN0cnVjdHVyZSogbmV4dCkKKyAgICB7CisgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCisKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Cisg
ICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6
ZSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQu
aW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jv
d1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhTaXplSW1wbChuZXdTaXplKTsKKworICAgICAgICBwdHJkaWZmX3QgaGVh
ZGVyU2l6ZSA9IC1zaXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvbGRTaXplICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZf
dCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6
ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0
cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCks
IHJlc3VsdCwgb2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0
b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoc2l6ZV90IHNp
emVJblZhbHVlcykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBzbG93
IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xv
d1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9
IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBz
bG93QnV0dGVyZmx5VmFsdWU7CisgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5
U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xv
d0J1dHRlcmZseVZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVy
Zmx5ID0gbV9vdXQuYW5jaG9yKHNsb3dCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCisgICAgeworICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisKKyAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50
NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisKKyAg
ICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBHZXRCeUlkRmx1c2gsIHdlIG1pZ2h0IGdldCBz
b21lIHBlcmZvcm1hbmNlIGJvb3N0IGlmIHdlIGNsYWltIHRoYXQgaXQKKyAgICAgICAgLy8gY2xv
YmJlcnMgdm9sYXRpbGUgcmVnaXN0ZXJzIGxhdGUuIEl0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgY29y
cmVjdG5lc3MsIHRob3VnaCwgc2luY2UgdGhlCisgICAgICAgIC8vIElDIGNvZGUgaXMgc3VwZXIg
c21hcnQgYWJvdXQgc2F2aW5nIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjg0OAorICAgICAgICAKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworCisg
ICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUg
PQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQp
OworCisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAg
ICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGly
ZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAgICAgICAgICAgICAgQm94
PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGpp
dCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBleGl0IGZvciBjYWxsIElDJ3Mg
Y3JlYXRlZCBieSB0aGUgZ2V0QnlJZCBmb3IgZ2V0dGVycy4gV2UgZG9uJ3QgaGF2ZQorICAgICAg
ICAgICAgICAgIC8vIHRvIGRvIGFueXRoaW5nIHdlaXJkIG90aGVyIHRoYW4gY2FsbCB0aGlzLCBz
aW5jZSBpdCB3aWxsIGFzc29jaWF0ZSB0aGUgZXhpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8g
dGhlIGNhbGxzaXRlIGluZGV4LgorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2No
ZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5SWRHZW5lcmF0b3I+Ojpj
cmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKKyAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CisKKyAgICAgICAg
ICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAg
ICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBw
YXJhbXNbMV0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CisgICAgfQor
CisgICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihMVmFsdWUgb2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgb2JqZWN0LCBtX291
dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLCBvcGVyYXRpb25H
ZXRCdXR0ZXJmbHkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZFZlY3RvcldpdGhCYXJy
aWVyKExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVl
ID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
KTsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgZmFzdFJlc3VsdFZh
bHVlLAorICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7CisgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JXaXRo
QmFycmllciBzbG93IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yV2l0aEJhcnJpZXIgY29u
dGludWF0aW9uIikpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChpc0Zhc3RUeXBlZEFycmF5KG9iamVjdCksIHJhcmVseShzbG93UGF0aCksIHVzdWFs
bHkoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgICAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAg
ICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwor
ICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBv
YmplY3QsIExWYWx1ZSBwb2ludGVyLCBQX0pJVE9wZXJhdGlvbl9FQyBzbG93UGF0aEZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgcG9pbnRl
ciwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBMVmFsdWUgeworICAgICAgICAgICAgICAgIHJldHVy
biBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aEZ1bmN0aW9uLCBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0sIG9iamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBjb3B5QmFycmllcihMVmFsdWUgcG9pbnRl
ciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBzbG93IHBhdGgiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiY29weUJhcnJpZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IocG9pbnRlcik7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc0luVG9TcGFjZShwb2ludGVyKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xv
d1BhdGgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoZnVuY3RvcigpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CisgICAgfQorCisgICAgTFZhbHVlIGlzSW5Ub1NwYWNlKExWYWx1ZSBwb2lu
dGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwg
bV9vdXQuY29uc3RJbnRQdHIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKKyAgICB9CisK
KyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVJlYWRPbmx5KExWYWx1ZSBvYmplY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VCaXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkVmVjdG9y
UmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0
VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192
ZWN0b3IpOworCisgICAgICAgIExCYXNpY0Jsb2NrIHBvc3NpYmx5RnJvbVNwYWNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yUmVhZE9ubHkgcG9zc2libHkgZnJvbSBzcGFjZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJsb2FkVmVjdG9yUmVhZE9ubHkgY29udGludWF0aW9uIikpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKwor
ICAgICAgICBtX291dC5icmFuY2goaXNJblRvU3BhY2UoZmFzdFJlc3VsdFZhbHVlKSwgdXN1YWxs
eShjb250aW51YXRpb24pLCByYXJlbHkocG9zc2libHlGcm9tU3BhY2UpKTsKKworICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHBvc3NpYmx5RnJvbVNwYWNlLCBj
b250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBtX291dC5z
ZWxlY3QoCisgICAgICAgICAgICBpc0Zhc3RUeXBlZEFycmF5KG9iamVjdCksIHJlbW92ZVNwYWNl
Qml0cyhmYXN0UmVzdWx0VmFsdWUpLCBmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisKKyAgICBM
VmFsdWUgcmVtb3ZlU3BhY2VCaXRzKExWYWx1ZSBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb3V0LmJpdEFuZCgKKyAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSk7Cisg
ICAgfQorCisgICAgTFZhbHVlIGlzRmFzdFR5cGVkQXJyYXkoTFZhbHVlIG9iamVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihv
YmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9p
bnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2Us
IExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBoZWFwLCBzdG9yYWdl
LCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoZWRnZSksIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50RnVuY3RvciwgdHlwZW5hbWUgRG91Ymxl
RnVuY3Rvcj4KKyAgICB2b2lkIGNvbXBhcmUoCisgICAgICAgIGNvbnN0IEludEZ1bmN0b3ImIGlu
dEZ1bmN0b3IsIGNvbnN0IERvdWJsZUZ1bmN0b3ImIGRvdWJsZUZ1bmN0b3IsCisgICAgICAgIFNf
SklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oaW50
RnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50NTJSZXBVc2Up
KSB7CisgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBraW5kKTsKKyAgICAg
ICAgICAgIHNldEJvb2xlYW4oaW50RnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoRG91YmxlUmVwVXNlKSkgeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGRvdWJsZUZ1
bmN0b3IobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7
CisgICAgICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBhcmUoaW50RnVuY3RvciwgaGVscGVyRnVu
Y3Rpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdChFZGdlIGxlZnRDaGls
ZCwgRWRnZSByaWdodENoaWxkKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJpZ2h0Q2VsbCA9IGxv
d0NlbGwocmlnaHRDaGlsZCk7CisgICAgICAgIExWYWx1ZSBsZWZ0VmFsdWUgPSBsb3dKU1ZhbHVl
KGxlZnRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0ZVRydXRoeU9iamVjdChyaWdodENoaWxkLCByaWdodENlbGwsIFNwZWNPYmplY3Qp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVmdENlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QgbGVmdCBjZWxsIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxlZnROb3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGxlZnQgbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKGxl
ZnRWYWx1ZSwgcHJvdmVuVHlwZShsZWZ0Q2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShsZWZ0
Q2VsbENhc2UpLCB1bnN1cmUobGVmdE5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlZnRDZWxsQ2FzZSwgbGVmdE5v
dENlbGxDYXNlKTsKKyAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KGxlZnRDaGlsZCwgbGVm
dFZhbHVlLCBTcGVjT2JqZWN0IHwgKH5TcGVjQ2VsbCkpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKHJpZ2h0Q2VsbCwgbGVmdFZh
bHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGxlZnROb3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUobGVmdFZhbHVlKSwg
bGVmdENoaWxkLCBTcGVjT3RoZXIgfCBTcGVjQ2VsbCwgaXNOb3RPdGhlcihsZWZ0VmFsdWUpKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgY2VsbFJlc3VsdCwgbm90
Q2VsbFJlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVRydXRoeU9iamVj
dChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgewor
ICAgICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQo
KSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdl
LCBmaWx0ZXIsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwp
LCBlZGdlLCBmaWx0ZXIsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLm5vZGUoKSwKKyAg
ICAgICAgICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludEZ1bmN0b3I+CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZUNvbXBhcmUoY29uc3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgU19KSVRPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVm
dElzSW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBsZWZ0IGlz
IGludCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFzdFBhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGZhc3QgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIHNs
b3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihsZWZ0KSwgcmFyZWx5KHNsb3dQYXRo
KSwgdXN1YWxseShsZWZ0SXNJbnQpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVmdElzSW50LCBmYXN0UGF0aCk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChpc05vdEludDMyKHJpZ2h0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShm
YXN0UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNs
b3dQYXRoKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihpbnRGdW5jdG9yKHVuYm94SW50MzIobGVmdCksIHVuYm94SW50MzIocmlnaHQpKSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdE51bGwodm1DYWxsKAorICAgICAgICAg
ICAgbV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24oaGVscGVyRnVuY3Rpb24pLCBtX2NhbGxG
cmFtZSwgbGVmdCwgcmlnaHQpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KSk7CisgICAgfQorCisgICAgTFZhbHVlIHN0cmluZ3NFcXVhbChMVmFsdWUg
bGVmdEpTU3RyaW5nLCBMVmFsdWUgcmlnaHRKU1N0cmluZykKKyAgICB7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdFRyaXZpYWxseVVuZXF1YWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgbm90IHRyaXZpYWxseSB1bmVxdWFsIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEVtcHR5Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFs
IG5vdCBlbXB0eSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBsZWZ0UmVhZHlDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbGVmdCByZWFkeSBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayByaWdodFJlYWR5Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaW5nc0VxdWFsIHJpZ2h0IHJlYWR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxlZnQ4Qml0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxlZnQg
OC1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgcmlnaHQ4Qml0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHJpZ2h0IDgtYml0IGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVh
bCBsb29wIikpOworICAgICAgICBMQmFzaWNCbG9jayBieXRlc0VxdWFsID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJzdHJpbmdzRXF1YWwgYnl0ZXMgZXF1YWwiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgdHJ1ZSBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBmYWxzZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInN0cmluZ3NFcXVhbCBmYWxzZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBz
bG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHNsb3cgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBsZW5n
dGggPSBtX291dC5sb2FkMzIobGVmdEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobGVu
Z3RoLCBtX291dC5sb2FkMzIocmlnaHRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgp
KSwKKyAgICAgICAgICAgIHVuc3VyZShmYWxzZUNhc2UpLCB1bnN1cmUobm90VHJpdmlhbGx5VW5l
cXVhbENhc2UpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKG5vdFRyaXZpYWxseVVuZXF1YWxDYXNlLCBub3RFbXB0eUNhc2UpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5pc1plcm8zMihsZW5ndGgpLCB1bnN1cmUodHJ1ZUNhc2UpLCB1bnN1
cmUobm90RW1wdHlDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RW1wdHlDYXNl
LCBsZWZ0UmVhZHlDYXNlKTsKKworICAgICAgICBMVmFsdWUgbGVmdCA9IG1fb3V0LmxvYWRQdHIo
bGVmdEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHJp
Z2h0ID0gbV9vdXQubG9hZFB0cihyaWdodEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVl
KTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChsZWZ0KSwgdXN1YWxseShs
ZWZ0UmVhZHlDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obGVmdFJlYWR5Q2FzZSwgcmlnaHRSZWFkeUNhc2UpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwocmlnaHQpLCB1c3VhbGx5KHJpZ2h0UmVhZHlDYXNlKSwg
cmFyZWx5KHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmlnaHRSZWFkeUNh
c2UsIGxlZnQ4Qml0Q2FzZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihsZWZ0LCBt
X2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJl
KHNsb3dDYXNlKSwgdW5zdXJlKGxlZnQ4Qml0Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGxlZnQ4Qml0Q2FzZSwgcmlnaHQ4Qml0Q2FzZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihyaWdodCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAg
ICAgICAgICAgIHVuc3VyZShzbG93Q2FzZSksIHVuc3VyZShyaWdodDhCaXRDYXNlKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocmlnaHQ4Qml0Q2FzZSwgbG9vcCk7CisKKyAgICAgICAgTFZh
bHVlIGxlZnREYXRhID0gbV9vdXQubG9hZFB0cihsZWZ0LCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0
YSk7CisgICAgICAgIExWYWx1ZSByaWdodERhdGEgPSBtX291dC5sb2FkUHRyKHJpZ2h0LCBtX2hl
YXBzLlN0cmluZ0ltcGxfZGF0YSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhBdFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGxlbmd0aCk7CisKKyAgICAgICAgbV9vdXQuanVtcChsb29wKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wLCBieXRlc0VxdWFsKTsKKworICAgICAgICBM
VmFsdWUgaW5kZXhBdExvb3BUb3AgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGluZGV4QXRTdGFy
dCk7CisgICAgICAgIExWYWx1ZSBpbmRleEluTG9vcCA9IG1fb3V0LnN1YihpbmRleEF0TG9vcFRv
cCwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIExWYWx1ZSBsZWZ0Qnl0ZSA9IG1fb3V0Lmxv
YWQ4WmVyb0V4dDMyKAorICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFj
dGVyczgsIGxlZnREYXRhLCBtX291dC56ZXJvRXh0UHRyKGluZGV4SW5Mb29wKSkpOworICAgICAg
ICBMVmFsdWUgcmlnaHRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCisgICAgICAgICAgICBt
X291dC5iYXNlSW5kZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgcmlnaHREYXRhLCBtX291dC56ZXJv
RXh0UHRyKGluZGV4SW5Mb29wKSkpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RF
cXVhbChsZWZ0Qnl0ZSwgcmlnaHRCeXRlKSwgdW5zdXJlKGZhbHNlQ2FzZSksIHVuc3VyZShieXRl
c0VxdWFsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnl0ZXNFcXVhbCwgdHJ1ZUNhc2Up
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4Rm9yTmV4dEl0ZXJhdGlvbiA9IG1fb3V0
LmFuY2hvcihpbmRleEluTG9vcCk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5k
ZXhBdExvb3BUb3AsIGluZGV4Rm9yTmV4dEl0ZXJhdGlvbik7CisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5ub3RaZXJvMzIoaW5kZXhJbkxvb3ApLCB1bnN1cmUobG9vcCksIHVuc3VyZSh0cnVl
Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRydWVDYXNlLCBmYWxzZUNhc2UpOwor
ICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdHJ1ZVJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhmYWxzZUNhc2UsIHNsb3dDYXNlKTsKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYWxzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHNs
b3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKSwgbV9jYWxsRnJhbWUsCisgICAgICAg
ICAgICBsZWZ0SlNTdHJpbmcsIHJpZ2h0SlNTdHJpbmcpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbihzbG93UmVzdWx0VmFsdWUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmJvb2xlYW4sIHRydWVSZXN1bHQsIGZhbHNlUmVzdWx0LCBzbG93UmVzdWx0KTsKKyAg
ICB9CisKKyAgICBlbnVtIFNjcmF0Y2hGUFJVc2FnZSB7CisgICAgICAgIERvbnROZWVkU2NyYXRj
aEZQUiwKKyAgICAgICAgTmVlZFNjcmF0Y2hGUFIKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeUFyaXRoT3BHZW5lcmF0b3IsIFNjcmF0Y2hGUFJVc2FnZSBzY3JhdGNoRlBSVXNh
Z2UgPSBEb250TmVlZFNjcmF0Y2hGUFI+CisgICAgdm9pZCBlbWl0QmluYXJ5U25pcHBldChKX0pJ
VE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG5vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3Vs
dFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDI7
CisgICAgICAgIGlmIChzY3JhdGNoRlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIpCisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAg
ICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+
anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEJpbmFy
eUFyaXRoT3BHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBh
cmFtc1syXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMCks
IHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCksCisgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hGUFJVc2FnZSA9PSBOZWVkU2NyYXRjaEZQUiA/IHBhcmFtcy5mcFNjcmF0
Y2goMikgOiBJbnZhbGlkRlBSUmVnKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvci0+ZGlk
RW1pdEZhc3RQYXRoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5lbmRKdW1w
TGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PnNsb3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBz
bG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVu
Y3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJpbmFyeUJpdE9wR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdEJpbmFy
eUJpdE9wU25pcHBldChKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGRvIGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE2ODYKKyAgICAgICAgICAgIAorICAgICAgICBMVmFs
dWUgbGVmdCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmln
aHQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUo
KSk7CisgICAgICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJl
ZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9p
bnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Cisg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24o
cGFyYW1zKS0+anVtcHMoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8QmluYXJ5Qml0T3BHZW5lcmF0b3I+OjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgICAgIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdz
KHBhcmFtc1swXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFt
c1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOworCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGpp
dCk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7
CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+
c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rp
b24sIHBhcmFtc1swXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgIH0KKwor
ICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNo
aWZ0VHlwZSBzaGlmdFR5cGUpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBleGNlcHRpb25zLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjg2Cisg
ICAgICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7
CisKKyAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkpOworICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRUeXBlKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0
LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIobGVmdCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihyaWdodCk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3Rh
Z1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25I
YW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNo
cG9pbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwor
ICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgICAgICBw
YXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+
IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVk
dWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIo
KSksCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMCksIHBhcmFtcy5ncFNj
cmF0Y2goMCksIEludmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7CisKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRo
RnVuY3Rpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VHlwZSA9PSBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gb3BlcmF0aW9uVmFsdWVCaXRSU2hpZnQgOiBvcGVyYXRpb25WYWx1ZUJpdFVSU2hpZnQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwg
cGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGRvbmUsICZqaXQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAgfQorCisgICAg
TFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIm9iamVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CisgICAgCisgICAgICAgIExWYWx1
ZSByZXN1bHQ7CisgICAgICAgIExWYWx1ZSBjb25kaXRpb247CisgICAgICAgIGlmIChPcHRpb25z
Ojpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmludFB0
clplcm87CisgICAgICAgICAgICBjb25kaXRpb24gPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkUHRyKAorICAgICAg
ICAgICAgICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFk
KTsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1fb3V0Lm5vdE51bGwocmVzdWx0KTsKKyAgICAg
ICAgfQorICAgICAgICBtX291dC5icmFuY2goY29uZGl0aW9uLCB1c3VhbGx5KHN1Y2Nlc3MpLCBy
YXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN1Y2Nl
c3MpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoCisgICAgICAgICAgICBtX291
dC5sb2FkUHRyKHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfZnJlZUxpc3ROZXh0KSwKKyAgICAgICAg
ICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFkKTsKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3RydWN0
dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIG9iamVjdCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291dC5zdG9yZTMyKAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0aW9u
QmxvYigpKSwKKyAgICAgICAgICAgIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMp
OworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAg
ICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgTFZhbHVl
IGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRl
Q2VsbChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5zdG9y
ZVB0cihidXR0ZXJmbHksIHJlc3VsdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KAorICAgICAgICBzaXplX3Qgc2l6
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0o
KS5oZWFwLmFsbG9jYXRvckZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+KHNpemUpOworICAgICAg
ICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAg
eworICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3Q8Q2xhc3NUeXBlPigKKyAgICAgICAgICAg
IENsYXNzVHlwZTo6YWxsb2NhdGlvblNpemUoMCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93
UGF0aCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KKyAg
ICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KAorICAgICAgICBMVmFsdWUgc2l6
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjpwcmVj
aXNlU3RlcCAmIChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6
cHJlY2lzZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydCghKE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjppbXByZWNp
c2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgbXVzdCBiZSBhIHBvd2Vy
IG9mIHR3by4iKTsKKworICAgICAgICBMVmFsdWUgc3Vic3BhY2UgPSBtX291dC5jb25zdEludFB0
cigmdm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbWFsbENhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IHNtYWxsIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGxhcmdlIG9yIG92ZXJzaXplIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhcmdlQ2FzZUJsb2NrID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgbGFyZ2UgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJh
bGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQuY29uc3RJ
bnQzMihNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7CisgICAgICAgIExWYWx1ZSBpc1Nt
YWxsID0gbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihNYXJrZWRT
cGFjZTo6cHJlY2lzZUN1dG9mZikpOworICAgICAgICBtX291dC5icmFuY2goaXNTbWFsbCwgdW5z
dXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhz
bWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKTsKKyAgICAgICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLk1h
cmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFjZSwKKyAgICAgICAg
ICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25z
dEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXApKSkpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgdXN1YWxseShsYXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAg
ICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNw
YWNlLAorICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNp
emUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVw
KSkpKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlQWxsb2NhdG9yID0gbV9vdXQuYW5j
aG9yKGFkZHJlc3MudmFsdWUoKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgc21h
bGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBh
bGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7
CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhl
IGFsbG9jYXRpb24uCisgICAgTFZhbHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIENvcGllZEFs
bG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InN0b3JhZ2UgYWxsb2NhdGlvbiBzdWNjZXNzIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHJlbWFpbmluZyA9IG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1
cnJlbnRSZW1haW5pbmcpKTsKKyAgICAgICAgTFZhbHVlIG5ld1JlbWFpbmluZyA9IG1fb3V0LnN1
YihyZW1haW5pbmcsIHNpemUpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgbV9vdXQubGVzc1RoYW4obmV3UmVtYWluaW5nLCBtX291dC5pbnRQdHJaZXJvKSwK
KyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoc3VjY2VzcykpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3VjY2Vzcyk7CisgICAgICAgIAorICAgICAgICBt
X291dC5zdG9yZVB0cihuZXdSZW1haW5pbmcsIG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9j
dXJyZW50UmVtYWluaW5nKSk7CisgICAgICAgIHJldHVybiBtX291dC5zdWIoCisgICAgICAgICAg
ICBtX291dC5sb2FkUHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50UGF5bG9h
ZEVuZCkpLCBuZXdSZW1haW5pbmcpOworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZUJhc2lj
U3RvcmFnZShMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9vdXQuc3ViKGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKHNpemUsIHNs
b3dQYXRoKSwgc2l6ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5h
bGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYWxsb2NhdGVPYmplY3Qgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCisgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0Lmlu
dFB0clplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKKworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uTmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNs
b3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcnJheVZhbHVlcyB7CisgICAgICAgIEFycmF5
VmFsdWVzKCkKKyAgICAgICAgICAgIDogYXJyYXkoMCkKKyAgICAgICAgICAgICwgYnV0dGVyZmx5
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlWYWx1ZXMo
TFZhbHVlIGFycmF5LCBMVmFsdWUgYnV0dGVyZmx5KQorICAgICAgICAgICAgOiBhcnJheShhcnJh
eSkKKyAgICAgICAgICAgICwgYnV0dGVyZmx5KGJ1dHRlcmZseSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYXJyYXk7CisgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHk7CisgICAgfTsKKyAgICBBcnJheVZhbHVlcyBhbGxvY2F0ZUpTQXJyYXkoCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cywgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCisgICAgeworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBudW1FbGVtZW50cyk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoSlNWYWx1ZSkgKiB2
ZWN0b3JMZW5ndGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHNsb3dQ
YXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCisg
ICAgICAgICAgICBlbmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIG9iamVjdCA9IGFs
bG9jYXRlT2JqZWN0PEpTQXJyYXk+KAorICAgICAgICAgICAgc3RydWN0dXJlLCBidXR0ZXJmbHks
IHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJ
bnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVu
Z3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0
aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCisgICAg
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGll
c1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CisgICAgfQorICAgIAorICAgIEFycmF5
VmFsdWVzIGFsbG9jYXRlSlNBcnJheShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVt
RWxlbWVudHMpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSlNBcnJheSBhbGxvY2F0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0FycmF5
IGFsbG9jYXRpb24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAg
ICAgICAKKyAgICAgICAgQXJyYXlWYWx1ZXMgZmFzdFZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShz
dHJ1Y3R1cmUsIG51bUVsZW1lbnRzLCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RBcnJheSA9IG1fb3V0LmFuY2hvcihmYXN0VmFsdWVzLmFycmF5KTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0VmFsdWVzLmJ1dHRl
cmZseSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICBMVmFsdWUgc2xvd0FycmF5VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihudW1FbGVtZW50cykpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dBcnJheSA9IG1fb3V0LmFuY2hvcihzbG93QXJyYXlWYWx1ZSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBt
X291dC5sb2FkUHRyKHNsb3dBcnJheVZhbHVlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkp
OworCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIEFycmF5VmFsdWVzKAorICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdEFycmF5LCBzbG93QXJyYXkpLAorICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSkpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgYm9vbGlmeShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVkZ2UudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJv
b2xlYW5Vc2U6CisgICAgICAgICAgICByZXR1cm4gbG93Qm9vbGVhbihlZGdlKTsKKyAgICAgICAg
Y2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ub3RaZXJvMzIobG93SW50
MzIoZWRnZSkpOworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5kb3VibGVOb3RFcXVhbEFuZE9yZGVyZWQobG93RG91YmxlKGVkZ2UpLCBtX291dC5k
b3VibGVaZXJvKTsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoCisgICAgICAgICAgICAgICAgZXF1YWxOdWxsT3JVbmRl
ZmluZWQoCisgICAgICAgICAgICAgICAgICAgIGVkZ2UsIENlbGxDYXNlU3BlY3VsYXRlc09iamVj
dCwgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgICAgICBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKKyAgICAgICAg
ICAgIExWYWx1ZSBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyhlZGdlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdHJpbmdWYWx1ZSwgbV9oZWFw
cy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKGxl
bmd0aCwgbV9vdXQuaW50MzJaZXJvKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9s
IGZsb3cgc3RydWN0dXJlOgorICAgICAgICAgICAgLy8gaWYgKHZhbHVlIGlzIGNlbGwpIHsKKyAg
ICAgICAgICAgIC8vICAgICBpZiAodmFsdWUgaXMgc3RyaW5nKQorICAgICAgICAgICAgLy8gICAg
ICAgICByZXN1bHQgPSAhIXZhbHVlLT5sZW5ndGgKKyAgICAgICAgICAgIC8vICAgICBlbHNlIHsK
KyAgICAgICAgICAgIC8vICAgICAgICAgZG8gZXZpbCB0aGluZ3MgZm9yIG1hc3F1ZXJhZGVzLWFz
LXVuZGVmaW5lZAorICAgICAgICAgICAgLy8gICAgICAgICByZXN1bHQgPSB0cnVlCisgICAgICAg
ICAgICAvLyAgICAgfQorICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSBpcyBpbnQzMikg
eworICAgICAgICAgICAgLy8gICAgIHJlc3VsdCA9ICEhdW5ib3hJbnQzMih2YWx1ZSkKKyAgICAg
ICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgbnVtYmVyKSB7CisgICAgICAgICAgICAvLyAg
ICAgcmVzdWx0ID0gISF1bmJveERvdWJsZSh2YWx1ZSkKKyAgICAgICAgICAgIC8vIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUgPT0ganNUcnVlCisgICAgICAgICAg
ICAvLyB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgc3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bm90U3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5v
dCBzdHJpbmcgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90IGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludDMyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQm9vbGlmeSB1bnR5cGVkIGludDMyIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBub3RJbnQzMkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBu
b3QgaW50MzIgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBkb3VibGUgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdERvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBub3QgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50
eXBlZCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxW
YWx1ZUZyb21CbG9jaz4gcmVzdWx0czsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSks
IHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBzdHJpbmdDYXNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoc3Ry
aW5nQ2FzZSksIHVuc3VyZShub3RTdHJpbmdDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIG5vdFN0cmluZ0Nhc2UpOworICAgICAgICAg
ICAgTFZhbHVlIG5vbkVtcHR5U3RyaW5nID0gbV9vdXQubm90WmVybzMyKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0
aCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG5vbkVtcHR5U3Ry
aW5nKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZ0Nhc2UsIG5vdENlbGxDYXNl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBpc1RydXRoeU9iamVjdDsKKyAgICAgICAgICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGlzVHJ1dGh5T2JqZWN0ID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBtYXNxdWVyYWRlc0Nhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBtYXNxdWVyYWRlcyBjYXNlIikpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuVHJ1ZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMy
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksCisgICAgICAgICAgICAgICAg
ICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KG1hc3F1ZXJhZGVzQ2FzZSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hc3F1ZXJhZGVz
Q2FzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaXNUcnV0aHlPYmplY3Qg
PSBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihsb2FkU3RydWN0dXJlKHZhbHVlKSwgbV9oZWFw
cy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoaXNUcnV0aHlPYmplY3QpKTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGludDMyQ2FzZSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IH5TcGVjQ2VsbCksCisgICAgICAgICAgICAgICAgdW5zdXJlKGludDMyQ2FzZSksIHVuc3VyZShu
b3RJbnQzMkNhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW50MzJDYXNlLCBub3RJbnQzMkNhc2UpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKG1fb3V0Lm5vdFplcm8zMih1bmJveEludDMyKHZhbHVlKSkpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90SW50MzJDYXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc051bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSAmIH5TcGVjQ2VsbCksCisgICAgICAgICAgICAgICAgdW5zdXJlKGRvdWJsZUNhc2UpLCB1
bnN1cmUobm90RG91YmxlQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhkb3VibGVDYXNlLCBub3REb3VibGVDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBk
b3VibGVJc1RydXRoeSA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsQW5kT3JkZXJlZCgKKyAgICAgICAg
ICAgICAgICB1bmJveERvdWJsZSh2YWx1ZSksIG1fb3V0LmNvbnN0RG91YmxlKDApKTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihkb3VibGVJc1RydXRoeSkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3REb3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAg
ICAgICAgTFZhbHVlIG1pc2NJc1RydXRoeSA9IG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAg
IHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobWlzY0lzVHJ1dGh5
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCByZXN1bHRzKTsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgZW51bSBTdHJpbmdPck9iamVjdE1vZGUgeworICAgICAgICBBbGxD
ZWxsc0FyZUZhbHNlLAorICAgICAgICBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3QKKyAgICB9Owor
ICAgIGVudW0gRXF1YWxOdWxsT3JVbmRlZmluZWRNb2RlIHsKKyAgICAgICAgRXF1YWxOdWxsLAor
ICAgICAgICBFcXVhbFVuZGVmaW5lZCwKKyAgICAgICAgRXF1YWxOdWxsT3JVbmRlZmluZWQsCisg
ICAgICAgIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZAorICAgIH07CisgICAgTFZhbHVlIGVxdWFs
TnVsbE9yVW5kZWZpbmVkKAorICAgICAgICBFZGdlIGVkZ2UsIFN0cmluZ09yT2JqZWN0TW9kZSBj
ZWxsTW9kZSwgRXF1YWxOdWxsT3JVbmRlZmluZWRNb2RlIHByaW1pdGl2ZU1vZGUsCisgICAgICAg
IE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgb3BlcmFuZE1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3Bl
Y3VsYXRpb24pCisgICAgeworICAgICAgICBib29sIHZhbGlkV2F0Y2hwb2ludCA9IG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIG9wZXJhbmRNb2RlKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJF
cXVhbE51bGxPclVuZGVmaW5lZCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHBy
aW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVk
IHByaW1pdGl2ZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIGNvbnRpbnVhdGlvbiIp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdENlbGwodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpLCB1bnN1cmUocHJpbWl0aXZlQ2FzZSksIHVuc3VyZShjZWxsQ2FzZSkpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgcHJpbWl0aXZlQ2FzZSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDM+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGNlbGxNb2Rl
KSB7CisgICAgICAgIGNhc2UgQWxsQ2VsbHNBcmVGYWxzZToKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENlbGxDYXNlU3BlY3VsYXRlc09iamVjdDoKKyAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgaXNOb3RPYmplY3QodmFsdWUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmFsaWRXYXRjaHBvaW50
KSB7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
bkZhbHNlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBtYXNxdWVyYWRlc0Nhc2UgPQorICAg
ICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQg
bWFzcXVlcmFkZXMgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RO
b25aZXJvMzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVl
LCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksCisgICAgICAgICAgICAgICAg
cmFyZWx5KG1hc3F1ZXJhZGVzQ2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hc3F1ZXJhZGVzQ2FzZSwgcHJpbWl0
aXZlQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBs
b2FkU3RydWN0dXJlKHZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSkpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocHJpbWl0aXZlQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIExWYWx1ZSBwcmltaXRpdmVSZXN1bHQ7CisgICAgICAgIHN3aXRjaCAocHJp
bWl0aXZlTW9kZSkgeworICAgICAgICBjYXNlIEVxdWFsTnVsbDoKKyAgICAgICAgICAgIHByaW1p
dGl2ZVJlc3VsdCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVs
bCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXF1YWxVbmRlZmluZWQ6Cisg
ICAgICAgICAgICBwcmltaXRpdmVSZXN1bHQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRXF1YWxOdWxsT3JVbmRlZmluZWQ6CisgICAgICAgICAgICBwcmltaXRpdmVSZXN1bHQgPSBp
c090aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZDoKKyAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWND
ZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBwcmltaXRp
dmVSZXN1bHQgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihwcmltaXRpdmVSZXN1bHQp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIHJlc3VsdHMpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CisgICAgdm9pZCBjb250aWd1b3Vz
UHV0QnlWYWxPdXRPZkJvdW5kcygKKyAgICAgICAgRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rp
b24sIExWYWx1ZSBiYXNlLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBMVmFsdWUgdmFs
dWUsCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbikKKyAgICB7CisgICAgICAgIExW
YWx1ZSBpc05vdEluQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgaW5k
ZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkpOworICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5k
cygpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RJbkJvdW5kc0Nhc2UgPQorICAgICAg
ICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgbm90IGluIGJvdW5kcyIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHBlcmZvcm1TdG9yZSA9CisgICAgICAgICAgICAg
ICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBwZXJmb3JtIHN0b3JlIikpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW5Cb3VuZHMsIHVu
c3VyZShub3RJbkJvdW5kc0Nhc2UpLCB1bnN1cmUocGVyZm9ybVN0b3JlKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vdEluQm91bmRzQ2FzZSwgcGVyZm9ybVN0b3JlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAg
ICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBz
LkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsIGlzT3V0T2ZCb3VuZHMpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3Vu
ZHNDYXNlID0KKyAgICAgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRC
eVZhbCBvdXQgb2YgYm91bmRzIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhvbGVD
YXNlID0KKyAgICAgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZh
bCBob2xlIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChpc091dE9mQm91bmRzLCByYXJlbHkob3V0T2ZCb3VuZHNDYXNlKSwgdXN1YWxs
eShob2xlQ2FzZSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHNDYXNlLCBo
b2xlQ2FzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZtQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihzbG93
UGF0aEZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oaG9sZUNhc2UsIGlubmVyTGFzdE5leHQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zdG9yZTMyKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgIHN0
b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5qdW1wKHBlcmZvcm1TdG9yZSk7CisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhwZXJmb3JtU3RvcmUsIGxhc3ROZXh0KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGJ1aWxkU3dpdGNoKFN3aXRjaERhdGEqIGRhdGEsIExUeXBlIHR5cGUsIExW
YWx1ZSBzd2l0Y2hWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlID09IG1fb3V0Lmlu
dFB0ciB8fCB0eXBlID09IG1fb3V0LmludDMyKTsKKworICAgICAgICBWZWN0b3I8U3dpdGNoQ2Fz
ZT4gY2FzZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgU3dpdGNoQ2FzZSBuZXdDYXNlOworCisgICAgICAg
ICAgICBpZiAodHlwZSA9PSBtX291dC5pbnRQdHIpIHsKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gU3dpdGNoQ2FzZShtX291dC5jb25zdEludFB0cihkYXRhLT5jYXNlc1tpXS52YWx1ZS5zd2l0
Y2hMb29rdXBWYWx1ZShkYXRhLT5raW5kKSksCisgICAgICAgICAgICAgICAgICAgIGxvd0Jsb2Nr
KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJn
ZXQuY291bnQpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBtX291dC5pbnQzMikg
eworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0YS0+a2luZCkpLAorICAg
ICAgICAgICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spLCBX
ZWlnaHQoZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmNvdW50KSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQobmV3
Q2FzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0
aW9uKAorICAgICAgICAgICAgc3dpdGNoVmFsdWUsIGNhc2VzLAorICAgICAgICAgICAgbG93Qmxv
Y2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spLCBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291
bnQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzd2l0Y2hTdHJpbmcoU3dpdGNoRGF0YSogZGF0
YSwgTFZhbHVlIHN0cmluZykKKyAgICB7CisgICAgICAgIGJvb2wgY2FuRG9CaW5hcnlTd2l0Y2gg
PSB0cnVlOworICAgICAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IDA7CisgICAgICAgIAorICAg
ICAgICBmb3IgKERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgOiBkYXRhLT5jYXNlcykgeworICAgICAg
ICAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gbXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKTsKKyAg
ICAgICAgICAgIGlmICghc3RyaW5nLT5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgIGNhbkRv
QmluYXJ5U3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5ndGgoKSA+IE9wdGlvbnM6Om1heGltdW1C
aW5hcnlTdHJpbmdTd2l0Y2hDYXNlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjYW5Eb0Jp
bmFyeVN3aXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3aXRjaCB8fCB0b3RhbExlbmd0
aCA+IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2hTdHJpbmdTbG93KGRhdGEsIHN0cmluZyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0g
bV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBM
VmFsdWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5n
dGgpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaGFzSW1wbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIGhhcyBpbXBsIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoU3RyaW5nIGlzIDggYml0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBz
bG93IGNhc2UiKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxs
KHN0cmluZ0ltcGwpLCB1bnN1cmUoc2xvd0Jsb2NrKSwgdW5zdXJlKGhhc0ltcGxCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyho
YXNJbXBsQmxvY2ssIGlzOEJpdEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkp
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93QmxvY2spLCB1bnN1cmUoaXM4Qml0QmxvY2spKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdEJsb2NrLCBzbG93QmxvY2sp
OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoc3RyaW5n
SW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2RhdGEpOworICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcm9wYWdhdGUgYnJhbmNoIHdlaWdodCBkYXRhIHRvIHRoZSBjYXNlcyBv
ZiB0aGlzIHN3aXRjaC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NDM2OAorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN0cmluZ1N3aXRjaENh
c2U+IGNhc2VzOworICAgICAgICBmb3IgKERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgOiBkYXRhLT5j
YXNlcykKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTdHJpbmdTd2l0Y2hDYXNlKG15Q2FzZS52
YWx1ZS5zdHJpbmdJbXBsKCksIGxvd0Jsb2NrKG15Q2FzZS50YXJnZXQuYmxvY2spKSk7CisgICAg
ICAgIHN0ZDo6c29ydChjYXNlcy5iZWdpbigpLCBjYXNlcy5lbmQoKSk7CisgICAgICAgIHN3aXRj
aFN0cmluZ1JlY3Vyc2UoZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCAwLCAwLCBjYXNlcy5z
aXplKCksIDAsIGZhbHNlKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93QmxvY2ssIGxh
c3ROZXh0KTsKKyAgICAgICAgc3dpdGNoU3RyaW5nU2xvdyhkYXRhLCBzdHJpbmcpOworICAgIH0K
KyAgICAKKyAgICAvLyBUaGUgY29kZSBmb3Igc3RyaW5nIHN3aXRjaGluZyBpcyBiYXNlZCBjbG9z
ZWx5IG9uIHRoZSBzYW1lIGNvZGUgaW4gdGhlIERGRyBiYWNrZW5kLiBXaGlsZSBpdAorICAgIC8v
IHdvdWxkIGJlIG5pY2UgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygc2ltaWxhci1sb29raW5nIGNv
ZGUsIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyBvbmUgb2YKKyAgICAvLyB0aG9zZSBhbGdvcml0aG1z
IHdoZXJlIGZhY3RvcmluZyBvdXQgdGhlIGNvbW1vbiBiaXRzIHdvdWxkIHJlc3VsdCBpbiBtb3Jl
IGNvZGUgdGhhbiBqdXN0CisgICAgLy8gZHVwbGljYXRpbmcuCisgICAgCisgICAgc3RydWN0IFN0
cmluZ1N3aXRjaENhc2UgeworICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKCkgeyB9CisgICAgICAg
IAorICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKFN0cmluZ0ltcGwqIHN0cmluZywgTEJhc2ljQmxv
Y2sgdGFyZ2V0KQorICAgICAgICAgICAgOiBzdHJpbmcoc3RyaW5nKQorICAgICAgICAgICAgLCB0
YXJnZXQodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yPChjb25zdCBTdHJpbmdTd2l0Y2hDYXNlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0cmluZ0xlc3NUaGFuKCpzdHJpbmcsICpvdGhlci5zdHJpbmcpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7CisgICAgICAg
IExCYXNpY0Jsb2NrIHRhcmdldDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBDaGFyYWN0ZXJD
YXNlIHsKKyAgICAgICAgQ2hhcmFjdGVyQ2FzZSgpCisgICAgICAgICAgICA6IGNoYXJhY3Rlcigw
KQorICAgICAgICAgICAgLCBiZWdpbigwKQorICAgICAgICAgICAgLCBlbmQoMCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaGFyYWN0ZXJDYXNlKExDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkKKyAgICAgICAgICAgIDogY2hhcmFj
dGVyKGNoYXJhY3RlcikKKyAgICAgICAgICAgICwgYmVnaW4oYmVnaW4pCisgICAgICAgICAgICAs
IGVuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgQ2hhcmFjdGVyQ2FzZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIgPCBvdGhlci5jaGFyYWN0ZXI7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIExDaGFyIGNoYXJhY3RlcjsKKyAgICAgICAgdW5zaWduZWQgYmVn
aW47CisgICAgICAgIHVuc2lnbmVkIGVuZDsKKyAgICB9OworICAgIAorICAgIHZvaWQgc3dpdGNo
U3RyaW5nUmVjdXJzZSgKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSwgTFZhbHVlIGJ1ZmZlciwg
TFZhbHVlIGxlbmd0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1N3aXRjaENhc2U+JiBjYXNlcywKKyAg
ICAgICAgdW5zaWduZWQgbnVtQ2hlY2tlZCwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwg
dW5zaWduZWQgYWxyZWFkeUNoZWNrZWRMZW5ndGgsCisgICAgICAgIHVuc2lnbmVkIGNoZWNrZWRF
eGFjdExlbmd0aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoID0gbG93
QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOworICAgICAgICAKKyAgICAgICAgaWYgKGJl
Z2luID09IGVuZCkgeworICAgICAgICAgICAgbV9vdXQuanVtcChmYWxsVGhyb3VnaCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1p
bkxlbmd0aCA9IGNhc2VzW2JlZ2luXS5zdHJpbmctPmxlbmd0aCgpOworICAgICAgICB1bnNpZ25l
ZCBjb21tb25DaGFycyA9IG1pbkxlbmd0aDsKKyAgICAgICAgYm9vbCBhbGxMZW5ndGhzRXF1YWwg
PSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlDb21tb25DaGFycyA9IG51bUNoZWNrZWQ7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGNhc2VzW2JlZ2luXS5zdHJpbmct
Pmxlbmd0aCgpLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IG51bUNoZWNrZWQ7IGogPCBsaW1pdDsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGopICE9IGNhc2VzW2ldLnN0cmluZy0+YXQo
aikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG15Q29tbW9u
Q2hhcnMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbW1vbkNoYXJzID0gc3RkOjpt
aW4oY29tbW9uQ2hhcnMsIG15Q29tbW9uQ2hhcnMpOworICAgICAgICAgICAgaWYgKG1pbkxlbmd0
aCAhPSBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGFsbExlbmd0
aHNFcXVhbCA9IGZhbHNlOworICAgICAgICAgICAgbWluTGVuZ3RoID0gc3RkOjptaW4obWluTGVu
Z3RoLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGNoZWNrZWRFeGFjdExlbmd0aCkgeworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBtX25vZGUsIGFscmVhZHlDaGVja2VkTGVuZ3RoID09IG1pbkxlbmd0aCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxsTGVuZ3Roc0VxdWFsKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1p
bkxlbmd0aCA+PSBjb21tb25DaGFycyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbExlbmd0
aHNFcXVhbCAmJiBhbHJlYWR5Q2hlY2tlZExlbmd0aCA8IG1pbkxlbmd0aCkKKyAgICAgICAgICAg
IG1fb3V0LmNoZWNrKG1fb3V0LmJlbG93KGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihtaW5MZW5n
dGgpKSwgdW5zdXJlKGZhbGxUaHJvdWdoKSk7CisgICAgICAgIGlmIChhbGxMZW5ndGhzRXF1YWwg
JiYgKGFscmVhZHlDaGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoIHx8ICFjaGVja2VkRXhhY3RMZW5n
dGgpKQorICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRocm91Z2gpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNoZWNrZWQ7IGkgPCBjb21tb25DaGFyczsg
KytpKSB7CisgICAgICAgICAgICBtX291dC5jaGVjaygKKyAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoYnVmZmVy
LCBtX2hlYXBzLmNoYXJhY3RlcnM4W2ldKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihzdGF0aWNfY2FzdDx1aW50MTZfdD4oY2FzZXNbYmVnaW5dLnN0cmluZy0+YXQoaSkp
KSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGZhbGxUaHJvdWdoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChtaW5MZW5ndGggPT0gY29tbW9uQ2hhcnMpIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjYXNlcyBpcyBhIHByZWZp
eCBvZiBhbGwgb2YgdGhlIG90aGVyIGNhc2VzLgorICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBjaGVja2VkIHRoYXQgdGhlIGlucHV0IHN0cmluZyBpcyBhIHByZWZpeCBvZiBhbGwgb2YgdGhl
IGNhc2VzLAorICAgICAgICAgICAgLy8gc28gd2UganVzdCBjaGVjayBsZW5ndGggdG8ganVtcCB0
byB0aGF0IGNhc2UuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBjYXNlc1tiZWdpbl0uc3RyaW5nLT5sZW5ndGgoKSA9PSBjb21tb25DaGFycyk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsraSkK
KyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgY2FzZXNbaV0uc3Ry
aW5nLT5sZW5ndGgoKSA+IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGFsbExlbmd0aHNFcXVhbCkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBlbmQgPT0gYmVnaW4gKyAxKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1w
KGNhc2VzW2JlZ2luXS50YXJnZXQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuY2hlY2soCisgICAgICAgICAg
ICAgICAgbV9vdXQuZXF1YWwobGVuZ3RoLCBtX291dC5jb25zdEludDMyKGNvbW1vbkNoYXJzKSks
CisgICAgICAgICAgICAgICAgdW5zdXJlKGNhc2VzW2JlZ2luXS50YXJnZXQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gV2UndmUgY2hlY2tlZCBpZiB0aGUgbGVuZ3RoIGlzID49IG1p
bkxlbmd0aCwgYW5kIHRoZW4gd2UgY2hlY2tlZCBpZiB0aGUgbGVuZ3RoIGlzCisgICAgICAgICAg
ICAvLyA9PSBjb21tb25DaGFycy4gV2UgZ2V0IHRvIHRoaXMgcG9pbnQgaWYgaXQgaXMgPj0gbWlu
TGVuZ3RoIGJ1dCBub3QgPT0gY29tbW9uQ2hhcnMuCisgICAgICAgICAgICAvLyBIZW5jZSB3ZSBr
bm93IHRoYXQgaXQgbm93IG11c3QgYmUgPiBtaW5MZW5ndGgsIGkuZS4gdGhhdCBpdCdzID49IG1p
bkxlbmd0aCArIDEuCisgICAgICAgICAgICBzd2l0Y2hTdHJpbmdSZWN1cnNlKAorICAgICAgICAg
ICAgICAgIGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgY29tbW9uQ2hhcnMsIGJlZ2luICsg
MSwgZW5kLCBtaW5MZW5ndGggKyAxLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRo
ZSBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gY29tbW9uQ2hhcnMsIGFuZCB3ZSd2ZSBvbmx5IHZlcmlm
aWVkCisgICAgICAgIC8vIGNvbW1vbkNoYXJzLiBVc2UgYSBiaW5hcnkgc3dpdGNoIG9uIHRoZSBu
ZXh0IHVuY2hlY2tlZCBjaGFyYWN0ZXIsIGkuZS4KKyAgICAgICAgLy8gc3RyaW5nW2NvbW1vbkNo
YXJzXS4KKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlbmQg
Pj0gYmVnaW4gKyAyKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB1bmNoZWNrZWRDaGFyID0g
bV9vdXQubG9hZDhaZXJvRXh0MzIoYnVmZmVyLCBtX2hlYXBzLmNoYXJhY3RlcnM4W2NvbW1vbkNo
YXJzXSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8Q2hhcmFjdGVyQ2FzZT4gY2hhcmFjdGVy
Q2FzZXM7CisgICAgICAgIENoYXJhY3RlckNhc2UgY3VycmVudENhc2UoY2FzZXNbYmVnaW5dLnN0
cmluZy0+YXQoY29tbW9uQ2hhcnMpLCBiZWdpbiwgYmVnaW4gKyAxKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgICAgIExDaGFy
IGN1cnJlbnRDaGFyID0gY2FzZXNbaV0uc3RyaW5nLT5hdChjb21tb25DaGFycyk7CisgICAgICAg
ICAgICBpZiAoY3VycmVudENoYXIgIT0gY3VycmVudENhc2UuY2hhcmFjdGVyKSB7CisgICAgICAg
ICAgICAgICAgY3VycmVudENhc2UuZW5kID0gaTsKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJD
YXNlcy5hcHBlbmQoY3VycmVudENhc2UpOworICAgICAgICAgICAgICAgIGN1cnJlbnRDYXNlID0g
Q2hhcmFjdGVyQ2FzZShjdXJyZW50Q2hhciwgaSwgaSArIDEpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgY3VycmVudENhc2UuZW5kID0gaSArIDE7CisgICAgICAgIH0KKyAg
ICAgICAgY2hhcmFjdGVyQ2FzZXMuYXBwZW5kKGN1cnJlbnRDYXNlKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gY2hhcmFjdGVyQmxvY2tzOworICAgICAgICBmb3IgKENo
YXJhY3RlckNhc2UmIG15Q2FzZSA6IGNoYXJhY3RlckNhc2VzKQorICAgICAgICAgICAgY2hhcmFj
dGVyQmxvY2tzLmFwcGVuZChGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJp
bmcgY2FzZSBmb3IgIiwgbXlDYXNlLmNoYXJhY3RlciwgIiBhdCBpbmRleCAiLCBjb21tb25DaGFy
cykpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBzd2l0Y2hDYXNlczsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlckNhc2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgY2hhcmFjdGVyQ2FzZXNbaSAtIDFdLmNoYXJhY3RlciA8IGNoYXJhY3Rl
ckNhc2VzW2ldLmNoYXJhY3Rlcik7CisgICAgICAgICAgICBzd2l0Y2hDYXNlcy5hcHBlbmQoU3dp
dGNoQ2FzZSgKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNoYXJhY3RlckNhc2Vz
W2ldLmNoYXJhY3RlciksIGNoYXJhY3RlckJsb2Nrc1tpXSwgV2VpZ2h0KCkpKTsKKyAgICAgICAg
fQorICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbih1bmNoZWNrZWRDaGFyLCBzd2l0Y2hD
YXNlcywgZmFsbFRocm91Z2gsIFdlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIGNoYXJhY3RlckJsb2Nr
cy5hcHBlbmQobGFzdE5leHQpOyAvLyBNYWtlcyBpdCBjb252ZW5pZW50IHRvIHNldCBuZXh0Qmxv
Y2suCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJDYXNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hhcmFjdGVyQmxvY2tzW2ld
LCBjaGFyYWN0ZXJCbG9ja3NbaSArIDFdKTsKKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1JlY3Vy
c2UoCisgICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCBjb21tb25D
aGFycyArIDEsCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2FzZXNbaV0uYmVnaW4sIGNoYXJh
Y3RlckNhc2VzW2ldLmVuZCwgbWluTGVuZ3RoLCBhbGxMZW5ndGhzRXF1YWwpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vdXQubV9u
ZXh0QmxvY2sgPT0gbGFzdE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN3aXRjaFN0cmlu
Z1Nsb3coU3dpdGNoRGF0YSogZGF0YSwgTFZhbHVlIHN0cmluZykKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBvdWdodCB0byBiZSBhYmxlIHRvIHVzZSBjb21wdXRlZCBnb3RvcyBoZXJlLiBX
ZSB3b3VsZCBzYXZlIHRoZSBsYWJlbHMgb2YgdGhlCisgICAgICAgIC8vIGJsb2NrcyB3ZSB3YW50
IHRvIGp1bXAgdG8sIGFuZCB0aGVuIHJlcXVlc3QgdGhlaXIgYWRkcmVzc2VzIGFmdGVyIGNvbXBp
bGF0aW9uIGNvbXBsZXRlcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NDM2OQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJyYW5jaE9mZnNl
dCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KSwKKyAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5n
KTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2so
KS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgICAgICBzdGQ6OnVub3Jk
ZXJlZF9zZXQ8aW50MzJfdD4gYWxyZWFkeUhhbmRsZWQ7IC8vIFRoZXNlIG1heSBiZSBuZWdhdGl2
ZSwgb3IgemVybywgb3IgcHJvYmFibHkgb3RoZXIgc3R1ZmYsIHRvby4gV2UgZG9uJ3Qgd2FudCB0
byBtZXNzIHdpdGggSGFzaFNldCdzIGNvcm5lciBjYXNlcyBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNh
cmUgYWJvdXQgdGhyb3VnaHB1dCBoZXJlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
ZmFjdCB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBieXRlY29kZSdzIHN3aXRjaCB0YWJsZSBtZWFucyB0
aGF0IHRoZQorICAgICAgICAgICAgLy8gZm9sbG93aW5nIERGRyBJUiB0cmFuc2Zvcm1hdGlvbiB3
b3VsZCBiZSBpbnZhbGlkLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE9yaWdpbmFs
IGNvZGU6CisgICAgICAgICAgICAvLyAgICAgc3dpdGNoICh2KSB7CisgICAgICAgICAgICAvLyAg
ICAgY2FzZSAiZm9vIjoKKyAgICAgICAgICAgIC8vICAgICBjYXNlICJiYXIiOgorICAgICAgICAg
ICAgLy8gICAgICAgICB0aGluZ3MoKTsKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLyAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5l
dyBjb2RlOgorICAgICAgICAgICAgLy8gICAgIHN3aXRjaCAodikgeworICAgICAgICAgICAgLy8g
ICAgIGNhc2UgImZvbyI6CisgICAgICAgICAgICAvLyAgICAgICAgIGluc3RydW1lbnRGb28oKTsK
KyAgICAgICAgICAgIC8vICAgICAgICAgZ290byBfdGhpbmdzOworICAgICAgICAgICAgLy8gICAg
IGNhc2UgImJhciI6CisgICAgICAgICAgICAvLyAgICAgICAgIGluc3RydW1lbnRCYXIoKTsKKyAg
ICAgICAgICAgIC8vICAgICBfdGhpbmdzOgorICAgICAgICAgICAgLy8gICAgICAgICB0aGluZ3Mo
KTsKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyAgICAg
fQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEx1Y2tpbHksIHdlIGRvbid0IGN1cnJl
bnRseSBkbyBhbnkgc3VjaCB0cmFuc2Zvcm1hdGlvbi4gQnV0IGl0J3Mga2luZCBvZiBzaWxseSB0
aGF0CisgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGlzc3VlLgorICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDYzNQorICAgICAgICAgICAg
CisgICAgICAgICAgICBERkc6OlN3aXRjaENhc2UgbXlDYXNlID0gZGF0YS0+Y2FzZXNbaV07Cisg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBp
dGVyID0KKyAgICAgICAgICAgICAgICB0YWJsZS5vZmZzZXRUYWJsZS5maW5kKG15Q2FzZS52YWx1
ZS5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IGl0ZXIgIT0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWFscmVhZHlIYW5kbGVkLmluc2VydChpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQp
LnNlY29uZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZXMu
YXBwZW5kKFN3aXRjaENhc2UoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihpdGVy
LT52YWx1ZS5icmFuY2hPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG15Q2FzZS50
YXJnZXQuYmxvY2spLCBXZWlnaHQobXlDYXNlLnRhcmdldC5jb3VudCkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBi
cmFuY2hPZmZzZXQsIGNhc2VzLCBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayksCisg
ICAgICAgICAgICBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291bnQpKTsKKyAgICB9CisgICAg
CisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3IgYXQgdGhlIHBvaW50IG9mIGNvZGUgZ2VuZXJhdGlv
biB3aGVyZSB3ZSBrbm93IHdoYXQgdGhlIHJlc3VsdCB0eXBlIGlzLgorICAgIC8vIFlvdSBjYW4g
ZW1pdCB3aGF0ZXZlciBjb2RlIHlvdSBsaWtlIGF0IHRoYXQgcG9pbnQuIEV4cGVjdHMgeW91IHRv
IHRlcm1pbmF0ZSB0aGUgYmFzaWMgYmxvY2suCisgICAgLy8gV2hlbiBidWlsZFR5cGVPZigpIHJl
dHVybnMsIGl0IHdpbGwgaGF2ZSB0ZXJtaW5hdGVkIGFsbCBiYXNpYyBibG9ja3MgdGhhdCBpdCBj
cmVhdGVkLiBTbywgaWYKKyAgICAvLyB5b3UgYXJlbid0IHVzaW5nIHRoaXMgYXMgdGhlIHRlcm1p
bmF0b3Igb2YgYSBoaWdoLWxldmVsIGJsb2NrLCB5b3Ugc2hvdWxkIGNyZWF0ZSB5b3VyIG93bgor
ICAgIC8vIGNvbnRpbmF0aW9uIGFuZCBzZXQgaXQgYXMgdGhlIG5leHRCbG9jayAobV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbikpIGJlZm9yZQorICAgIC8vIGNhbGxpbmcg
dGhpcy4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk15IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAvLyBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51
YXRpb24pOworICAgIC8vIGJ1aWxkVHlwZU9mKAorICAgIC8vICAgICBjaGlsZCwgdmFsdWUsCisg
ICAgLy8gICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7CisgICAgLy8gICAgICAgICAgZG8gdGhp
bmdzOworICAgIC8vICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAvLyAg
ICAgfSk7CisgICAgLy8gbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGJ1aWxkVHlwZU9mKEVkZ2Ug
Y2hpbGQsIExWYWx1ZSB2YWx1ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICAvLyBJbXBsZW1l
bnRzIHRoZSBmb2xsb3dpbmcgYnJhbmNoaW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gaWYgKGlzIGNlbGwpIHsKKyAgICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAg
ICAgICAgLy8gICAgICAgICBpZiAoaXMgZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24n
dCBoYXZlIGNhbGwgdHJhcCBhbmQgZG9lc24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgewor
ICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAg
ICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsK
KyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2Ug
eworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAg
ICAgICAgLy8gfSBlbHNlIGlmIChpcyBudW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBu
dW1iZXIKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICBy
ZXR1cm4gb2JqZWN0CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIGJvb2xlYW4KKyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgIHJldHVybiB1bmRlZmluZWQKKyAgICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygb2JqZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIGZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgZnVu
Y3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgcmVhbGx5T2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYnVpbGRUeXBlT2YgcmVhbGx5IG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc2xvdyBwYXRo
IikpOworICAgICAgICBMQmFzaWNCbG9jayB1bnJlYWNoYWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiYnVpbGRUeXBlT2YgdW5yZWFjaGFibGUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dE9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBvYmpl
Y3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc3RyaW5nIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHN5bWJvbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN5bWJv
bCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbnVtYmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgbnVt
YmVyIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdE51bWJlckNhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBudW1iZXIgY2FzZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgbm90TnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlw
ZU9mIG5vdCBudWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvb2xlYW5DYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBib29sZWFuIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIHVuZGVmaW5lZCBjYXNlIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJh
bmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1
bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG9iamVjdENhc2UpOworICAgICAgICBtX291
dC5icmFuY2goaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKG9iamVj
dENhc2UpLCB1bnN1cmUobm90T2JqZWN0Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob2JqZWN0Q2FzZSwgZnVuY3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiBTcGVj
T2JqZWN0KSwKKyAgICAgICAgICAgIHVuc3VyZShmdW5jdGlvbkNhc2UpLCB1bnN1cmUobm90RnVu
Y3Rpb25DYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhmdW5jdGlvbkNh
c2UsIG5vdEZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6RnVuY3Rp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBy
ZWFsbHlPYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNF
eG90aWNGb3JUeXBlb2YodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgKFNwZWNPYmplY3QgLSBT
cGVjRnVuY3Rpb24pKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkocmVh
bGx5T2JqZWN0Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVhbGx5
T2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVj
dCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFi
bGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNU
eXBlb2ZUeXBlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgfSwgdmFsdWUpOworICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMz4gY2FzZXM7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0
LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKSks
IHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQu
Y29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpKSwgcmVh
bGx5T2JqZWN0Q2FzZSkpOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5j
b25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKSksIGZ1
bmN0aW9uQ2FzZSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihtX291dC5jYXN0
VG9JbnQzMihyZXN1bHQpLCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsKKyAg
ICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdE9iamVjdENhc2UsIHN0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY0NlbGwg
LSBTcGVjT2JqZWN0KSksCisgICAgICAgICAgICB1bnN1cmUoc3RyaW5nQ2FzZSksIHVuc3VyZShz
eW1ib2xDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNl
LCBzeW1ib2xDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3ltYm9sQ2FzZSwgbm90Q2VsbENhc2UpOwor
ICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN5bWJvbCk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgbnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH5T
cGVjQ2VsbCksCisgICAgICAgICAgICB1bnN1cmUobnVtYmVyQ2FzZSksIHVuc3VyZShub3ROdW1i
ZXJDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhudW1iZXJDYXNlLCBu
b3ROdW1iZXJDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgbm90TnVsbENhc2Up
OworICAgICAgICBMVmFsdWUgaXNOdWxsOworICAgICAgICBpZiAocHJvdmVuVHlwZShjaGlsZCkg
JiBTcGVjT3RoZXIpCisgICAgICAgICAgICBpc051bGwgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNO
dWxsID0gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBtX291dC5icmFuY2goaXNOdWxsLCB1
bnN1cmUocmVhbGx5T2JqZWN0Q2FzZSksIHVuc3VyZShub3ROdWxsQ2FzZSkpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90TnVsbENhc2UsIGJvb2xlYW5DYXNlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBl
KGNoaWxkKSAmIH4oU3BlY0NlbGwgfCBTcGVjRnVsbE51bWJlcikpLAorICAgICAgICAgICAgdW5z
dXJlKGJvb2xlYW5DYXNlKSwgdW5zdXJlKHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAg
ZnVuY3RvcihUeXBlb2ZUeXBlOjpCb29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHVuZGVmaW5lZENhc2UsIGxhc3ROZXh0KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZU
eXBlOjpVbmRlZmluZWQpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZG91YmxlVG9JbnQzMihM
VmFsdWUgZG91YmxlVmFsdWUsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoLCBib29sIGlzU2lnbmVk
ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGdyZWF0RW5vdWdoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIGdyZWF0RW5vdWdoIikpOworICAgICAgICBM
QmFzaWNCbG9jayB3aXRoaW5SYW5nZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9J
bnQzMiB3aXRoaW5SYW5nZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50MzIgc2xvd1BhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9J
bnQzMiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9t
QmxvY2ssIDI+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoZG91YmxlVmFsdWUsIG1fb3V0
LmNvbnN0RG91YmxlKGxvdykpLAorICAgICAgICAgICAgdW5zdXJlKGdyZWF0RW5vdWdoKSwgdW5z
dXJlKHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGdyZWF0RW5vdWdoLCB3aXRoaW5SYW5nZSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChkb3VibGVW
YWx1ZSwgbV9vdXQuY29uc3REb3VibGUoaGlnaCkpLAorICAgICAgICAgICAgdW5zdXJlKHdpdGhp
blJhbmdlKSwgdW5zdXJlKHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyh3aXRoaW5SYW5nZSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdDsK
KyAgICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICAgICAgZmFzdFJlc3VsdCA9IG1fb3V0LmRv
dWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFzdFJl
c3VsdCA9IG1fb3V0LmRvdWJsZVRvVUludChkb3VibGVWYWx1ZSk7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQu
Y2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKHRvSW50MzIpLCBkb3VibGVWYWx1ZSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUg
ZG91YmxlVG9JbnQzMihMVmFsdWUgZG91YmxlVmFsdWUpCisgICAgeworICAgICAgICBpZiAoT3V0
cHV0OjpoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkpCisgICAgICAgICAgICByZXR1cm4gc2Vuc2li
bGVEb3VibGVUb0ludDMyKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBs
aW1pdCA9IHBvdygyLCAzMSkgLSAxOworICAgICAgICByZXR1cm4gZG91YmxlVG9JbnQzMihkb3Vi
bGVWYWx1ZSwgLWxpbWl0LCBsaW1pdCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzZW5zaWJs
ZURvdWJsZVRvSW50MzIoTFZhbHVlIGRvdWJsZVZhbHVlKQorICAgIHsKKyAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNlbnNpYmxlIGRvdWJsZVRv
SW50MzIgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoInNlbnNpYmxlIGRvdWJsZVRvSW50MzIgY29udGludWF0aW9u
IikpOworCisgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5kb3VibGVUb0lu
dChkb3VibGVWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291
dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQuZXF1YWwoZmFzdFJlc3VsdFZhbHVlLCBtX291dC5jb25zdEludDMyKDB4ODAw
MDAwMDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5p
bnQzMiwgbV9vdXQub3BlcmF0aW9uKHRvSW50MzIpLCBkb3VibGVWYWx1ZSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291
dC5pbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyBhIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYSBjb2RlIGdlbmVyYXRvciB0aGF0IGZpbGxzIGlu
IGEgZ2FwIGluIHRoZSBjb2RlIHVzaW5nIG91cgorICAgIC8vIG93biBNYWNyb0Fzc2VtYmxlci4g
VGhpcyBpcyB1c2VmdWwgZm9yIHNsb3cgcGF0aHMgdGhhdCBpbnZvbHZlIGEgbG90IG9mIGNvZGUg
YW5kIHdlIGRvbid0IHdhbnQKKyAgICAvLyB0byBwYXkgdGhlIHByaWNlIG9mIExMVk0gb3B0aW1p
emluZyBpdC4gQSBsYXp5IHNsb3cgcGF0aCB3aWxsIG9ubHkgYmUgZ2VuZXJhdGVkIGlmIGl0IGFj
dHVhbGx5CisgICAgLy8gZXhlY3V0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBhIGxhenkgc2xvdyBw
YXRoIGFsd2F5cyBpbmN1cnMgdGhlIGNvc3Qgb2YgdHdvIGFkZGl0aW9uYWwganVtcHMuCisgICAg
Ly8gQWxzbywgdGhlIGxhenkgc2xvdyBwYXRoJ3MgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBp
cyBzbGF2ZWQgdG8gd2hhdGV2ZXIgTExWTSBkaWQsIHNvIHlvdQorICAgIC8vIGhhdmUgdG8gdXNl
IGEgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHRvIHRyeSB0byB1c2Ugc29tZSB1bnVzZWQgcmVn
aXN0ZXJzIGFuZCB5b3UgbWF5IGhhdmUKKyAgICAvLyB0byBzcGlsbCB0byB0b3Agb2Ygc3RhY2sg
aWYgdGhlcmUgYXJlbid0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlLgorICAgIC8vCisgICAg
Ly8gTGF6eSBzbG93IHBhdGhzIGludm9sdmUgdGhyZWUgZGlmZmVyZW50IHN0YWdlcyBvZiBleGVj
dXRpb24uIEVhY2ggc3RhZ2UgaGFzIHVuaXF1ZQorICAgIC8vIGNhcGFiaWxpdGllcyBhbmQga25v
d2xlZGdlLiBUaGUgc3RhZ2VzIGFyZToKKyAgICAvLworICAgIC8vIDEpIERGRy0+TExWTSBsb3dl
cmluZywgaS5lLiBjb2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0aGUg
bGFzdCB0aW1lIHlvdSB3aWxsCisgICAgLy8gICAgaGF2ZSBhY2Nlc3MgdG8gTFZhbHVlcy4gSWYg
dGhlcmUgaXMgYW4gTFZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgZmVkIGFzIGlucHV0IHRvIGEgbGF6
eSBzbG93CisgICAgLy8gICAgcGF0aCwgdGhlbiB5b3UgbXVzdCBwYXNzIGl0IGFzIGFuIGFyZ3Vt
ZW50IGhlcmUgKGFzIG9uZSBvZiB0aGUgdmFyYXJncyBhcmd1bWVudHMgYWZ0ZXIgdGhlCisgICAg
Ly8gICAgZnVuY3RvcikuIEJ1dCwgbG93ZXJpbmcgZG9lc24ndCBrbm93IHdoaWNoIHJlZ2lzdGVy
cyB3aWxsIGJlIHVzZWQgZm9yIHRob3NlIExWYWx1ZXMuIEhlbmNlCisgICAgLy8gICAgeW91IHBh
c3MgYSBsYW1iZGEgdG8gbGF6eVNsb3dQYXRoKCkgYW5kIHRoYXQgbGFtYmRhIHdpbGwgcnVuIGR1
cmluZyBzdGFnZSAoMik6CisgICAgLy8KKyAgICAvLyAyKSBGVExDb21waWxlLmNwcCdzIGZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcy4gVGhpcyBjb2RlIGlzIHRoZSBvbmx5IHN0YWdlIGF0IHdo
aWNoIHdlIGtub3cKKyAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50cyBwYXNzZWQg
dG8gdGhpcyBtZXRob2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgTExWTQorICAgIC8v
ICAgIHNlbGVjdGVkIGZvciB0aG9zZSBhcmd1bWVudHMuIFlvdSBkb24ndCBhY3R1YWxseSB3YW50
IHRvIGdlbmVyYXRlIGFueSBjb2RlIGhlcmUsIHNpbmNlIHRoZW4KKyAgICAvLyAgICB0aGUgc2xv
dyBwYXRoIHdvdWxkbid0IGFjdHVhbGx5IGJlIGxhemlseSBnZW5lcmF0ZWQuIEluc3RlYWQsIHlv
dSB3YW50IHRvIHNhdmUgdGhlCisgICAgLy8gICAgcmVnaXN0ZXJzIGJlaW5nIHVzZWQgZm9yIHRo
ZSBhcmd1bWVudHMgYW5kIGRlZmVyIGNvZGUgZ2VuZXJhdGlvbiB0byBzdGFnZSAoMykgYnkgY3Jl
YXRpbmcKKyAgICAvLyAgICBhbmQgcmV0dXJuaW5nIGEgTGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I6
CisgICAgLy8KKyAgICAvLyAzKSBMYXp5U2xvd1BhdGgncyBnZW5lcmF0ZSgpIG1ldGhvZC4gVGhp
cyBjb2RlIHJ1bnMgaW4gcmVzcG9uc2UgdG8gdGhlIGxhenkgc2xvdyBwYXRoCisgICAgLy8gICAg
ZXhlY3V0aW5nIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgd2lsbCBjYWxsIHRoZSBnZW5lcmF0b3Ig
eW91IGNyZWF0ZWQgaW4gc3RhZ2UgKDIpLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGVhY2gg
dGltZSB5b3UgaW52b2tlIHN0YWdlICgxKSwgc3RhZ2UgKDIpIG1heSBiZSBpbnZva2VkIHplcm8s
IG9uZSwgb3IgbWFueSB0aW1lcy4KKyAgICAvLyBTdGFnZSAoMikgd2lsbCB1c3VhbGx5IGJlIGlu
dm9rZWQgb25jZSBmb3Igc3RhZ2UgKDEpLiBCdXQsIExMVk0gbWF5IGtpbGwgdGhlIGNvZGUsIGlu
IHdoaWNoCisgICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3QgcnVuLiBMTFZNIG1heSBkdXBsaWNh
dGUgdGhlIGNvZGUgKGZvciBleGFtcGxlIHZpYSBqdW1wIHRocmVhZGluZyksCisgICAgLy8gbGVh
ZGluZyB0byBtYW55IGNhbGxzIHRvIHlvdXIgc3RhZ2UgKDIpIGxhbWJkYS4gU3RhZ2UgKDMpIG1h
eSBiZSBjYWxsZWQgemVybyBvciBvbmNlIGZvciBlYWNoCisgICAgLy8gc3RhZ2UgKDIpLiBJdCB3
aWxsIGJlIGNhbGxlZCB6ZXJvIHRpbWVzIGlmIHRoZSBzbG93IHBhdGggbmV2ZXIgcnVucy4gVGhp
cyBpcyB3aGF0IHlvdSBob3BlIGZvcgorICAgIC8vIHdoZW5ldmVyIHlvdSB1c2UgdGhlIGxhenlT
bG93UGF0aCgpIG1lY2hhbmlzbS4KKyAgICAvLworICAgIC8vIEEgdHlwaWNhbCB1c2Ugb2YgbGF6
eVNsb3dQYXRoKCkgd2lsbCBsb29rIGxpa2UgdGhlIGV4YW1wbGUgYmVsb3csIHdoaWNoIGp1c3Qg
Y3JlYXRlcyBhIHNsb3cKKyAgICAvLyBwYXRoIHRoYXQgYWRkcyBzb21lIHZhbHVlIHRvIHRoZSBp
bnB1dCBhbmQgcmV0dXJucyBpdC4KKyAgICAvLworICAgIC8vIC8vIFN0YWdlICgxKSBpcyBoZXJl
LiBUaGlzIGlzIHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91dCB3aGljaCBMVmFsdWVzIHRv
IHVzZSBhcyBpbnB1dHMuCisgICAgLy8gLy8gTm90aWNlIGhvdyB3ZSBwYXNzICJpbnB1dCIgYXMg
YW4gYXJndW1lbnQgdG8gbGF6eVNsb3dQYXRoKCkuCisgICAgLy8gTFZhbHVlIGlucHV0ID0gLi4u
OworICAgIC8vIGludCBhZGRlbmQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlT
bG93UGF0aCgKKyAgICAvLyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAg
Ly8gU3RhZ2UgKDIpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0IGNoYW5jZSB0byBmaWd1cmUg
b3V0IHdoaWNoIHJlZ2lzdGVycyBhcmUgdXNlZAorICAgIC8vICAgICAgICAgLy8gZm9yIHdoaWNo
IHZhbHVlcy4gTG9jYXRpb24gemVybyBpcyBhbHdheXMgdGhlIHJldHVybiB2YWx1ZS4gWW91IGNh
biBpZ25vcmUgaXQgaWYKKyAgICAvLyAgICAgICAgIC8vIHlvdSBkb24ndCB3YW50IHRvIHJldHVy
biBhbnl0aGluZy4gTG9jYXRpb24gMSBpcyB0aGUgcmVnaXN0ZXIgZm9yIHRoZSBmaXJzdAorICAg
IC8vICAgICAgICAgLy8gYXJndW1lbnQgdG8gdGhlIGxhenlTbG93UGF0aCgpLCBpLmUuICJpbnB1
dCIuIE5vdGUgdGhhdCB0aGUgTG9jYXRpb24gb2JqZWN0IGNvdWxkCisgICAgLy8gICAgICAgICAv
LyBhbHNvIGhvbGQgYW4gRlBSLCBpZiB5b3UgYXJlIHBhc3NpbmcgYSBkb3VibGUuCisgICAgLy8g
ICAgICAgICBHUFJSZWcgb3V0cHV0R1BSID0gbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAg
IC8vICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwor
ICAgIC8vICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAorICAg
IC8vICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgLy8gICAgICAgICAgICAgICAgIC8vIFN0YWdl
ICgzKSBpcyBoZXJlLiBUaGlzIGlzIHdoZW4geW91IGdlbmVyYXRlIGNvZGUuIFlvdSBoYXZlIGFj
Y2VzcyB0byB0aGUKKyAgICAvLyAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHlvdSBjb2xs
ZWN0ZWQgaW4gc3RhZ2UgKDIpIGJlY2F1c2UgdGhpcyBsYW1iZGEgY2xvc2VzIG92ZXIgdGhvc2UK
KyAgICAvLyAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGVzIChvdXRwdXRHUFIgYW5kIGlucHV0
R1BSKS4gWW91IGFsc28gaGF2ZSBhY2Nlc3MgdG8gd2hhdGV2ZXIgZXh0cmEKKyAgICAvLyAgICAg
ICAgICAgICAgICAgLy8gZGF0YSB5b3UgY29sbGVjdGVkIGluIHN0YWdlICgxKSwgc3VjaCBhcyB0
aGUgYWRkZW5kIGluIHRoaXMgY2FzZS4KKyAgICAvLyAgICAgICAgICAgICAgICAgaml0LmFkZDMy
KFRydXN0ZWRJbW0zMihhZGRlbmQpLCBpbnB1dEdQUiwgb3V0cHV0R1BSKTsKKyAgICAvLyAgICAg
ICAgICAgICAgICAgLy8gWW91IGhhdmUgdG8gZW5kIGJ5IGp1bXBpbmcgdG8gZG9uZS4gVGhlcmUg
aXMgbm90aGluZyB0byBmYWxsIHRocm91Z2ggdG8uCisgICAgLy8gICAgICAgICAgICAgICAgIC8v
IFlvdSBjYW4gYWxzbyBqdW1wIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciAoc2VlIExhenlTbG93
UGF0aC5oIGZvciBtb3JlCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIGluZm8pLiBOb3RlIHRo
YXQgY3VycmVudGx5IHlvdSBjYW5ub3QgT1NSIGV4aXQuCisgICAgLy8gICAgICAgICAgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworICAgIC8vICAgICAgICAgICAg
IH0pOworICAgIC8vICAgICB9LAorICAgIC8vICAgICBpbnB1dCk7CisgICAgLy8KKyAgICAvLyBZ
b3UgY2FuIGJhc2ljYWxseSBwYXNzIGFzIG1hbnkgaW5wdXRzIGFzIHlvdSBsaWtlLCBlaXRoZXIg
dXNpbmcgdGhpcyB2YXJhcmdzIGZvcm0sIG9yIGJ5CisgICAgLy8gcGFzc2luZyBhIFZlY3RvciBv
ZiBMVmFsdWVzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHlvdXIgc2xvdyBwYXRoIGlz
IG9ubHkgZG9pbmcgYSBjYWxsLCB5b3UgY2FuIHVzZSB0aGUgY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoKQorICAgIC8vIGhlbHBlci4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMVmFsdWUg
aW5wdXQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlTbG93UGF0aCgKKyAgICAv
LyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgIC8vICAgICAgICAgICAgIG9wZXJhdGlvbkRvVGhpbmdzLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAg
Ly8gICAgIH0sIGlucHV0KTsKKyAgICAvLworICAgIC8vIEZpbmFsbHksIG5vdGUgdGhhdCBhbGwg
b2YgdGhlIGxhbWJkYXMgLSBib3RoIHRoZSBzdGFnZSAoMikgbGFtYmRhIGFuZCB0aGUgc3RhZ2Ug
KDMpIGxhbWJkYSAtCisgICAgLy8gcnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZWQg
dGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVyZW5jZQorICAg
IC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorICAgIExW
YWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3Is
IFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAg
ICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9vdXQucGF0Y2hwb2ludChC
Mzo6SW50NjQpOworICAgICAgICBmb3IgKExWYWx1ZSBhcmcgOiB1c2VyQXJndW1lbnRzKQorICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIEIzOjpWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKSk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMocmVzdWx0KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBTdGF0ZSogc3Rh
dGUgPSAmbV9mdGxTdGF0ZTsKKworICAgICAgICByZXN1bHQtPnNldEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlv
bnM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBCMzo6VmFsdWVSZXAmIHJlcCA6IHBhcmFt
cykKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yVmFs
dWVSZXAocmVwKSk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IGdlbmVyYXRvciA9IGZ1bmN0b3IobG9jYXRpb25zKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8RXhjZXB0aW9uVGFyZ2V0PiBleGNlcHRpb25UYXJnZXQgPQorICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFt
cyk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQXMgcGFydCBvZiBoYW5kbGluZyBleGNl
cHRpb25zLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIE9TUkV4aXQgaGVyZS4KKyAgICAg
ICAgICAgICAgICAvLyBEb2luZyBzbyBzaG91bGQgYXV0b21hZ2ljYWxseSByZWdpc3RlciBsYXRl
IHBhdGhzIHRoYXQgZW1pdCBleGl0IHRodW5rcy4KKworICAgICAgICAgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVt
cC5tX2p1bXAubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGUtPmppdENvZGUtPmxhenlTbG93UGF0aHMuc2l6ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKG51bGxwdHIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0
VG91Y2hpbmdSZWdpc3RlcnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0b3JKdW1wID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNvIGxvbmcgYXMgd2UncmUgaGVyZSwgd2UgZG9uJ3Qg
cmVhbGx5IGtub3cgaWYgb3VyIGxhdGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cnVucyBiZWZvcmUgb3IgYWZ0ZXIgYW55IG90aGVyIGxhdGUgcGF0aHMgdGhhdCB3ZSBtaWdodCBk
ZXBlbmQgb24sIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBleGNlcHRpb24g
dGh1bmsuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2Rl
ID0gc3RhdGUtPmppdENvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSAmc3Rh
dGUtPmdyYXBoLm1fdm07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ySnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25KdW1wIGxpbmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1w
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHBhdGNoYWJsZUp1bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+Y29t
bW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgob3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xvd1BhdGggPQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1BhdGg+KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFBhdGNoYWJsZUp1bXAsIGxp
bmtlZERvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsU2l0ZUluZGV4LCBnZW5lcmF0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdID0gV1RGTW92ZShsYXp5
U2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZSgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRp
b24pCisgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0KGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIGZhaWxDb25kaXRpb24sIG1fb3JpZ2luKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXJt
aW5hdGUoRXhpdEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZShraW5kLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgZGlkQWxyZWFkeVRl
cm1pbmF0ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpZEFscmVhZHlUZXJtaW5hdGUoKQor
ICAgIHsKKyAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB0eXBlQ2hlY2soCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdl
IGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBM
VmFsdWUgZmFpbENvbmRpdGlvbiwgRXhpdEtpbmQgZXhpdEtpbmQgPSBCYWRUeXBlKQorICAgIHsK
KyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uLCBFeGl0S2luZCBleGl0S2luZCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhy
b3VnaCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNo
ZWNrKGhpZ2hWYWx1ZS51c2VLaW5kKCkpKTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdChleGl0S2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24sIG1fb3JpZ2luKTsK
KyAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3Rh
bnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXJt
aW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlpl
cm87CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMih2
YWx1ZS5hc0ludDMyKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAg
ICAgICAgCisgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gc3Ry
aWN0SW50NTJUb0ludDMyKGVkZ2UsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2ludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRnZSwg
aW50NTJUb1N0cmljdEludDUyKHZhbHVlLnZhbHVlKCkpKTsKKyAgICAgICAgCisgICAgICAgIHZh
bHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVzdWx0ID0gdmFsdWUudmFs
dWUoKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFs
dWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJbnQzMiwgaXNOb3RJbnQzMihib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1
bHQpOworICAgICAgICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNJbnQzMikpOworICAgICAgICB0
ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwor
ICAgIH0KKyAgICAKKyAgICBlbnVtIEludDUyS2luZCB7IFN0cmljdEludDUyLCBJbnQ1MiB9Owor
ICAgIExWYWx1ZSBsb3dJbnQ1MihFZGdlIGVkZ2UsIEludDUyS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVkZ2UudXNlS2luZCgpID09IEludDUy
UmVwVXNlKTsKKyAgICAgICAgCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWU7CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyaWN0SW50NTJUb0ludDUyKHZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1
MjoKKyAgICAgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1f
aW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50NTJUb1N0cmljdEludDUyKHZhbHVlLnZh
bHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXByb3ZlblR5cGUoZWRnZSkpOworICAgICAgICB0ZXJtaW5h
dGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuaW50NjRaZXJvOworICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIEludDUyKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0
cmljdEludDUyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb3dJbnQ1MihlZGdl
LCBTdHJpY3RJbnQ1Mik7CisgICAgfQorICAgIAorICAgIGJvb2wgYmV0dGVyVXNlU3RyaWN0SW50
NTIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNWYWxpZChtX2ludDUyVmFs
dWVzLmdldChub2RlKSk7CisgICAgfQorICAgIGJvb2wgYmV0dGVyVXNlU3RyaWN0SW50NTIoRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmljdEludDUyKGVkZ2Uu
bm9kZSgpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnQ1MktpbmQg
YmVzdEludDUyS2luZChUIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYmV0dGVyVXNlU3Ry
aWN0SW50NTIobm9kZSkgPyBTdHJpY3RJbnQ1MiA6IEludDUyOworICAgIH0KKyAgICBJbnQ1Mktp
bmQgb3Bwb3NpdGUoSW50NTJLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpY3RJbnQ1MjsK
KyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBJbnQ1MjsKKyAg
ICAgICAgfQorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgIHJldHVybiBJbnQ1MjsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1do
aWNoZXZlckludDUyKEVkZ2UgZWRnZSwgSW50NTJLaW5kJiBraW5kKQorICAgIHsKKyAgICAgICAg
a2luZCA9IGJlc3RJbnQ1MktpbmQoZWRnZSk7CisgICAgICAgIHJldHVybiBsb3dJbnQ1MihlZGdl
LCBraW5kKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd0NlbGwoRWRnZSBlZGdlLCBPcGVy
YW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisg
ICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgREZHOjppc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKHZhbHVlLmFzQ2VsbCgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIExWYWx1ZSB1bmNoZWNrZWRWYWx1ZSA9IHZhbHVlLnZhbHVlKCk7Cisg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
dW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkVmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRn
ZSkgJiBTcGVjQ2VsbCkpOworICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAg
ICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd09i
amVjdChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9k
ZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1v
ZGUpOworICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0cmluZyhFZGdlIGVkZ2Us
IE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlv
bikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ0lkZW50
VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1v
ZGUpOworICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0cmluZ0lkZW50KEVkZ2Ug
ZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdJZGVudFVzZSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93U3RyaW5nKGVkZ2UsIG1vZGUp
OworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hl
YXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSwg
c3RyaW5nLCBzdHJpbmdJbXBsKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0ltcGw7CisgICAgfQor
CisgICAgTFZhbHVlIGxvd1N5bWJvbChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2Vs
bChlZGdlLCBtb2RlKTsKKyAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZhbHVlIGxvd05vbk51bGxPYmpl
Y3QoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVz
ZSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKKyAgICAgICAgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Qm9vbGVhbihFZGdl
IGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBLbm93bkJvb2xlYW5Vc2UpOworICAgICAgICAKKyAgICAgICAgaWYg
KGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdl
LT5hc0pTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNCb29sZWFuKCkpIHsKKyAg
ICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQuY29uc3RCb29sKHZhbHVlLmFzQm9vbGVhbigpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOworICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuYm94
ZWRSZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQp
KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3Vs
dCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNCb29sZWFuKSk7
CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5i
b29sZWFuRmFsc2U7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dEb3VibGUoRWRnZSBlZGdl
KQorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzRG91YmxlKGVk
Z2UudXNlS2luZCgpKSk7CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVl
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhcHJvdmVuVHlwZShlZGdlKSk7CisgICAgICAgIHRlcm1p
bmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5kb3VibGVaZXJvOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgbG93SlNWYWx1ZShFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxh
dGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICFpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOworICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgIT0gSW50NTJSZXBV
c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoZWRnZS0+YXNKU1Zh
bHVlKCkpKTsKKworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBt
X2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVlKCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlID0g
bV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odmFsdWUudmFs
dWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlZhbHVlIG5vdCBkZWZpbmVkIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93U3RvcmFnZShFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9zdG9yYWdlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzdHJpY3RJ
bnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQuY2FzdFRvSW50MzIodmFsdWUpOworICAgICAgICBGVExfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIG5vVmFsdWUoKSwgZWRnZSwgU3BlY0ludDMyLAorICAgICAgICAg
ICAgbV9vdXQubm90RXF1YWwobV9vdXQuc2lnbkV4dDMyVG82NChyZXN1bHQpLCB2YWx1ZSkpOwor
ICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHN0cmljdEludDUyVG9Eb3VibGUoTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmludFRvRG91YmxlKHZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgTFZhbHVlIHN0cmljdEludDUyVG9KU1ZhbHVlKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzSW50MzIgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInN0cmljdEludDUyVG9KU1ZhbHVlIGlzSW50MzIgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgaXNEb3VibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmljdEludDUyVG9K
U1ZhbHVlIGlzRG91YmxlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1
bHRzOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBpbnQzMlZhbHVlID0gbV9vdXQuY2Fz
dFRvSW50MzIodmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5lcXVhbChtX291dC5zaWduRXh0MzJUbzY0KGludDMyVmFsdWUpLCB2YWx1ZSksCisgICAgICAg
ICAgICB1bnN1cmUoaXNJbnQzMiksIHVuc3VyZShpc0RvdWJsZSkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0ludDMyLCBpc0RvdWJs
ZSk7CisgICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94SW50
MzIoaW50MzJWYWx1ZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNEb3VibGUsIGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94RG91YmxlKG1f
b3V0LmludFRvRG91YmxlKHZhbHVlKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpOwor
ICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0ludDUyKExWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5zaGwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaW50
NTJUb1N0cmljdEludDUyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291
dC5hU2hyKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQp
KTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzSW50MzIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUg
cHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjSW50MzIpKQorICAgICAgICAgICAgcmV0
dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3ZlT3JFcXVhbChqc1ZhbHVlLCBt
X3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RJbnQzMihMVmFsdWUganNW
YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjSW50MzIpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KGpzVmFs
dWUsIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIExWYWx1ZSB1bmJveEludDMyKExWYWx1
ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNhc3RUb0ludDMyKGpzVmFs
dWUpOworICAgIH0KKyAgICBMVmFsdWUgYm94SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFkZChtX291dC56ZXJvRXh0KHZhbHVlLCBtX291dC5pbnQ2NCks
IG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc0NlbGxPck1pc2Mo
TFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7
CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjQ2Vs
bCB8IFNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVy
biBtX291dC50ZXN0SXNaZXJvNjQoanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9Cisg
ICAgTFZhbHVlIGlzTm90Q2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUsIH4oU3BlY0NlbGwgfCBTcGVjTWlzYykpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoanNWYWx1
ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHVuYm94RG91Ymxl
KExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJpdENhc3QobV9v
dXQuYWRkKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlciksIG1fb3V0LmRvdWJsZVR5cGUpOworICAg
IH0KKyAgICBMVmFsdWUgYm94RG91YmxlKExWYWx1ZSBkb3VibGVWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX291dC5zdWIobV9vdXQuYml0Q2FzdChkb3VibGVWYWx1ZSwgbV9vdXQuaW50
NjQpLCBtX3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUganNWYWx1ZVRv
U3RyaWN0SW50NTIoRWRnZSBlZGdlLCBMVmFsdWUgYm94ZWRWYWx1ZSkKKyAgICB7CisgICAgICAg
IExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0lu
dDUyIHVuYm94aW5nIGludCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1MiB1bmJveGluZyBkb3VibGUg
Y2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1MiB1bmJveGluZyBjb250aW51YXRpb24iKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGlzTm90SW50MzI7CisgICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQorICAgICAgICAgICAgaXNO
b3RJbnQzMiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNJbnQzMikpCisgICAgICAgICAgICBpc05v
dEludDMyID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlz
Tm90SW50MzIgPSB0aGlzLT5pc05vdEludDMyKGJveGVkVmFsdWUpOworICAgICAgICBtX291dC5i
cmFuY2goaXNOb3RJbnQzMiwgdW5zdXJlKGRvdWJsZUNhc2UpLCB1bnN1cmUoaW50Q2FzZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgZG91YmxlQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW50VG9JbnQ1MiA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LnNpZ25F
eHQzMlRvNjQodW5ib3hJbnQzMihib3hlZFZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91Ymxl
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBwb3NzaWJsZVJl
c3VsdCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIpLCBib3hlZFZhbHVlKTsKKyAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1
ZSksIGVkZ2UsIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLAorICAgICAgICAgICAgbV9v
dXQuZXF1YWwocG9zc2libGVSZXN1bHQsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6bm90SW50
NTIpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZG91YmxlVG9JbnQ1
MiA9IG1fb3V0LmFuY2hvcihwb3NzaWJsZVJlc3VsdCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludDY0LCBpbnRUb0ludDUyLCBkb3VibGVUb0ludDUyKTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIGRvdWJsZVRvU3RyaWN0SW50NTIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBMVmFsdWUgcG9zc2libGVSZXN1bHQgPSBtX291dC5jYWxsKAorICAgICAg
ICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0RG91Ymxl
VG9JbnQ1MiksIHZhbHVlKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQo
SW50NTJPdmVyZmxvdywKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3Bl
Y0ludDUyQXNEb3VibGUsCisgICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJlc3VsdCwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBwb3NzaWJsZVJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFsdWUgY29udmVydERvdWJs
ZVRvSW50MzIoTFZhbHVlIHZhbHVlLCBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZVRvSW50KHZhbHVl
KTsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZUNvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQu
aW50VG9Eb3VibGUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlTm90Q29udmVy
dGlibGVUb0ludGVnZXIgPSBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCBp
bnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSk7CisgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxv
dywgRm9ybWF0dGVkVmFsdWUoRGF0YUZvcm1hdERvdWJsZSwgdmFsdWUpLCBtX25vZGUsIHZhbHVl
Tm90Q29udmVydGlibGVUb0ludGVnZXIpOworCisgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0
aXZlWmVybykgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgdmFsdWVJc1plcm8gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkNvbnZlcnREb3VibGVUb0ludDMyIG9uIHplcm8iKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNv
bnZlcnREb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc1plcm8zMihpbnRlZ2VyVmFsdWUpLCB1bnN1cmUodmFsdWVJc1plcm8pLCB1
bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8odmFsdWVJc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIExWYWx1ZSBkb3VibGVCaXRjYXN0VG9JbnQ2NCA9IG1fb3V0LmJpdENhc3QodmFsdWUsIG1f
b3V0LmludDY0KTsKKyAgICAgICAgICAgIExWYWx1ZSBzaWduQml0U2V0ID0gbV9vdXQubGVzc1Ro
YW4oZG91YmxlQml0Y2FzdFRvSW50NjQsIG1fb3V0LmNvbnN0SW50NjQoMCkpOworCisgICAgICAg
ICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBGb3JtYXR0ZWRWYWx1ZShEYXRhRm9ybWF0RG91
YmxlLCB2YWx1ZSksIG1fbm9kZSwgc2lnbkJpdFNldCk7CisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVlOworICAg
IH0KKworICAgIExWYWx1ZSBpc051bWJlcihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBw
cm92ZW47CisgICAgICAgIHJldHVybiBpc05vdENlbGxPck1pc2MoanNWYWx1ZSk7CisgICAgfQor
ICAgIExWYWx1ZSBpc05vdE51bWJlcihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1By
b3ZlblZhbHVlKHR5cGUsIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOworICAgICAgICByZXR1cm4gaXNDZWxsT3JNaXNjKGpzVmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RDZWxsKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJv
dmVuVmFsdWUodHlwZSwgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBpc0NlbGwoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVu
ID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjQ2VsbCkpCisgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOworICAgICAgICByZXR1cm4gbV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFz
ayk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdE1pc2MoTFZhbHVlIHZhbHVlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVl
IHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5hYm92ZSh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc01pc2MoTFZhbHVlIHZhbHVlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3Zl
biA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY01pc2MpKQorICAgICAgICAgICAgcmV0dXJuIHBy
b3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoaXNOb3RNaXNjKHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAg
ICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoCisg
ICAgICAgICAgICBtX291dC5iaXRYb3IoanNWYWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZh
bHNlKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KH4xKSk7CisgICAgfQorICAgIExW
YWx1ZSBpc0Jvb2xlYW4oTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVj
RnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1
ZSh0eXBlLCBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAg
ICByZXR1cm4gbV9vdXQubG9naWNhbE5vdChpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgIH0K
KyAgICBMVmFsdWUgdW5ib3hCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byB1c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IExMVk0ga25vd3Mg
dGhhdCBldmVuIHRoZSBpbnRlZ2VyCisgICAgICAgIC8vIHZhbHVlIGlzIGp1c3QgMCBvciAxLiBC
dXQgZm9yIG5vdyB3ZSBkbyBpdCB0aGUgZHVtYiB3YXkuCisgICAgICAgIHJldHVybiBtX291dC5u
b3RaZXJvNjQobV9vdXQuYml0QW5kKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoMSkpKTsKKyAg
ICB9CisgICAgTFZhbHVlIGJveEJvb2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgIHZhbHVlLCBtX291dC5jb25zdEludDY0
KFZhbHVlVHJ1ZSksIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RPdGhlcihMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlLCB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2
YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+VGFnQml0VW5kZWZpbmVkKSksCisgICAgICAgICAgICBt
X291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgIH0KKyAgICBMVmFsdWUgaXNPdGhlcihM
VmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7Cisg
ICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdEludDY0KH5UYWdC
aXRVbmRlZmluZWQpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc1Byb3ZlblZhbHVlKFNwZWN1bGF0ZWRUeXBlIHBy
b3ZlblR5cGUsIFNwZWN1bGF0ZWRUeXBlIHdhbnRlZFR5cGUpCisgICAgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlICYgfndhbnRlZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJv
b2xlYW5UcnVlOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlICYgd2FudGVkVHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZShFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIGNh
c2UgS25vd25TdHJpbmdVc2U6CisgICAgICAgIGNhc2UgS25vd25QcmltaXRpdmVVc2U6CisgICAg
ICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAg
ICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbE9y
T3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU1hY2hpbmVJbnQoZWRnZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRn
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KGVkZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nSWRl
bnRVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ09i
amVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdChlZGdlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoZWRnZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVO
dW1iZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVy
VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVEb3VibGVSZXBSZWFsKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRG91YmxlUmVwTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJl
cE1hY2hpbmVJbnQoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU5vdFN0cmluZ1ZhcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5vdENlbGxVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxh
dGVPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1pc2NVc2U6
CisgICAgICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
VW5zdXBwb3J0ZWQgc3BlY3VsYXRpb24gdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
c3BlY3VsYXRlKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIGxvd0ludDMyKGVkZ2UpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbG93Q2VsbChl
ZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiU3BlY3VsYXRlIENlbGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291
dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZShpc05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRM
X1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVRvU3RyaWN0SW50NTIoZWRn
ZSwgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIGlzT2JqZWN0KExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJv
dmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAg
ICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihPYmplY3RUeXBlKSk7CisgICAgfQorCisg
ICAgTFZhbHVlIGlzTm90T2JqZWN0KExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
U3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVu
VmFsdWUodHlwZSAmIFNwZWNDZWxsLCB+U3BlY09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4g
cHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coCisgICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihPYmplY3RUeXBlKSk7CisgICAgfQorCisgICAgTFZhbHVl
IGlzTm90U3RyaW5nKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxU
b3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlw
ZSAmIFNwZWNDZWxsLCB+U3BlY1N0cmluZykpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwor
ICAgICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgaXNTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVs
bFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0
eXBlICYgU3BlY0NlbGwsIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICB9CisKKyAgICBMVmFsdWUg
aXNOb3RTeW1ib2woTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBl
ICYgU3BlY0NlbGwsIH5TcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihj
ZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKHZtKCkuc3ltYm9sU3RydWN0dXJlLT5pZCgpKSk7CisgICAgfQorCisgICAgTFZhbHVl
IGlzQXJyYXlUeXBlKExWYWx1ZSBjZWxsLCBBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2Fk
OFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CisgICAgICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVuZXhwZWN0ZWQgb3JpZ2luYWwgYXJyYXkiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwgbV9vdXQuY29uc3RJbnQz
MihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spKSwKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihJc0FycmF5IHwgYXJyYXlNb2RlLnNoYXBlTWFzaygpKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5OjpOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6Ok9yaWdpbmFsTm9uQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQoaW5kZXhpbmdUeXBl
LCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIoSW5kZXhpbmdTaGFw
ZU1hc2spKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihhcnJheU1vZGUu
c2hhcGVNYXNrKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJyYXkgY2xhc3MiKTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQz
MihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpOworICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9U
eXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHR5cGVGb3JUeXBlZEFycmF5
VHlwZShhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKSkpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgaXNGdW5jdGlvbihMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1By
b3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBpc1R5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUp
OworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RGdW5jdGlvbihMVmFsdWUgY2VsbCwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92
ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNGdW5jdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gaXNOb3RUeXBlKGNlbGwsIEpT
RnVuY3Rpb25UeXBlKTsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBMVmFsdWUgaXNFeG90aWNG
b3JUeXBlb2YoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkK
KyAgICB7CisgICAgICAgIGlmICghKHR5cGUgJiBTcGVjT2JqZWN0T3RoZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RO
b25aZXJvMzIoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgaXNUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKHR5cGUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90
VHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9v
dXQubG9naWNhbE5vdChpc1R5cGUoY2VsbCwgdHlwZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LCBpc05v
dE9iamVjdChjZWxsKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxsKGVk
Z2UpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlIGVkZ2Us
IExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjRnVuY3Rpb24sIGlzTm90RnVuY3Rpb24oY2VsbCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBwcmltaXRpdmVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVyIHByaW1pdGl2ZSBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3RoZXIgY29udGludWF0aW9uIikpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSks
IHVuc3VyZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmlt
aXRpdmVDYXNlKTsKKyAgICAgICAgCisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAg
ICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBp
c05vdE9iamVjdCh2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocHJpbWl0aXZlQ2FzZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAg
ICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2Ug
ZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY0ZpbmFsT2JqZWN0LCBpc05vdFR5
cGUoY2VsbCwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlRmluYWxPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlRmluYWxP
YmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQ
RV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTdHJpbmcgfCB+U3BlY0NlbGws
IGlzTm90U3RyaW5nKGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJp
bmcoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UsIGxvd0Nl
bGwoZWRnZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ0lkZW50KEVk
Z2UgZWRnZSwgTFZhbHVlIHN0cmluZywgTFZhbHVlIHN0cmluZ0ltcGwpCisgICAgeworICAgICAg
ICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ0lkZW50
IHwgflNwZWNTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUoKSwgbV9v
dXQuaXNOdWxsKHN0cmluZ0ltcGwpKTsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHN0cmluZyksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOworICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbG93U3RyaW5nSWRlbnQoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVj
dEZvckNlbGwoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmls
dGVyKGVkZ2UsIFNwZWNTdHJpbmdPYmplY3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmlu
Z09iamVjdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBTdHJpbmdP
clN0cmluZ09iamVjdCBub3Qgc3RyaW5nIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIFN0cmluZ09yU3Ry
aW5nT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJ1
Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihsb3dDZWxsKGVkZ2UpLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgp
KSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVj
dEZvclN0cnVjdHVyZUlEKGVkZ2UsIHN0cnVjdHVyZUlEKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlcihl
ZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQor
ICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRnZSwg
bV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoRWRnZSBl
ZGdlLCBMVmFsdWUgc3RydWN0dXJlSUQpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cmlu
Z09iamVjdFN0cnVjdHVyZSA9CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGFic3RyYWN0U3RydWN0dXJlKGVkZ2UpLmlzU3Vic2V0T2YoU3RydWN0
dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBu
b1ZhbHVlKCksIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vh
a1N0cnVjdHVyZUlEKHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjU3ltYm9sIHwgflNw
ZWNDZWxsLCBpc05vdFN5bWJvbChjZWxsKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVT
eW1ib2woRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UsIGxv
d0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChF
ZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LCBpc05vdE9iamVjdChjZWxsKSk7Cisg
ICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDha
ZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNw
ZWNCeXRlY29kZU51bWJlciwgaXNOb3ROdW1iZXIodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERv
IGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxv
dCBvZiBjb250cm9sIGZsb3cuCisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVD
aGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gdW5ib3hEb3VibGUodmFsdWUpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Bl
Y3VsYXRlUmVhbE51bWJlciBpbnQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAgICAg
ICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVy
LAorICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICAvLyBEbyBhbiBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJs
ZSgpIGNhbiBjcmVhdGUgYSBsb3Qgb2YgY29udHJvbCBmbG93LgorICAgICAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoZWRnZSk7CisgICAgICAgIEZU
TF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVj
RG91YmxlUmVhbCwKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQo
dmFsdWUsIHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVw
TWFjaGluZUludChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBkb3VibGVUb1N0cmljdEludDUyKGVkZ2UsIGxvd0RvdWJsZShlZGdlKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBsb3dCb29sZWFuKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdFN0
cmluZ1ZhcihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVl
ZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNTdHJpbmdWYXIpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBpcyBj
ZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBpcyBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUo
aXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdD
YXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSwgdmFsdWUsIG1fb3V0LmxvYWRQdHIo
dmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTm90Q2VsbChFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2so
ZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgdHlwZUNo
ZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICB0eXBlQ2hlY2so
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY01pc2MsIGlzTm90TWlzYyh2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvYWRDZWxsU3RhdGUoTFZhbHVlIGJhc2UpCisgICAg
eworICAgICAgICByZXR1cm4gbV9vdXQubG9hZDhaZXJvRXh0MzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVl
IGJhc2UpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiU3RvcmUgYmFycmllciBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBj
b250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9v
dXQubm90WmVybzMyKGxvYWRDZWxsU3RhdGUoYmFzZSkpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgLy8gV2UgZW1p
dCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywg
dGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAorICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwg
aXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklU
IHJhdGhlciB0aGFuCisgICAgICAgIC8vIHdhc3RpbmcgTExWTSdzIHRpbWUgb3B0aW1pemluZyBp
dC4KKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworCisgICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6
U3BhY2VGb3JDQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24n
dCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCisg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQo
c2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJy
aWVyQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMiwg
d3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJh
cnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaDEsIHNjcmF0Y2gyLCBDQ2FsbEhlbHBl
cnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5k
b25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZWVkVG9GbHVzaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIHBh
cmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VH
UFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYmFz
ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1
bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKHR5cGUsIGZ1bmN0aW9uLCBhcmdzLi4u
KTsKKyAgICAgICAgY2FsbENoZWNrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2FsbFByZWZsaWdodChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOworICAgICAgICBtX291dC5zdG9y
ZTMyKAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
CisgICAgICAgICAgICB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgIH0KKwor
ICAgIHZvaWQgY2FsbFByZWZsaWdodCgpCisgICAgeworICAgICAgICBjYWxsUHJlZmxpZ2h0KGNv
ZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSk7CisgICAgfQorCisgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFRhaWxDYWxsSW5saW5lZENhbGxlcgorICAgICAgICAgICAg
fHwgbV9ub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIKKyAgICAgICAg
ICAgIHx8IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cikgeworICAgICAgICAgICAgLy8gVGhpcyBjYXNlIGFyaXNlcyB3aGVuIHlvdSBoYXZlIGEgc2l0
dWF0aW9uIGxpa2UgdGhpczoKKyAgICAgICAgICAgIC8vIGZvbyBtYWtlcyBhIGNhbGwgdG8gYmFy
LCBiYXIgaXMgaW5saW5lZCBpbiBmb28uIGJhciBtYWtlcyBhIGNhbGwKKyAgICAgICAgICAgIC8v
IHRvIGJheiBhbmQgYmF6IGlzIGlubGluZWQgaW4gYmFyLiBBbmQgdGhlbiBiYXogbWFrZXMgYSB0
YWlsLWNhbGwgdG8gamF6LAorICAgICAgICAgICAgLy8gYW5kIGpheiBpcyBpbmxpbmVkIGluIGJh
ei4gV2Ugd2FudCB0aGUgY2FsbGZyYW1lIGZvciBqYXogdG8gYXBwZWFyIHRvIAorICAgICAgICAg
ICAgLy8gaGF2ZSBjYWxsZXIgYmUgYmFyLgorICAgICAgICAgICAgY29kZU9yaWdpbiA9ICpjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNhbGxDaGVjaygpCisgICAgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlRXhjZXB0aW9u
RnV6eigpKQorICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopLCBtX2NhbGxGcmFtZSk7CisgICAgICAgIAor
ICAgICAgICBMVmFsdWUgZXhjZXB0aW9uID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHZt
KCkuYWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAgICAgICAgTFZhbHVlIGhhZEV4Y2VwdGlvbiA9
IG1fb3V0Lm5vdFplcm82NChleGNlcHRpb24pOworCisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRj
aE9yaWdpbjsKKyAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAg
IGlmIChtX2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKG1fb3JpZ2luLmZv
ckV4aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpKSB7CisgICAgICAgICAgICBi
b29sIGV4aXRPSyA9IHRydWU7CisgICAgICAgICAgICBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9
IHRydWU7CisgICAgICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNoZWNrLCBub1ZhbHVlKCksIG51bGxwdHIsIGhhZEV4Y2VwdGlvbiwKKyAgICAgICAgICAg
ICAgICBtX29yaWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0sp
LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJFeGNlcHRpb24gY2hlY2sgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiwgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9ucyks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4g
cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CisgICAgICAgIEhhbmRsZXJJ
bmZvKiBleGNlcHRpb25IYW5kbGVyOworICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9
IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhp
dCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgIGlmICghd2lsbENh
dGNoRXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGU6OmRlZmF1bHRIYW5kbGUobV9mdGxTdGF0ZSk7CisKKyAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiICAgIFBhdGNocG9pbnQg
ZXhjZXB0aW9uIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAi
XG4iKTsKKyAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAi
LCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBt
X29yaWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0spOworCisg
ICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXRE
ZXNjcmlwdG9yKG5vVmFsdWUoKSwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0IGludG8gdGhlIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyB3aGVyZSB3ZSB3aWxsIGZp
bmQgdGhlIGV4aXQgYXJndW1lbnRzCisgICAgICAgIC8vIHdlIGFyZSBhYm91dCB0byBhcHBlbmQu
IFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgYm90aCB0aGUgY2hpbGRyZW4gd2UndmUgYWxyZWFkeSBh
ZGRlZCwgYW5kCisgICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgb2YgYSByZXN1bHQgdmFs
dWUgaWYgdGhlIHBhdGNocG9pbnQgaXMgbm90IHZvaWQuCisgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHZhbHVlLT5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBW
b2lkKQorICAgICAgICAgICAgb2Zmc2V0Kys7CisKKyAgICAgICAgLy8gVXNlIExhdGVDb2xkQW55
IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFja21hcCBhcmd1bWVudHMgaW50ZXJmZXJlIHdpdGggdGhl
IHBhdGNocG9pbnQncworICAgICAgICAvLyByZXN1bHQgYW5kIHdpdGggYW55IGxhdGUtY2xvYmJl
cmVkIHJlZ2lzdGVycy4KKyAgICAgICAgdmFsdWUtPmFwcGVuZFZlY3RvcldpdGhSZXAoCisgICAg
ICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9wQ2F0Y2hPcmlnaW4s
IG5vVmFsdWUoKSksCisgICAgICAgICAgICBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworCisgICAg
ICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGUoCisgICAgICAgICAg
ICBtX2Z0bFN0YXRlLCBleGl0RGVzY3JpcHRvciwgb3JpZ2luLCBvZmZzZXQsICpleGNlcHRpb25I
YW5kbGVyKTsKKyAgICB9CisKKyAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhERkc6OkJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7Cisg
ICAgfQorCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKAorICAg
ICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVu
ZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCAKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpCisgICAgeworICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0
b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJc
biIpOworICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIs
IGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOworICAgICAgICB9CisKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG9yaWdpbi5leGl0T0spOworICAgICAg
ICAKKyAgICAgICAgaWYgKGRvT1NSRXhpdEZ1enppbmcoKSAmJiAhaXNFeGNlcHRpb25IYW5kbGVy
KSB7CisgICAgICAgICAgICBMVmFsdWUgbnVtYmVyT2ZGdXp6Q2hlY2tzID0gbV9vdXQuYWRkKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSgmZ19udW1iZXJPZk9T
UkV4aXRGdXp6Q2hlY2tzKSksCisgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zdG9yZTMyKG51bWJlck9mRnV6ekNoZWNrcywg
bV9vdXQuYWJzb2x1dGUoJmdfbnVtYmVyT2ZPU1JFeGl0RnV6ekNoZWNrcykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAodW5zaWduZWQgYXRPckFmdGVyID0gT3B0aW9uczo6ZmlyZU9T
UkV4aXRGdXp6QXRPckFmdGVyKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uID0g
bV9vdXQuYml0T3IoCisgICAgICAgICAgICAgICAgICAgIGZhaWxDb25kaXRpb24sCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0
LmNvbnN0SW50MzIoYXRPckFmdGVyKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHVuc2lnbmVkIGF0ID0gT3B0aW9uczo6ZmlyZU9TUkV4aXRGdXp6QXQoKSkgeworICAgICAgICAg
ICAgICAgIGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbENvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobnVtYmVyT2ZG
dXp6Q2hlY2tzLCBtX291dC5jb25zdEludDMyKGF0KSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZhbHNlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJsZXNzU3BlY3VsYXRpb24oCisgICAgICAg
ICAgICBtX291dC5zcGVjdWxhdGUoZmFpbENvbmRpdGlvbiksIGtpbmQsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIG9yaWdpbik7CisgICAgfQorCisgICAgdm9pZCBibGVzc1NwZWN1bGF0aW9uKENoZWNr
VmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGxvd1Zh
bHVlLCBoaWdoVmFsdWUpOworICAgICAgICAKKyAgICAgICAgdmFsdWUtPmFwcGVuZENvbGRBbnlz
KGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQsIGxvd1Zh
bHVlKSk7CisKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHZh
bHVlLT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9TUkV4aXQoCisgICAgICAgICAgICAgICAgICAgICpz
dGF0ZSwga2luZCwgb3JpZ2luLCBqaXQsIHBhcmFtcywgMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBidWlsZEV4aXRBcmd1bWVudHMoCisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdpbiBleGl0T3Jp
Z2luLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2ZF
eGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyA9IDApCisgICAgeworICAgICAgICBTdGFj
a21hcEFyZ3VtZW50TGlzdCByZXN1bHQ7CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cygKKyAg
ICAgICAgICAgIGV4aXREZXNjcmlwdG9yLCBleGl0T3JpZ2luLCByZXN1bHQsIGxvd1ZhbHVlLCBv
ZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdpbiBleGl0T3Jp
Z2luLCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExv
Y2F0aW9ucyA9IDApCisgICAgeworICAgICAgICBpZiAoISFsb3dWYWx1ZSkKKyAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5TWFwID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCk7
CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZUJ5TGl2ZW5lc3MobV9ncmFwaCwgZXhpdE9y
aWdpbik7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbio+IG1hcDsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmZvckVhY2hBdmFp
bGFiaWxpdHkoCisgICAgICAgICAgICBbJl0gKEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5zaG91bGRVc2VOb2RlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmlzUGhhbnRvbUFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLmFk
ZChub2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9CisgICAgICAg
ICAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zLmFkZChu
b2RlLT5vcCgpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZh
aWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAg
IERGR19BU1NFUlQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgKCEoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKSkgfHwgbV9n
cmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0
eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAgICAgICAgICAgIGlmIChleGl0VmFs
dWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCisgICAgICAgICAgICAgICAgZXhpdFZh
bHVlLmFkanVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5t
X3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
IChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVhcCkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7CisgICAgICAgICAgICBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uID0gbWFwLmdldChub2RlKTsKKyAg
ICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChleGl0VmFs
dWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCisgICAgICAgICAgICAgICAgZXhpdFZh
bHVlLmFkanVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+
YWRkKAorICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlwdG9yKCksCisgICAgICAg
ICAgICAgICAgZXhpdFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBFeGl0IHZhbHVlczogIiwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLCAiXG4iKTsKKyAgICAg
ICAgICAgIGlmICghZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1hdGVyaWFsaXphdGlvbnM6IFxu
Iik7CisgICAgICAgICAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bWF0ZXJpYWxpemF0aW9uIDogZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucykKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgIiwgcG9pbnRlckR1bXAobWF0
ZXJpYWxpemF0aW9uKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAorICAgICAgICBTdGFja21h
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkpCisgICAgeworICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1
c2hlZEF0KCk7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGl0
VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFk
LiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUKKyAgICAgICAg
ICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGltZXMga2lsbCB0
aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUgbGl2ZSBpbgorICAgICAgICAgICAgLy8gYnl0ZWNvZGUu
CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisKKyAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBG
bHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFjayhm
bHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJ
bnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0
YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6
OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkludmFsaWQgZmx1
c2ggZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICB9Cisg
ICAgCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIFN0YWNrbWFwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIC8vIE5PVEU6IEluIEZUTC0+QjMsIHdlIGNhbm5vdCBnZW5lcmF0ZSBjb2RlIGhlcmUsIGJl
Y2F1c2UgbV9vdXRwdXQgaXMgcG9zaXRpb25lZCBhZnRlciB0aGUKKyAgICAgICAgLy8gc3RhY2tt
YXAgdmFsdWUuIExpa2UgYWxsIHZhbHVlcywgdGhlIHN0YWNrbWFwIHZhbHVlIGNhbm5vdCB1c2Ug
YSBjaGlsZCB0aGF0IGlzIGRlZmluZWQgYWZ0ZXIKKyAgICAgICAgLy8gaXQuCisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChu
b2RlLT5oYXNSZXN1bHQoKSk7CisKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25z
LiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0
IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAg
IHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6Y29uc3RhbnQobm9kZS0+YXNKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNQaGFudG9tQWxs
b2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjptYXRlcmlh
bGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYXZhaWxhYmxlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgQXZhaWxhYmxlUmVjb3ZlcnkgcmVjb3ZlcnkgPSBtX2F2YWlsYWJsZVJlY292ZXJpZXNbaV07
CisgICAgICAgICAgICBpZiAocmVjb3Zlcnkubm9kZSgpICE9IG5vZGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBFeGl0VmFsdWUgcmVzdWx0ID0gRXhpdFZhbHVlOjpy
ZWNvdmVyeSgKKyAgICAgICAgICAgICAgICByZWNvdmVyeS5vcGNvZGUoKSwgYXJndW1lbnRzLnNp
emUoKSwgYXJndW1lbnRzLnNpemUoKSArIDEsCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkuZm9y
bWF0KCkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNvdmVyeS5sZWZ0KCkpOwor
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNvdmVyeS5yaWdodCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyZWRO
b2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMs
IERhdGFGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdElu
dDUyLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJ
bnQ1MlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0U3RyaWN0SW50
NTIsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5W
YWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVl
LnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2YWx1ZS52YWx1ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAg
ICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFy
Z3VtZW50cywgRGF0YUZvcm1hdERvdWJsZSwgdmFsdWUudmFsdWUoKSk7CisKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Ig
bm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgp
OworICAgIH0KKworICAgIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoU3RhY2ttYXBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgRGF0YUZvcm1hdCBmb3JtYXQsIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEV4aXRWYWx1ZSByZXN1bHQgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudChFeGl0QXJn
dW1lbnQoZm9ybWF0LCBhcmd1bWVudHMuc2l6ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEV4aXRWYWx1
ZSBleGl0VmFsdWVGb3JUYWlsQ2FsbChTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OworICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOworCisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKKyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIHJl
dHVybiBFeGl0VmFsdWU6OmNvbnN0YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBMb3dlcmVk
Tm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVu
dHMsIERhdGFGb3JtYXRKUywgdmFsdWUudmFsdWUoKSk7CisKKyAgICAgICAgdmFsdWUgPSBtX2lu
dDMyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgYm94SW50
MzIodmFsdWUudmFsdWUoKSkpOworCisgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdl
dChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgYm94Qm9vbGVhbih2YWx1ZS52
YWx1ZSgpKSk7CisKKyAgICAgICAgLy8gRG91YmxlcyBhbmQgSW50NTIgaGF2ZSBiZWVuIGNvbnZl
cnRlZCBieSBWYWx1ZVJlcCgpCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRv
Q1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5vZGUpLmRhdGEoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZG9lc0tpbGwoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
aWYgKGVkZ2UuZG9lc05vdEtpbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9p
ZCBhZGRBdmFpbGFibGVSZWNvdmVyeSgKKyAgICAgICAgTm9kZSogbm9kZSwgUmVjb3ZlcnlPcGNv
ZGUgb3Bjb2RlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBEYXRhRm9ybWF0IGZvcm1hdCkK
KyAgICB7CisgICAgICAgIG1fYXZhaWxhYmxlUmVjb3Zlcmllcy5hcHBlbmQoQXZhaWxhYmxlUmVj
b3Zlcnkobm9kZSwgb3Bjb2RlLCBsZWZ0LCByaWdodCwgZm9ybWF0KSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCisgICAgICAgIEVkZ2UgZWRnZSwgUmVjb3Zl
cnlPcGNvZGUgb3Bjb2RlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICB7CisgICAgICAgIGFkZEF2YWlsYWJsZVJlY292ZXJ5KGVkZ2Uubm9kZSgpLCBv
cGNvZGUsIGxlZnQsIHJpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
dDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1
ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAg
fQorICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9pbnQ1MlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9o
aWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJpY3RJbnQ1MihOb2RlKiBub2RlLCBM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cmljdEludDUyVmFsdWVzLnNldChub2Rl
LCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lk
IHNldEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSwgSW50NTJLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAgICAg
ICAgIHNldEludDUyKG5vZGUsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50
NTIobm9kZSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBpbnQ1MiBraW5k
Iik7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFs
dWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9vbGVhbihOb2Rl
KiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAg
IHZvaWQgc2V0U3RvcmFnZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91YmxlKE5vZGUqIG5vZGUsIExWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZG91YmxlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKworICAgIHZvaWQgc2V0SW50MzIo
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIobV9ub2RlLCB2YWx1ZSk7Cisg
ICAgfQorICAgIHZvaWQgc2V0SW50NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0
SW50NTIobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RyaWN0SW50NTIoTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0U3RyaWN0SW50NTIobV9ub2RlLCB2YWx1ZSk7
CisgICAgfQorICAgIHZvaWQgc2V0SW50NTIoTFZhbHVlIHZhbHVlLCBJbnQ1MktpbmQga2luZCkK
KyAgICB7CisgICAgICAgIHNldEludDUyKG1fbm9kZSwgdmFsdWUsIGtpbmQpOworICAgIH0KKyAg
ICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAg
IHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdl
KG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNWYWxpZChjb25zdCBMb3dlcmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghbV9ncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyh2YWx1ZS5ibG9jaygpLCBtX2hpZ2hC
bG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCisg
ICAgeworICAgICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodGFy
Z2V0KTsKKyAgICB9CisKKyAgICBMVmFsdWUgbG9hZFN0cnVjdHVyZShMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBMVmFsdWUgdGFibGVJbmRleCA9IG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBMVmFsdWUgdGFibGVCYXNlID0gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuYmFzZSgpKSk7CisgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9v
dXQuYmFzZUluZGV4KAorICAgICAgICAgICAgbV9oZWFwcy5zdHJ1Y3R1cmVUYWJsZSwgdGFibGVC
YXNlLCBtX291dC56ZXJvRXh0UHRyKHRhYmxlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmxvYWRQdHIoYWRkcmVzcyk7CisgICAgfQorCisgICAgTFZhbHVlIHdlYWtQb2ludGVyKEpTQ2Vs
bCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIGFkZFdlYWtSZWZlcmVuY2UocG9pbnRlcik7Cisg
ICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cihwb2ludGVyKTsKKyAgICB9CisKKyAgICBM
VmFsdWUgd2Vha1N0cnVjdHVyZUlEKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgYWRkV2Vha1JlZmVyZW5jZShzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gbV9vdXQuY29u
c3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgd2Vha1N0
cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWFr
UG9pbnRlcihzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNb
b3BlcmFuZF0sIG9mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExW
YWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOworICAgIH0KKyAgICBUeXBlZFBvaW50ZXIg
dGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFRhZ09mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzRm9yKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zm
c2V0KTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNMb2NhbCgpKQorICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwg
b3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9p
bnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVy
IHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKKyAgICB9CisgICAgVHlwZWRQ
b2ludGVyIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG9wZXJhbmQsIFRhZ09mZnNldCk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUg
YWJzdHJhY3RWYWx1ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUu
Zm9yTm9kZShub2RlKTsKKyAgICB9CisgICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKGVkZ2Uubm9kZSgp
KTsKKyAgICB9CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZShOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUobm9kZSkubV90eXBlOworICAg
IH0KKyAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcm92ZW5UeXBlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgSlNW
YWx1ZSBwcm92ZW5WYWx1ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3Ry
YWN0VmFsdWUobm9kZSkubV92YWx1ZTsKKyAgICB9CisgICAgSlNWYWx1ZSBwcm92ZW5WYWx1ZShF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcHJvdmVuVmFsdWUoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0
dXJlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2Rl
KS5tX3N0cnVjdHVyZTsKKyAgICB9CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBhYnN0cmFj
dFN0cnVjdHVyZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RTdHJ1
Y3R1cmUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
KyAgICB2b2lkIHByb2JlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ0NhbGxIZWxwZXJzOjpQcm9iZUNv
bnRleHQqKT4gcHJvYmVGdW5jKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHByb2JlRnVu
Yyk7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIGNyYXNoKCkKKyAgICB7CisgICAgICAgIGNy
YXNoKG1faGlnaEJsb2NrLT5pbmRleCwgbV9ub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgdm9p
ZCBjcmFzaChCbG9ja0luZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7
CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUs
IG1fb3V0Lm9wZXJhdGlvbihmdGxVbnJlYWNoYWJsZSkpOworICAgICAgICBVTlVTRURfUEFSQU0o
YmxvY2tJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOworI2Vsc2UKKyAg
ICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoZnRsVW5yZWFjaGFibGUpLAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoY29kZUJsb2NrKCkpLCBtX291dC5jb25zdEludDMyKGJsb2NrSW5kZXgpLAor
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihub2RlSW5kZXgpKTsKKyNlbmRpZgorICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgIH0KKworICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZh
aWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5OyB9CisgICAgCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9
CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgU3RhdGUmIG1fZnRsU3RhdGU7CisgICAg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtX2hlYXBzOworICAgIE91dHB1dCBtX291dDsKKyAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKKyAgICAKKyAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOworICAg
IExCYXNpY0Jsb2NrIG1faGFuZGxlRXhjZXB0aW9uczsKKyAgICBIYXNoTWFwPERGRzo6QmFzaWNC
bG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKKyAgICAKKyAgICBMVmFsdWUgbV9jYWxsRnJh
bWU7CisgICAgTFZhbHVlIG1fY2FwdHVyZWQ7CisgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsK
KyAgICBMVmFsdWUgbV90YWdNYXNrOworICAgIAorICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1faW50MzJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9zdHJpY3RJbnQ1MlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2ludDUyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fanNWYWx1ZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2Jvb2xlYW5WYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
ZG91YmxlVmFsdWVzOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBMTFZNIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KKyAgICAvLyBJdCdzIG5pY2UgdG8gaGF2ZSB0aGVzZSBvcHRpbWl6YXRpb25zIG9uIG91ciBl
bmQgYmVjYXVzZSB3ZSBjYW4gZ3VhcmFudGVlIHRoZW0gYSBiaXQgYmV0dGVyLgorICAgIC8vIFBy
b2JhYmx5IGFsc28gc2F2ZXMgTExWTSBjb21waWxlIHRpbWUuCisgICAgSGFzaE1hcDxOb2RlKiwg
TFZhbHVlPiBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzOworICAgIAorICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9waGlzOworICAgIAorICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ciBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgCisgICAgVmVjdG9yPEF2YWlsYWJsZVJl
Y292ZXJ5LCAzPiBtX2F2YWlsYWJsZVJlY292ZXJpZXM7CisgICAgCisgICAgSW5QbGFjZUFic3Ry
YWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBBYnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFj
dFN0YXRlPiBtX2ludGVycHJldGVyOworICAgIERGRzo6QmFzaWNCbG9jayogbV9oaWdoQmxvY2s7
CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxvY2s7CisgICAgTEJhc2ljQmxvY2sg
bV9uZXh0TG93QmxvY2s7CisKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOworICAgIHVuc2lnbmVk
IG1fbm9kZUluZGV4OworICAgIE5vZGUqIG1fbm9kZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCit2b2lkIGxvd2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKK3sKKyAgICBMb3dl
ckRGR1RvTExWTSBsb3dlcmluZyhzdGF0ZSk7CisgICAgbG93ZXJpbmcubG93ZXIoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5oIgorI2luY2x1ZGUgIkZU
TExvd2VyREZHVG9CMy5oIgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTEwNSw3ICsxMDUs
NyBAQCBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVuCiB9CiAjZW5kaWYK
IAotLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0
aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZworLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5
cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBCMywgYnkgY3JlYXRpbmcKIC8v
IHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLX1dJ
VEhfRVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAogICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBfZnRj
X2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTE5LDEw
ICsxMTksMTAgQEAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbgogI2Rl
ZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pIFwKICAgICBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChC
YWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25k
aXRpb24pCiAKLWNsYXNzIExvd2VyREZHVG9MTFZNIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMb3dlckRGR1RvTExWTSk7CitjbGFzcyBMb3dlckRGR1RvQjMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKExvd2VyREZHVG9CMyk7CiBwdWJsaWM6Ci0gICAgTG93ZXJERkdUb0xMVk0oU3Rh
dGUmIHN0YXRlKQorICAgIExvd2VyREZHVG9CMyhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIDogbV9n
cmFwaChzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAs
IG1fb3V0KHN0YXRlKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4dCBibG9jayBnaXZlcyB1
cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQogICAgICAgICAvLyBnZW5lcmF0ZWQgSVIgaW4gcm91
Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3QgdGhlIHBlcmZvcm1hbmNl
Ci0gICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ugd2UgZXhwZWN0IExMVk0g
dG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0
ZWQgY29kZSAoc2luY2Ugd2UgZXhwZWN0IEIzIHRvIHJlb3JkZXIgdGhpbmdzKSBidXQgaXQgd2ls
bAogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291
dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93QmxvY2spOwogICAgICAgICAKQEAgLTE3NjQs
OCArMTc2NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCiAgICAg
ewotICAgICAgICAvLyBGSVhNRTogaW52ZXN0aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRl
cnN0YW5kIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCi0gICAgICAgIC8vIEl0IG1p
Z2h0IGJlIGJldHRlciB0byBoYXZlIHRoZSBpbmxpbmUgbG9vcCBpbiBERkcgdG9vLgogICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpCiAgICAgICAgICAg
ICBzZXREb3VibGUobV9vdXQuZG91YmxlUG93aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTkyMiw4
ICsxOTIwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxv
dyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5u
ZWcodmFsdWUpOwogICAgICAgICAgICAgZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJv
KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gIjAgLSB4IiBpcyB0
aGUgY2Fub25pY2FsIHdheSBvZiBzYXlpbmcgIi14IiBpbiBib3RoIEIzIGFuZCBMTFZNLiBUaGlz
IGdldHMKLSAgICAgICAgICAgICAgICAvLyBsb3dlcmVkIHRvIHRoZSByaWdodCB0aGluZy4KICAg
ICAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291
dC5pbnQzMlplcm8sIHZhbHVlKTsKICAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNo
ZWNrLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY2hlY2s7CkBAIC00MjE3LDcgKzQyMTMsOSBAQCBwcml2YXRlOgogICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKTsKIAogICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8g
aW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgorICAgICAgICAgICAgLy8gUHJvdGVjdCBh
Z2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZGlk
bid0IGxpa2UgdGhhdC4KKyAgICAgICAgICAgIC8vIEl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMg
bmVlZGVkIGFueW1vcmUuCisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM4MgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENh
Y2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTg0Miw3ICs1ODQwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgZGVmYXVsdEhhc0luc3RhbmNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBTeW1ib2wuaGFzSW5zdGFu
Y2UgaXMgZGVmYXVsdCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBjb250aW51YXRpb24iKSk7
CiAKLSAgICAgICAgLy8gVW5saWtlIGluIHRoZSBERkcsIHdlIGRvbid0IHdvcnJ5IGFib3V0IGNs
ZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBwcm92ZW4gdGhl
IGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25zdGFudCBhcyBMTFZNIHNob3VsZCBmaXggaXQgZm9y
IHVzLgorICAgICAgICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQg
Y2xlYW5pbmcgdGhpcyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHByb3ZlbiB0
aGUgaGFzSW5zdGFuY2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIEIzIHNob3VsZCBmaXggaXQgZm9y
IHVzLgogCiAgICAgICAgIEFTU0VSVCghbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCktPmlzQ2VsbENv
bnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPT0gbV9ub2RlLT5jaGlsZDIo
KS5ub2RlKCktPmFzQ2VsbCgpKTsKIApAQCAtODQzOSwyMyArODQzNywyMyBAQCBwcml2YXRlOgog
CiAgICAgLy8gVGhpcyBpcyBhIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYSBjb2RlIGdlbmVyYXRv
ciB0aGF0IGZpbGxzIGluIGEgZ2FwIGluIHRoZSBjb2RlIHVzaW5nIG91cgogICAgIC8vIG93biBN
YWNyb0Fzc2VtYmxlci4gVGhpcyBpcyB1c2VmdWwgZm9yIHNsb3cgcGF0aHMgdGhhdCBpbnZvbHZl
IGEgbG90IG9mIGNvZGUgYW5kIHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBwYXkgdGhlIHByaWNl
IG9mIExMVk0gb3B0aW1pemluZyBpdC4gQSBsYXp5IHNsb3cgcGF0aCB3aWxsIG9ubHkgYmUgZ2Vu
ZXJhdGVkIGlmIGl0IGFjdHVhbGx5CisgICAgLy8gdG8gcGF5IHRoZSBwcmljZSBvZiBCMyBvcHRp
bWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQg
YWN0dWFsbHkKICAgICAvLyBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGEgbGF6eSBzbG93
IHBhdGggYWx3YXlzIGluY3VycyB0aGUgY29zdCBvZiB0d28gYWRkaXRpb25hbCBqdW1wcy4KLSAg
ICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRl
IGlzIHNsYXZlZCB0byB3aGF0ZXZlciBMTFZNIGRpZCwgc28geW91CisgICAgLy8gQWxzbywgdGhl
IGxhenkgc2xvdyBwYXRoJ3MgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBpcyBzbGF2ZWQgdG8g
d2hhdGV2ZXIgQjMgZGlkLCBzbyB5b3UKICAgICAvLyBoYXZlIHRvIHVzZSBhIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciB0byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lzdGVycyBhbmQgeW91
IG1heSBoYXZlCiAgICAgLy8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlmIHRoZXJlIGFyZW4n
dCBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZS4KICAgICAvLwogICAgIC8vIExhenkgc2xvdyBw
YXRocyBpbnZvbHZlIHRocmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0aW9uLiBFYWNoIHN0
YWdlIGhhcyB1bmlxdWUKICAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3dsZWRnZS4gVGhlIHN0
YWdlcyBhcmU6CiAgICAgLy8KLSAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJpbmcsIGkuZS4gY29k
ZSB0aGF0IHJ1bnMgaW4gdGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ug
d2lsbAorICAgIC8vIDEpIERGRy0+QjMgbG93ZXJpbmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4g
dGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ugd2lsbAogICAgIC8vICAg
IGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRoZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRz
IHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkgc2xvdwogICAgIC8vICAgIHBhdGgsIHRoZW4g
eW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVudCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFy
Z3MgYXJndW1lbnRzIGFmdGVyIHRoZQogICAgIC8vICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5n
IGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFs
dWVzLiBIZW5jZQogICAgIC8vICAgIHlvdSBwYXNzIGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgp
IGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJpbmcgc3RhZ2UgKDIpOgogICAgIC8vCiAgICAg
Ly8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMg
Y29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGljaCB3ZSBrbm93Ci0gICAgLy8gICAgdGhlIG1h
cHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhl
IHJlZ2lzdGVycyB0aGF0IExMVk0KKyAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50
cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgQjMK
ICAgICAvLyAgICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1lbnRzLiBZb3UgZG9uJ3QgYWN0dWFs
bHkgd2FudCB0byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBzaW5jZSB0aGVuCiAgICAgLy8gICAg
dGhlIHNsb3cgcGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBsYXppbHkgZ2VuZXJhdGVkLiBJbnN0
ZWFkLCB5b3Ugd2FudCB0byBzYXZlIHRoZQogICAgIC8vICAgIHJlZ2lzdGVycyBiZWluZyB1c2Vk
IGZvciB0aGUgYXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdlbmVyYXRpb24gdG8gc3RhZ2UgKDMp
IGJ5IGNyZWF0aW5nCkBAIC04NDY1LDggKzg0NjMsOCBAQCBwcml2YXRlOgogICAgIC8vICAgIGV4
ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlv
dSBjcmVhdGVkIGluIHN0YWdlICgyKS4KICAgICAvLwogICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRp
bWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBv
bmUsIG9yIG1hbnkgdGltZXMuCi0gICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZv
a2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3
aGljaAotICAgIC8vIGNhc2Ugc3RhZ2UgKDIpIHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRl
IHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEganVtcCB0aHJlYWRpbmcpLAorICAgIC8vIFN0YWdl
ICgyKSB3aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFnZSAoMSkuIEJ1dCwgQjMg
bWF5IGtpbGwgdGhlIGNvZGUsIGluIHdoaWNoCisgICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3Qg
cnVuLiBCMyBtYXkgZHVwbGljYXRlIHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEgdGFpbCBkdXBs
aWNhdGlvbiksCiAgICAgLy8gbGVhZGluZyB0byBtYW55IGNhbGxzIHRvIHlvdXIgc3RhZ2UgKDIp
IGxhbWJkYS4gU3RhZ2UgKDMpIG1heSBiZSBjYWxsZWQgemVybyBvciBvbmNlIGZvciBlYWNoCiAg
ICAgLy8gc3RhZ2UgKDIpLiBJdCB3aWxsIGJlIGNhbGxlZCB6ZXJvIHRpbWVzIGlmIHRoZSBzbG93
IHBhdGggbmV2ZXIgcnVucy4gVGhpcyBpcyB3aGF0IHlvdSBob3BlIGZvcgogICAgIC8vIHdoZW5l
dmVyIHlvdSB1c2UgdGhlIGxhenlTbG93UGF0aCgpIG1lY2hhbmlzbS4KQEAgLTkxMzQsNyArOTEz
Miw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIExWYWx1ZSB1bmJveEJvb2xlYW4oTFZhbHVlIGpz
VmFsdWUpCiAgICAgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFy
YW50ZWVzIHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVnZXIKKyAgICAgICAgLy8g
V2Ugd2FudCB0byB1c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IEIzIGtub3dzIHRoYXQg
ZXZlbiB0aGUgaW50ZWdlcgogICAgICAgICAvLyB2YWx1ZSBpcyBqdXN0IDAgb3IgMS4gQnV0IGZv
ciBub3cgd2UgZG8gaXQgdGhlIGR1bWIgd2F5LgogICAgICAgICByZXR1cm4gbV9vdXQubm90WmVy
bzY0KG1fb3V0LmJpdEFuZChqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KDEpKSk7CiAgICAgfQpA
QCAtOTcxNSw3ICs5NzEzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBXZSBlbWl0IHRoZSBz
dG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdp
bGwgbmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtl
cyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVy
IHRoYW4KLSAgICAgICAgLy8gd2FzdGluZyBMTFZNJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgorICAg
ICAgICAvLyB3YXN0aW5nIEIzJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgogICAgICAgICBsYXp5U2xv
d1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CkBAIC0xMDQyNSw5ICsx
MDQyMyw5IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9zdG9yYWdlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
ZG91YmxlVmFsdWVzOwogICAgIAotICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBMTFZNIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBo
YXZpbmcgdG8gZG8gQ1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgogICAgIC8vIEl0J3Mgbmlj
ZSB0byBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBn
dWFyYW50ZWUgdGhlbSBhIGJpdCBiZXR0ZXIuCi0gICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBM
TFZNIGNvbXBpbGUgdGltZS4KKyAgICAvLyBQcm9iYWJseSBhbHNvIHNhdmVzIEIzIGNvbXBpbGUg
dGltZS4KICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXM7
CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CkBAIC0xMDQ0OSw5ICsx
MDQ0Nyw5IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGxv
d2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgbG93ZXJERkdUb0IzKFN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBMb3dlckRGR1RvTExWTSBsb3dlcmluZyhzdGF0ZSk7CisgICAgTG93ZXJERkdU
b0IzIGxvd2VyaW5nKHN0YXRlKTsKICAgICBsb3dlcmluZy5sb3dlcigpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHJldmlzaW9uIDE5
NjczMSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5o
OjE5NjczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExvd2VyREZHVG9MTFZNX2gKKyNkZWZp
bmUgRlRMTG93ZXJERkdUb0xMVk1faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTExvd2VyREZHVG9MTFZNX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEZUTExvd2VyREZHVG9MTFZNX2gK
LSNkZWZpbmUgRlRMTG93ZXJERkdUb0xMVk1faAorI2lmbmRlZiBGVExMb3dlckRGR1RvQjNfaAor
I2RlZmluZSBGVExMb3dlckRGR1RvQjNfaAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTMz
LDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXZvaWQg
bG93ZXJERkdUb0xMVk0oU3RhdGUmKTsKK3ZvaWQgbG93ZXJERkdUb0IzKFN0YXRlJik7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCi0j
ZW5kaWYgLy8gRlRMTG93ZXJERkdUb0xMVk1faAorI2VuZGlmIC8vIEZUTExvd2VyREZHVG9CM19o
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDQ2MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCi0KLSNpZiBFTkFC
TEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCi0jaW5jbHVk
ZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCi0jaW5jbHVkZSAiQjNTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgotI2lu
Y2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAi
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKLSNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdEZ1enouaCIKLSNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmgi
Ci0jaW5jbHVkZSAiRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCIKLSNpbmNsdWRlICJGVExFeGNlcHRp
b25UYXJnZXQuaCIKLSNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKLSNpbmNsdWRl
ICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgotI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwuaCIK
LSNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkZUTE91dHB1dC5oIgotI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuaCIKLSNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGVExXZWln
aHRlZFRhcmdldC5oIgotI2luY2x1ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJ
VEJpdEFuZEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVEJpdE9yR2VuZXJhdG9yLmgiCi0jaW5j
bHVkZSAiSklUQml0WG9yR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRMZWZ0
U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKLSNpbmNsdWRl
ICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIk9wZXJhbmRz
SW5saW5lcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgiCi0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
Ci0jaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKLSNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKLSNpbmNsdWRlICJXYXRjaGRvZy5oIgotI2luY2x1ZGUgPGF0b21pYz4KLSNpZiAhT1Mo
V0lORE9XUykKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KLSNpbmNsdWRlIDx3dGYvQm94Lmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBCMzsK
LXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0ZDo6YXRvbWljPGludD4g
Y29tcGlsZUNvdW50ZXI7Ci0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLU5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggc3RhdGljIHZvaWQgZnRsVW5yZWFjaGFibGUoKQotewotICAgIENSQVNIKCk7Ci19Ci0j
ZWxzZQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25l
ZCBub2RlSW5kZXgpCi17Ci0gICAgZGF0YUxvZygiQ3Jhc2hpbmcgaW4gdGhvdWdodC10by1iZS11
bnJlYWNoYWJsZSBGVEwtZ2VuZXJhdGVkIGNvZGUgZm9yICIsIHBvaW50ZXJEdW1wKGNvZGVCbG9j
ayksICIgYXQgYmFzaWMgYmxvY2sgIyIsIGJsb2NrSW5kZXgpOwotICAgIGlmIChub2RlSW5kZXgg
IT0gVUlOVF9NQVgpCi0gICAgICAgIGRhdGFMb2coIiwgbm9kZSBAIiwgbm9kZUluZGV4KTsKLSAg
ICBkYXRhTG9nKCIuXG4iKTsKLSAgICBDUkFTSCgpOwotfQotI2VuZGlmCi0KLS8vIFVzaW5nIHRo
aXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExW
TSwgYnkgY3JlYXRpbmcKLS8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCi0jZGVmaW5l
IEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAotICAgICAgICBG
b3JtYXR0ZWRWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBFZGdlIF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5
cGVzUGFzc2VkVGhyb3VnaCA9ICh0eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAotICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQ
YXNzZWRUaHJvdWdoKSkgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0eXBlQ2hlY2soX2Z0
Y19sb3dWYWx1ZSwgX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoLCAoZmFp
bENvbmRpdGlvbiksIGV4aXRLaW5kKTsgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5l
IEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwg
ZmFpbENvbmRpdGlvbikgXAotICAgIEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKEJhZFR5
cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlv
bikKLQotY2xhc3MgTG93ZXJERkdUb0xMVk0gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExv
d2VyREZHVG9MTFZNKTsKLXB1YmxpYzoKLSAgICBMb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUp
Ci0gICAgICAgIDogbV9ncmFwaChzdGF0ZS5ncmFwaCkKLSAgICAgICAgLCBtX2Z0bFN0YXRlKHN0
YXRlKQotICAgICAgICAsIG1fb3V0KHN0YXRlKQotICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJv
YykKLSAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQotICAgICAgICAsIG1faW50ZXJwcmV0
ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGxv
d2VyKCkKLSAgICB7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAg
ICAKLSAgICAgICAgQ1N0cmluZyBuYW1lOwotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBuYW1lID0gdG9DU3RyaW5nKAotICAgICAgICAgICAg
ICAgICJqc0JvZHlfIiwgKytjb21waWxlQ291bnRlciwgIl8iLCBjb2RlQmxvY2soKS0+aW5mZXJy
ZWROYW1lKCksCi0gICAgICAgICAgICAgICAgIl8iLCBjb2RlQmxvY2soKS0+aGFzaCgpKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1lID0gImpzQm9keSI7Ci0gICAgICAgIAotICAg
ICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKLQotICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVhZHks
IGJlZ2lubmluZyBsb3dlcmluZy5cbiIpOwotCi0gICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9o
ZWFwcyk7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9m
IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7
Ci0gICAgICAgIAotICAgICAgICBtX3Byb2xvZ3VlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQ
cm9sb2d1ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc3RhY2tPdmVyZmxvdyA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3RhY2sgb3ZlcmZsb3ciKSk7Ci0gICAgICAgIG1faGFuZGxlRXhjZXB0
aW9ucyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFuZGxlIEV4Y2VwdGlvbnMiKSk7Ci0gICAg
ICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja0FyZ3VtZW50cyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ2hlY2sgYXJndW1lbnRzIikpOwotCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewotICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0
aW9uQ291bnQpOwotICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIEJhY2sgdG8gcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBn
ZXQgc25lYWtpbHkgY3JlYXRlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KLSAgICAgICAg
bV9vdXQuc2V0RnJlcXVlbmN5KDEpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bV9wcm9sb2d1ZSwgc3RhY2tPdmVyZmxvdyk7Ci0gICAgICAgIG1fb3V0LmluaXRpYWxpemVDb25z
dGFudHMobV9wcm9jLCBtX3Byb2xvZ3VlKTsKLSAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7
Ci0KLSAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9n
cmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Ci0gICAgICAgIEIzOjpTbG90QmFzZVZhbHVlKiBjYXB0
dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6ZU9mQ2FwdHVyZWQpOwotICAgICAg
ICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFzZSwgbV9vdXQuY29uc3RJbnRQdHIo
c2l6ZU9mQ2FwdHVyZWQpKTsKLSAgICAgICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJl
ZEJhc2UtPnNsb3QoKTsKLQotICAgICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJ
blByZU9yZGVyKCk7Ci0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW55IGFsbG9j
YSdzIGFmdGVyIHRoaXMgcG9pbnQsIHNpbmNlIHRoZXkgd2lsbCBjZWFzZSB0bwotICAgICAgICAv
LyBiZSBtZW0ycmVnIGNhbmRpZGF0ZXMuCi0gICAgICAgIAotICAgICAgICBtX2NhbGxGcmFtZSA9
IG1fb3V0LmZyYW1lUG9pbnRlcigpOwotICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5j
b25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwotICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25z
dEludDY0KFRhZ01hc2spOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IEIzIGtub3dzIHRo
YXQgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIG1hc2sgcmVnaXN0ZXJzLiBUaGlzIGZvcmNlcyB0
aGUKLSAgICAgICAgLy8gY29uc3RhbnRzIHRvIGJlIG1hdGVyaWFsaXplZCBpbiByZWdpc3RlcnMu
Ci0gICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7
Ci0gICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdNYXNrLT5rZXkoKSk7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihjb2RlQmxvY2so
KSksIGFkZHJlc3NGb3IoSlNTdGFjazo6Q29kZUJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICBkaWRPdmVyZmxvd1N0YWNrKCksIHJhcmVseShzdGFj
a092ZXJmbG93KSwgdXN1YWxseShjaGVja0FyZ3VtZW50cykpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc3RhY2tPdmVyZmxvdywgbV9oYW5kbGVFeGNlcHRpb25zKTsKLSAgICAg
ICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGNv
ZGVCbG9jaygpKSk7Ci0gICAgICAgIG1fb3V0LnBhdGNocG9pbnQoVm9pZCktPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGVybWluYWwsIHNv
IHdlIGNhbiBjbG9iYmVyIGV2ZXJ5dGhpbmcuIFRoYXQncyB3aHkgd2UgZG9uJ3QgY2xhaW0gdG8K
LSAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2
ZXNCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotCi0g
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2hhbmRsZUV4Y2VwdGlvbnMsIGNoZWNrQXJndW1lbnRzKTsKLSAgICAgICAgQm94PEND
YWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFu
ZGxlcjsKLSAgICAgICAgbV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAotICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaml0
Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZXhjZXB0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY2hlY2tBcmd1bWVudHMsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKLSAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCksIDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpOyBpLS07KSB7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5hcmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKLSAgICAgICAg
fQotICAgICAgICBtX25vZGUgPSBudWxscHRyOwotICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmln
aW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRk
cmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlKSB7
Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUg
b25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQotICAgICAgICAgICAgICAgIC8vIHBy
aW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2Nh
bCB0aGF0IGdvdCBwdXQgaW4KLSAgICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2lu
YWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcwot
ICAgICAgICAgICAgICAgIC8vIHNob3VsZCBob2xkIHRydWUuCi0gICAgICAgICAgICAgICAgbV9s
b2FkZWRBcmd1bWVudFZhbHVlcy5hZGQobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tpXSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZs
dXNoZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90
Q2VsbChqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVz
aCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJs
b2NrKDApKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKERGRzo6QmFzaWNCbG9jayogYmxvY2sg
OiBwcmVPcmRlcikKLSAgICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9jayk7Ci0KLSAgICAgICAg
Ly8gV2UgY3JlYXRlIGFsbCBQaGkncyB1cCBmcm9udCwgYnV0IHdlIG1heSB0aGVuIGRlY2lkZSBu
b3QgdG8gY29tcGlsZSB0aGUgYmFzaWMgYmxvY2sKLSAgICAgICAgLy8gdGhhdCB3b3VsZCBoYXZl
IGNvbnRhaW5lZCBvbmUgb2YgdGhlbS4gU28gdGhpcyBjcmVhdGVzIG9ycGhhbnMsIHdoaWNoIHRy
aWdnZXJzIEIzCi0gICAgICAgIC8vIHZhbGlkYXRpb24gZmFpbHVyZXMuIENhbGxpbmcgdGhpcyBm
aXhlcyB0aGUgaXNzdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB5b3Ugc2hv
dWxkIGF2b2lkIHRoZSB0ZW1wdGF0aW9uIHRvIG1ha2UgdGhpcyBjYWxsIGNvbmRpdGlvbmFsIHVw
b24KLSAgICAgICAgLy8gdmFsaWRhdGlvbiBiZWluZyBlbmFibGVkLiBCMyBtYWtlcyBubyBndWFy
YW50ZWVzIG9mIGFueSBraW5kIG9mIGNvcnJlY3RuZXNzIHdoZW4KLSAgICAgICAgLy8gZGVhbGlu
ZyB3aXRoIElSIHRoYXQgd291bGQgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4gRm9yIGV4YW1wbGUs
IGl0IHdvdWxkIGJlIHZhbGlkIHRvCi0gICAgICAgIC8vIHdyaXRlIGEgQjMgcGhhc2UgdGhhdCBz
byBhZ2dyZXNzaXZlbHkgYXNzdW1lcyB0aGUgbGFjayBvZiBvcnBoYW5zIHRoYXQgaXQgd291bGQg
Y3Jhc2gKLSAgICAgICAgLy8gaWYgYW55IG9ycGhhbnMgd2VyZSBhcm91bmQuIFdlIG1pZ2h0IGV2
ZW4gaGF2ZSBzdWNoIHBoYXNlcyBhbHJlYWR5LgotICAgICAgICBtX3Byb2MuZGVsZXRlT3JwaGFu
cygpOwotCi0gICAgICAgIC8vIFdlIHB1dCB0aGUgYmxvY2tzIGludG8gdGhlIEIzIHByb2NlZHVy
ZSBpbiBhIHN1cGVyIHdlaXJkIG9yZGVyLiBOb3cgd2UgcmVvcmRlciB0aGVtLgotICAgICAgICBt
X291dC5hcHBseUJsb2NrT3JkZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgCi0gICAgdm9p
ZCBjcmVhdGVQaGlWYXJpYWJsZXMoKQotICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
LSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRl
eC0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBERkc6OlBoaSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgewotICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdERvdWJsZToKLSAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IG1fb3V0LmRvdWJsZVR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50MzI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDUyOgotICAgICAgICAgICAgICAgICAgICB0eXBlID0g
bV9vdXQuaW50NjQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291
dC5ib29sZWFuOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9k
ZSByZXN1bHQgdHlwZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV9waGlzLmFkZChub2RlLCBtX3Byb2MuYWRkPFZhbHVl
PihCMzo6UGhpLCB0eXBlLCBPcmlnaW4obm9kZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCbG9jayhERkc6OkJhc2ljQmxvY2sqIGJs
b2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faGlnaEJsb2NrID0gYmxvY2s7Ci0gICAgICAgIAotICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhbnkgYmxvY2tzIGNyZWF0ZWQgd2hpbGUgbG93ZXJpbmcgY29kZSBpbiB0aGUg
aGlnaCBibG9jayBoYXZlIHRoZSBmcmVxdWVuY3kgb2YKLSAgICAgICAgLy8gdGhlIGhpZ2ggYmxv
Y2suIFRoaXMgaXMgYXBwcm9wcmlhdGUgYmVjYXVzZSBCMyBkb2Vzbid0IG5lZWQgcHJlY2lzZSBm
cmVxdWVuY2llcy4gSXQganVzdCBuZWVkcwotICAgICAgICAvLyBzb21ldGhpbmcgcm91Z2hseSBh
cHByb3hpbWF0ZSBmb3IgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KLSAgICAgICAg
bV9vdXQuc2V0RnJlcXVlbmN5KG1faGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9j
ayk7Ci0gICAgICAgIAotICAgICAgICBtX25leHRIaWdoQmxvY2sgPSAwOwotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0
QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgp
OwotICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBtX25leHRMb3dCbG9jayA9IG1fbmV4dEhpZ2hCbG9jayA/
IG1fYmxvY2tzLmdldChtX25leHRIaWdoQmxvY2spIDogMDsKLSAgICAgICAgCi0gICAgICAgIC8v
IEFsbCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBh
YmlsaXR5IHRvIGtlZXAgdGhlCi0gICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHBy
b2dyYW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKLSAgICAg
ICAgLy8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9y
ZGVyIHRoaW5ncykgYnV0IGl0IHdpbGwKLSAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIg
dG8gcmVhZC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2Nr
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmdGxDcmFzaGVzKCkpCi0gICAgICAg
ICAgICBtX291dC50cmFwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5j
ZmFIYXNWaXNpdGVkKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgYmVjYXVzZSBDRkEgZGlkbid0
IHJlYWNoLlxuIik7Ci0gICAgICAgICAgICBjcmFzaChtX2hpZ2hCbG9jay0+aW5kZXgsIFVJTlRf
TUFYKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJlZ2luQmxvY2sobV9oaWdoQmxvY2spOwotICAgICAg
ICAKLSAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwotICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNC
bG9jayhtX2hpZ2hCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKG1fbm9kZUluZGV4ID0g
MDsgbV9ub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUluZGV4KSB7Ci0g
ICAgICAgICAgICBpZiAoIWNvbXBpbGVOb2RlKG1fbm9kZUluZGV4KSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2FmZWx5SW52YWxpZGF0ZUFm
dGVyVGVybWluYXRpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcuXG4iKTsKLSAgICAgICAgY3Jh
c2goKTsKLQotICAgICAgICAvLyBJbnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVuZGVyIG5v
cm1hbCBjaXJjdW1zdGFuY2VzIHdlIHdvdWxkIGV4cGVjdAotICAgICAgICAvLyB0aGVtIHRvIGJl
IGludmFsaWRhdGVkIGFscmVhZHkuIEJ1dCB5b3UgY2FuIGhhdmUgdGhlIENGQSBiZWNvbWUgbW9y
ZQotICAgICAgICAvLyBwcmVjaXNlIG92ZXIgdGltZSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIG9m
IG9iamVjdHMgY2hhbmdlIG9uIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZC4gRmFpbGluZyB0
byBkbyB0aGlzIHdvdWxkIHJlc3VsdCBpbiB3ZWlyZCBjcmFzaGVzIGR1ZSB0byBhIHZhbHVlCi0g
ICAgICAgIC8vIGJlaW5nIHVzZWQgYnV0IG5vdCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRX
IQotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogdGFyZ2V0
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghdGFyZ2V0KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21p
bmF0b3JzLT5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJCbG9jayAiLCAqdGFyZ2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7Ci0gICAgICAg
ICAgICAgICAgdGFyZ2V0LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAg
IHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX29yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOwotICAg
ICAgICBtX291dC5zZXRPcmlnaW4obV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAi
LCBtX25vZGUsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVz
LnJlc2l6ZSgwKTsKLSAgICAgICAgCi0gICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcoKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7Ci0gICAgICAg
IGNhc2UgREZHOjpVcHNpbG9uOgotICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6UGhpOgotICAgICAgICAgICAgY29tcGls
ZVBoaSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAg
ICAgY29tcGlsZURvdWJsZUNvbnN0YW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZVJlcDoKLSAgICAgICAgICAg
IGNvbXBpbGVEb3VibGVSZXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERv
dWJsZUFzSW50MzI6Ci0gICAgICAgICAgICBjb21waWxlRG91YmxlQXNJbnQzMigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpWYWx1ZVJlcDoKLSAgICAgICAgICAgIGNv
bXBpbGVWYWx1ZVJlcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50NTJS
ZXA6Ci0gICAgICAgICAgICBjb21waWxlSW50NTJSZXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVRvSW50
MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoK
LSAgICAgICAgICAgIGNvbXBpbGVCb29sZWFuVG9OdW1iZXIoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgotICAgICAgICAgICAgY29tcGls
ZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRTdGFjazoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRTdGFjaygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAgICAgICAgICBjb21waWxlUHV0U3Rh
Y2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6Q2hlY2s6Ci0gICAg
ICAgICAgICBjb21waWxlTm9PcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VG9UaGlzOgotICAgICAgICAgICAgY29tcGlsZVRvVGhpcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICBjb21waWxlVmFsdWVBZGQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0ckNhdDoKLSAgICAgICAgICAgIGNv
bXBpbGVTdHJDYXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQWRk
OgotICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoQWRkT3JT
dWIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQ2x6MzI6Ci0gICAg
ICAgICAgICBjb21waWxlQXJpdGhDbHozMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhNdWwoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgY29tcGlsZUFy
aXRoRGl2KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAg
ICAgICAgICAgIGNvbXBpbGVBcml0aE1vZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBjb21w
aWxlQXJpdGhNaW5Pck1heCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJp
dGhBYnM6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhBYnMoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFyaXRoU2luOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoU2luKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aENvczoKLSAgICAgICAgICAg
IGNvbXBpbGVBcml0aENvcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJp
dGhQb3c6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhQb3coKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFyaXRoUmFuZG9tOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoUmFu
ZG9tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aFJvdW5kOgotICAg
ICAgICAgICAgY29tcGlsZUFyaXRoUm91bmQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFyaXRoU3FydDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoTG9nOgotICAgICAgICAgICAgY29tcGls
ZUFyaXRoTG9nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aEZSb3Vu
ZDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aEZSb3VuZCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhOZWdh
dGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6Qml0QW5kOgotICAg
ICAgICAgICAgY29tcGlsZUJpdEFuZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgREZHOjpCaXRPcjoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRPcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpCaXRYb3I6Ci0gICAgICAgICAgICBjb21waWxlQml0
WG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAg
ICAgICAgICBjb21waWxlQml0UlNoaWZ0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICAgICAgY29tcGls
ZUJpdFVSU2hpZnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVJbnQzMlRv
TnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hl
Y2tDZWxsOgotICAgICAgICAgICAgY29tcGlsZUNoZWNrQ2VsbCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tOb3RFbXB0eToKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a05vdEVtcHR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0JhZENl
bGw6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tCYWRDZWxsKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDaGVja0lkZW50OgotICAgICAgICAgICAgY29tcGlsZUNoZWNrSWRl
bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEV4ZWN1dGFibGU6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0RXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBpbGVBcnJh
eWlmeVRvU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBjb21waWxlUHV0U3RydWN0dXJlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbjoKLSAgICAgICAgICAgIGNvbXBpbGVJbigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogot
ICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeUlkKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgotICAgICAg
ICBjYXNlIFB1dFNldHRlckJ5SWQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0QWNjZXNzb3JCeUlk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlk
OgotICAgICAgICAgICAgY29tcGlsZVB1dEdldHRlclNldHRlckJ5SWQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFB1dEdldHRlckJ5VmFsOgotICAgICAgICBjYXNlIFB1dFNl
dHRlckJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCdXR0ZXJmbHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRP
bmx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgotICAgICAgICAgICAgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgICAgICBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja0FycmF5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja0luQm91bmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRC
eVZhbDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZUdl
dE15QXJndW1lbnRCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgY2FzZSBQdXRCeVZh
bERpcmVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICAgICAgY29tcGlsZUFycmF5UHVz
aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAg
ICAgICBjb21waWxlQXJyYXlQb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3RnVuY3Rpb246Ci0gICAgICAg
IGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBOZXdHZW5lcmF0b3JGdW5jdGlv
bjoKLSAgICAgICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ3JlYXRlQ2xv
bmVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3T2JqZWN0OgotICAgICAgICAg
ICAgY29tcGlsZU5ld09iamVjdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TmV3QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlTmV3QXJyYXkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgY29tcGlsZU5l
d0FycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdBcnJh
eVdpdGhTaXplOgotICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlTmV3VHlwZWRBcnJheSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgotICAgICAgICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvU3RyaW5nOgotICAgICAgICBj
YXNlIENhbGxTdHJpbmdDb25zdHJ1Y3RvcjoKLSAgICAgICAgICAgIGNvbXBpbGVUb1N0cmluZ09y
Q2FsbFN0cmluZ0NvbnN0cnVjdG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZToKLSAgICAgICAgICAgIGNvbXBpbGVUb1ByaW1pdGl2ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWFrZVJvcGU6Ci0gICAgICAgICAgICBjb21waWxl
TWFrZVJvcGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgICAgICBjb21waWxlU3Ry
aW5nQ2hhckNvZGVBdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5n
RnJvbUNoYXJDb2RlOgotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNh
c2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlPZmZz
ZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEdldHRlcjoKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdldFNldHRlcjoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBj
b21waWxlTXVsdGlHZXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlPZmZzZXQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJs
ZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyaWFibGU6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0R2xvYmFsVmFyaWFibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE5vdGlmeVdyaXRlOgotICAgICAgICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBjb21waWxl
R2V0Q2FsbGVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRBcmd1bWVu
dENvdW50OgotICAgICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY29tcGlsZUdl
dFNjb3BlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0g
ICAgICAgICAgICBjb21waWxlU2tpcFNjb3BlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHZXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgY29tcGlsZUdldENsb3N1cmVWYXIo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRGcm9tQXJn
dW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRUb0FyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVF
cSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgot
ICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUxl
c3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0g
ICAgICAgICAgICBjb21waWxlQ29tcGFyZUxlc3NFcSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUdy
ZWF0ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUdyZWF0ZXJFcSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgICAgIGNvbXBpbGVMb2dp
Y2FsTm90KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAg
ICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0g
ICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUYWlsQ2FsbDoKLSAgICAgICAgICAgIGNvbXBpbGVUYWlsQ2FsbCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAg
ICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKLSAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6
SnVtcDoKLSAgICAgICAgICAgIGNvbXBpbGVKdW1wKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBERkc6OkJyYW5jaDoKLSAgICAgICAgICAgIGNvbXBpbGVCcmFuY2goKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6U3dpdGNoOgotICAgICAgICAgICAg
Y29tcGlsZVN3aXRjaCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpS
ZXR1cm46Ci0gICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgICAgICBjb21waWxlRm9yY2VPU1JF
eGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAg
Y2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgotICAgICAgICAgICAgY29tcGlsZVRocm93KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKLSAgICAg
ICAgICAgIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAgICAgICBjb21waWxlSXNVbmRlZmluZWQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAg
ICAgIGNvbXBpbGVJc0Jvb2xlYW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElzTnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZUlzTnVtYmVyKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVJc1N0cmlu
ZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSXNPYmplY3Q6Ci0gICAgICAg
ICAgICBjb21waWxlSXNPYmplY3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElzT2JqZWN0T3JOdWxsOgotICAgICAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgotICAgICAgICAgICAg
Y29tcGlsZUlzRnVuY3Rpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5
cGVPZjoKLSAgICAgICAgICAgIGNvbXBpbGVUeXBlT2YoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENoZWNrVHlwZUluZm9GbGFnczoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a1R5cGVJbmZvRmxhZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE92ZXJy
aWRlc0hhc0luc3RhbmNlOgotICAgICAgICAgICAgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgotICAgICAg
ICAgICAgY29tcGlsZUluc3RhbmNlT2YoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZkN1c3Rv
bSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgICAgICBjb21waWxlQ291bnRFeGVjdXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJp
ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0
eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNHZW5lcmljUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6Ci0gICAgICAgICAgICBjb21waWxlR2V0UHJvcGVy
dHlFbnVtZXJhdG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5l
cmljUG5hbWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJp
bmc6Ci0gICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6Ci0gICAgICAgICAgICBj
b21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgotICAgICAgICAgICAgY29tcGlsZU1hdGVy
aWFsaXplTmV3T2JqZWN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNYXRl
cmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVD
cmVhdGVBY3RpdmF0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVj
a1dhdGNoZG9nVGltZXI6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5UmVzdDoKLSAgICAgICAgICAg
IGNvbXBpbGVDb3B5UmVzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0
UmVzdExlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgY2FzZSBM
b29wSGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
Ci0gICAgICAgIGNhc2UgRXhpdE9LOgotICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Ci0g
ICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21OZXdH
ZW5lcmF0b3JGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoK
LSAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgotICAgICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgUHV0SGludDoKLSAgICAgICAgY2FzZSBC
b3R0b21WYWx1ZToKLSAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzVGVybWluYWwoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9zdGF0
ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0
aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlVXBzaWxvbigpCi0gICAgewot
ICAgICAgICBMVmFsdWUgdXBzaWxvblZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgc3dpdGNoICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToK
LSAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICBjYXNl
IEtub3duSW50MzJVc2U6Ci0gICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDUyUmVw
VXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb29sZWFuVXNlOgotICAgICAg
ICBjYXNlIEtub3duQm9vbGVhblVzZToKLSAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0Jv
b2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDZWxsVXNlOgotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgICAgIHVwc2ls
b25WYWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Ug
a2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgdXBzaWxvbiA9IG1fb3V0LmFuY2hvcih1cHNpbG9uVmFsdWUpOwotICAgICAgICBMVmFs
dWUgcGhpTm9kZSA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGkoKSk7Ci0gICAgICAgIG1fb3V0LmFk
ZEluY29taW5nVG9QaGkocGhpTm9kZSwgdXBzaWxvbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVBoaSgpCi0gICAgewotICAgICAgICBMVmFsdWUgcGhpID0gbV9waGlzLmdldChtX25v
ZGUpOwotICAgICAgICBtX291dC5tX2Jsb2NrLT5hcHBlbmQocGhpKTsKLQotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7Ci0gICAgICAgIGNhc2UgTm9k
ZVJlc3VsdERvdWJsZToKLSAgICAgICAgICAgIHNldERvdWJsZShwaGkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgc2V0SW50
MzIocGhpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1
MjoKLSAgICAgICAgICAgIHNldEludDUyKHBoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgIHNldEJvb2xlYW4ocGhpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAg
ICAgIHNldEpTVmFsdWUocGhpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlRG91YmxlQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNv
bnN0RG91YmxlKG1fbm9kZS0+YXNOdW1iZXIoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVJbnQ1MkNvbnN0YW50KCkKLSAgICB7Ci0gICAgICAgIGludDY0X3QgdmFsdWUgPSBtX25v
ZGUtPmFzTWFjaGluZUludCgpOwotICAgICAgICAKLSAgICAgICAgc2V0SW50NTIobV9vdXQuY29u
c3RJbnQ2NCh2YWx1ZSA8PCBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgIHNl
dFN0cmljdEludDUyKG1fb3V0LmNvbnN0SW50NjQodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNvbXBpbGVEb3VibGVSZXAoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGRvdWJs
ZVZhbHVlID0gdW5ib3hEb3VibGUodmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgUmVh
bE51bWJlclVzZSBpbnQgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlUmVwIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwK
LSAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwg
bV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwKLSAgICAgICAgICAgICAg
ICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNG
dWxsRG91YmxlKSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgTm90Q2VsbFVzZToKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udmVydE5vbk51bWJlciA9IG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE5vdENlbGxVc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVl
VG9Eb3VibGUgdW5ib3hpbmcgZG91YmxlIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBub25Eb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUg
dGVzdGluZyB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5n
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShkb3VibGVUZXN0aW5nKSwgdW5zdXJl
KGludENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICAgICAgbV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2YWx1ZSkpKTsK
LSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7Ci0gICAg
ICAgICAgICBMVmFsdWUgdmFsdWVJc051bWJlciA9IGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBl
KG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVt
YmVyLCB1c3VhbGx5KGRvdWJsZUNhc2UpLCByYXJlbHkobm9uRG91YmxlQ2FzZSkpOwotCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBub25Eb3VibGVDYXNlKTsKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hE
b3VibGUodmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgaWYgKHNob3VsZENvbnZlcnROb25OdW1iZXIpIHsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1Zh
bHVlVG9Eb3VibGUgY29udmVydGluZyB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB0ZXN0TnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFs
dWVUb0RvdWJsZSB0ZXN0aW5nIG51bGwgY2FzZSIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBudWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNv
bnZlcnRpbmcgbnVsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3RC
b29sZWFuVHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0
ZXN0aW5nIGJvb2xlYW4gdHJ1ZSBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gdHJ1ZSBjYXNlIikpOwotICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7Ci0KLSAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25Eb3VibGVDYXNlLCB1bmRlZmluZWRDYXNlKTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc1VuZGVmaW5lZCA9IG1fb3V0LmVxdWFsKHZh
bHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKHZhbHVlSXNVbmRlZmluZWQsIHVuc3VyZSh1bmRlZmluZWRDYXNlKSwgdW5z
dXJlKHRlc3ROdWxsQ2FzZSkpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5k
ZWZpbmVkQ2FzZSwgdGVzdE51bGxDYXNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb252ZXJ0ZWRVbmRlZmluZWQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5h
TikpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRlc3ROdWxsQ2FzZSwgbnVsbENhc2UpOwotICAgICAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5j
b25zdEludDY0KFZhbHVlTnVsbCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1
ZUlzTnVsbCwgdW5zdXJlKG51bGxDYXNlKSwgdW5zdXJlKHRlc3RCb29sZWFuVHJ1ZUNhc2UpKTsK
LQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRy
dWVDYXNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWROdWxsID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDApKTsKLSAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0
ZXN0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9vbGVhblRydWVDYXNlKTsKLSAgICAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWVJc0Jvb2xlYW5UcnVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVmFsdWVUcnVlKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZh
bHVlSXNCb29sZWFuVHJ1ZSwgdW5zdXJlKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUo
Y29udmVydEJvb2xlYW5GYWxzZUNhc2UpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UsIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKTsKLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRUcnVlID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVh
bkZhbHNlQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZUlzTm90Qm9vbGVhbkZhbHNlID0gbV9vdXQubm90RXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50
NjQoVmFsdWVGYWxzZSkpOwotICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwgdmFsdWVJc05vdEJvb2xl
YW5GYWxzZSk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2Ug
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwotICAgICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZl
cnRlZFVuZGVmaW5lZCwgY29udmVydGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFs
c2UpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhub25Eb3VibGVDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwg
U3BlY0J5dGVjb2RlTnVtYmVyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICBtX291
dC51bnJlYWNoYWJsZSgpOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLQotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTog
ewotICAgICAgICAgICAgc2V0RG91YmxlKHN0cmljdEludDUyVG9Eb3VibGUobG93U3RyaWN0SW50
NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGNvbXBpbGVEb3VibGVBc0ludDMyKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2Vy
VmFsdWUgPSBjb252ZXJ0RG91YmxlVG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKTsKLSAgICAgICAg
c2V0SW50MzIoaW50ZWdlclZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVWYWx1ZVJl
cCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVj
RG91YmxlSW1wdXJlTmFOKSkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9vdXQuc2VsZWN0
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbCh2YWx1ZSwgdmFsdWUpLCB2
YWx1ZSwgbV9vdXQuY29uc3REb3VibGUoUE5hTikpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKGJveERvdWJsZSh2YWx1ZSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogewotICAgICAgICAgICAgc2V0SlNWYWx1ZShzdHJpY3RJbnQ1MlRvSlNWYWx1ZShsb3dT
dHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVJbnQ1MlJlcCgpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0g
ICAgICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX291dC5zaWduRXh0MzJUbzY0KGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgotICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIoCi0g
ICAgICAgICAgICAgICAganNWYWx1ZVRvU3RyaWN0SW50NTIoCi0gICAgICAgICAgICAgICAgICAg
IG1fbm9kZS0+Y2hpbGQxKCksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgRG91YmxlUmVwTWFjaGluZUludFVzZToKLSAgICAgICAgICAgIHNldFN0cmlj
dEludDUyKAotICAgICAgICAgICAgICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoCi0gICAgICAgICAg
ICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVZhbHVlVG9JbnQzMigpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50NTJS
ZXBVc2U6Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJ
bnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICBzZXRJbnQzMihkb3Vi
bGVUb0ludDMyKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZTogewotICAgICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50
MzJWYWx1ZXMuZ2V0KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHNldEludDMyKHZhbHVlLnZhbHVlKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgc2V0SW50MzIobnVtYmVyT3JOb3RDZWxsVG9JbnQzMihtX25vZGUtPmNoaWxkMSgpLCB2YWx1
ZS52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ2xsIGJhc2ljYWxseSBqdXN0IGdldCBoZXJlIGZv
ciBjb25zdGFudHMuIEJ1dCBpdCdzIGdvb2QgdG8gaGF2ZSB0aGlzCi0gICAgICAgICAgICAvLyBj
YXRjaC1hbGwgc2luY2Ugd2Ugb2Z0ZW4gYWRkIG5ldyByZXByZXNlbnRhdGlvbnMgaW50byB0aGUg
bWl4LgotICAgICAgICAgICAgc2V0SW50MzIoCi0gICAgICAgICAgICAgICAgbnVtYmVyT3JOb3RD
ZWxsVG9JbnQzMigKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCb29sZWFuVG9OdW1iZXIoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6IHsKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0Lnplcm9FeHQobG93Qm9vbGVh
bihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuaW50MzIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNr
KG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sSW50MzIgfCBTcGVjQm9vbGVhbikpIHsKLSAgICAg
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobV9vdXQuY2FzdFRvSW50MzIodmFsdWUp
LCBtX291dC5pbnQzMk9uZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xlYW5Ub051bWJlciBib29sZWFuIGNhc2UiKSk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xlYW5Ub051bWJlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdEJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IodmFs
dWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQm9vbGVh
bih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAg
dW5zdXJlKGJvb2xlYW5DYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGJvb2xl
YW5DYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYm9vbGVh
blJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5iaXRPcigKLSAgICAgICAgICAgICAgICBtX291
dC56ZXJvRXh0KHVuYm94Qm9vbGVhbih2YWx1ZSksIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVt
YmVyKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGJvb2xlYW5SZXN1
bHQsIG5vdEJvb2xlYW5SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdm9pZCBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKQotICAgIHsKLSAgICAgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCi0g
ICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVm
ZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQotICAgIHsKLSAgICAg
ICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgYXJn
dW1lbnRzLiBGb3IgYXJndW1lbnRzLCB3ZSBtaWdodCBoYXZlCi0gICAgICAgIC8vIGFscmVhZHkg
bG9hZGVkIGl0LgotICAgICAgICBpZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRBcmd1bWVudFZh
bHVlcy5nZXQobV9ub2RlKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
LSAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRl
KGRhdGEtPmZvcm1hdCkpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0
YS0+Zm9ybWF0ICE9IEZsdXNoZWREb3VibGUpOyAvLyBUaGlzIGp1c3QgaGFwcGVucyB0byBub3Qg
YXJpc2UgZm9yIEdldFN0YWNrcywgcmlnaHQgbm93LiBJdCB3b3VsZCBiZSB0cml2aWFsIHRvIHN1
cHBvcnQuCi0gICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSkpCi0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihkYXRh
LT5tYWNoaW5lTG9jYWwpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQubG9hZDY0KGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVQdXRTdGFjaygpCi0gICAgewotICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBzd2l0Y2gg
KGRhdGEtPmZvcm1hdCkgewotICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7Ci0gICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1
ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKLSAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9j
YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBGbHVzaGVkSW50NTI6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwg
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewotICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46IHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwK
LSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZU5vT3AoKQotICAgIHsKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbV9ub2RlLCBzcGVjdWxhdGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVU
b1RoaXMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvVGhpcyBpcyBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgc2xvdyBj
YXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlRvVGhpcyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLCB1c3VhbGx5KGlzQ2VsbENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxs
Q2FzZSwgc2xvd0Nhc2UpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzVHlwZSh2YWx1ZSwgRmlu
YWxPYmplY3RUeXBlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKLSAgICAgICAgaWYgKG1fZ3Jh
cGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpczsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2
NCwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCi0gICAgewotICAgICAgICBlbWl0QmluYXJ5U25p
cHBldDxKSVRBZGRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQWRkKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlU3RyQ2F0KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB2bUNh
bGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25TdHJDYXQzKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwK
LSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uU3RyQ2F0MiksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bikpOwotICAgICAgICB9Ci0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlQXJpdGhBZGRPclN1YigpCi0gICAgewotICAgICAgICBib29sIGlz
U3ViID0gIG1fbm9kZS0+b3AoKSA9PSBBcml0aFN1YjsKLSAgICAgICAgc3dpdGNoIChtX25vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgICAg
IGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewotICAgICAg
ICAgICAgICAgIHNldEludDMyKGlzU3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0
LmFkZChsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGlz
U3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFk
ZChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc2V0SW50
MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogewotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikKLSAgICAgICAgICAg
ICAgICAmJiAhYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMigpKS5jb3VsZEJlVHlwZShTcGVj
SW50NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICAg
ICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5k
KTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBraW5kKTsKLSAgICAgICAgICAgICAgICBzZXRJbnQ1Mihpc1N1YiA/IG1fb3V0LnN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQpLCBraW5kKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBs
b3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxv
d0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0
ID0KLSAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdo
dCkgOiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgYmxlc3NT
cGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2lu
KTsKLSAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAg
ICAgICAgICBMVmFsdWUgQzEgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgQzIgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAg
ICAgIHNldERvdWJsZShpc1N1YiA/IG1fb3V0LmRvdWJsZVN1YihDMSwgQzIpIDogbV9vdXQuZG91
YmxlQWRkKEMxLCBDMikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIGlmICghaXNTdWIpIHsKLSAgICAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXRCaW5h
cnlTbmlwcGV0PEpJVFN1YkdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVTdWIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aENsejMyKCkKLSAg
ICB7Ci0gICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmN0bHozMihvcGVyYW5kKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAg
ICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotCi0gICAgICAgICAgICBpZiAoIXNob3VsZENo
ZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIENoZWNrVmFsdWUqIHNwZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQs
IHJpZ2h0KTsKLSAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc3BlY3VsYXRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE11bCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJv
KSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0g
ICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93
V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7Ci0gICAgICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBvcHBvc2l0ZShraW5kKSk7Ci0K
LSAgICAgICAgICAgIENoZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0
LCByaWdodCk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwg
c2xvdyBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxw
dHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybykpOwotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVz
c1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERv
dWJsZSgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAg
ICBlbWl0QmluYXJ5U25pcHBldDxKSVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlTXVsKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhE
aXYoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewot
ICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0
b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgaWYgKHNob3Vs
ZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgemVyb051bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhEaXYgemVybyBudW1lcmF0b3IiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVt
ZXJhdG9yQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBudW1l
cmF0b3IgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm8zMihudW1lcmF0b3IpLAotICAgICAgICAg
ICAgICAgICAgICByYXJlbHkoemVyb051bWVyYXRvciksIHVzdWFsbHkobnVtZXJhdG9yQ29udGlu
dWF0aW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oemVyb051bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKGRlbm9taW5hdG9yLCBtX291dC5pbnQz
Mlplcm8pKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVh
dGlvbiwgaW5uZXJMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoRGl2IHVuc2FmZSBkZW5vbWluYXRvciIpKTsKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoRGl2IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3Rl
ZERlbm9taW5hdG9yID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAg
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7
Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIExWYWx1
ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmlz
WmVybzMyKGRlbm9taW5hdG9yKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEp
KTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZGl2KG51bWVyYXRvciwgZGVub21pbmF0b3Ip
OwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobV9v
dXQubXVsKHJlc3VsdCwgZGVub21pbmF0b3IpLCBudW1lcmF0b3IpKTsKLSAgICAgICAgICAgICAg
ICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
c2V0SW50MzIobV9vdXQuY2hpbGxEaXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikpOwotCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlRGl2KAotICAg
ICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2
R2VuZXJhdG9yLCBOZWVkU2NyYXRjaEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhNb2QoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAg
ICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgTFZhbHVlIHJlbWFpbmRl
cjsKLSAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2Rl
KCkpKSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTW9kIHVuc2FmZSBkZW5vbWluYXRvciIpKTsKLSAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkFyaXRoTW9kIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIExWYWx1
ZSBhZGp1c3RlZERlbm9taW5hdG9yID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQz
Mk9uZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCi0gICAg
ICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9t
aW5hdG9yKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
ICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVn
MlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubW9kKG51bWVyYXRvciwgZGVu
b21pbmF0b3IpOwotICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IHJlc3VsdDsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IG1fb3V0LmNoaWxsTW9kKG51
bWVyYXRvciwgZGVub21pbmF0b3IpOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBuZWdhdGl2ZU51bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2Qg
bmVnYXRpdmUgbnVtZXJhdG9yIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVy
YXRvckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbnVtZXJh
dG9yIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obnVtZXJhdG9yLCBtX291dC5pbnQzMlpl
cm8pLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobmVnYXRpdmVOdW1lcmF0b3IpLCB1bnN1
cmUobnVtZXJhdG9yQ29udGludWF0aW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obmVnYXRpdmVOdW1lcmF0b3IsIG51bWVy
YXRvckNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzMyKHJlbWFpbmRlcikpOwotCi0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChudW1lcmF0b3JDb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0SW50MzIocmVtYWluZGVyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBE
b3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERvdWJsZSgKLSAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVNb2QobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhNaW5Pck1heCgpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SW50MzIoCi0gICAgICAgICAgICAgICAgbV9v
dXQuc2VsZWN0KAotICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4K
LSAgICAgICAgICAgICAgICAgICAgICAgID8gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICA6IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBsZWZ0KSwKLSAg
ICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RMZXNzVGhhbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggbm90IGxlc3MgdGhhbiIpKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhNaW4vQXJpdGhNYXggY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihsZWZ0KSk7Ci0gICAgICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCi0g
ICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgIDogbV9vdXQuZG91YmxlR3JlYXRlclRoYW4obGVmdCwgcmlnaHQp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90TGVzc1Ro
YW4pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhub3RMZXNzVGhhbiwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLT5vcCgpID09IEFyaXRoTWluCi0gICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91
YmxlR3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICA6
IG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCksCi0gICAgICAgICAgICAg
ICAgcmlnaHQsIG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKSkpOwotICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhBYnMoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAg
ICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5h
U2hyKHZhbHVlLCBtX291dC5jb25zdEludDMyKDMxKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQuYml0WG9yKG1hc2ssIG1fb3V0LmFkZChtYXNrLCB2YWx1ZSkpOwotCi0gICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1
YWwocmVzdWx0LCBtX291dC5jb25zdEludDMyKDEgPDwgMzEpKSk7Ci0KLSAgICAgICAgICAgIHNl
dEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0
aFNpbigpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVNpbihsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhDb3MoKSB7IHNldERvdWJsZShtX291
dC5kb3VibGVDb3MobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KLQotICAgIHZvaWQg
Y29tcGlsZUFyaXRoUG93KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBs
bHZtLnBvd2kgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3Rlcmlz
dGljcy4KLSAgICAgICAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBs
b29wIGluIERGRyB0b28uCi0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSkKLSAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudCA9IGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50
SXNTbWFsbEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyB0ZXN0IGludGVn
ZXIgZXhwb25lbnQgaXMgc21hbGwuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdl
ckV4cG9uZW50UG93QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhk
b3VibGUsIChpbnQpZG91YmxlKS4iKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVF
eHBvbmVudFBvd0Jsb2NrRW50cnkgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBv
dyhkb3VibGUsIGRvdWJsZSkuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0
aW9uRXhwb25lbnRJc0luZmluaXR5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBO
YU4gRXhjZXB0aW9uLCBjaGVjayBleHBvbmVudCBpcyBpbmZpbml0eS4iKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBuYW5FeGNlcHRpb25CYXNlSXNPbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoUG93IE5hTiBFeGNlcHRpb24sIGNoZWNrIGJhc2UgaXMgb25lLiIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0
aFBvdyByZWd1bGFyIHBvdyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlv
blJlc3VsdElzTmFOID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0
aW9uLCByZXN1bHQgaXMgTmFOLiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgY29udGludWF0aW9uIikpOwot
Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50ID0gbV9vdXQuZG91YmxlVG9JbnQo
ZXhwb25lbnQpOwotICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRv
RG91YmxlID0gbV9vdXQuaW50VG9Eb3VibGUoaW50ZWdlckV4cG9uZW50KTsKLSAgICAgICAgICAg
IExWYWx1ZSBleHBvbmVudElzSW50ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBp
bnRlZ2VyRXhwb25lbnRDb252ZXJ0ZWRUb0RvdWJsZSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goZXhwb25lbnRJc0ludGVnZXIsIHVuc3VyZShpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2sp
LCB1bnN1cmUoZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5KSk7Ci0KLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFs
bEJsb2NrLCBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayk7Ci0gICAgICAgICAgICBMVmFsdWUgaW50
ZWdlckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291
dC5jb25zdEludDMyKDEwMDApKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhw
b25lbnRCZWxvdzEwMDAsIHVzdWFsbHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHko
ZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5KSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGludGVnZXJFeHBvbmVudFBvd0Jsb2NrLCBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkp
OwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93RG91YmxlSW50UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmRvdWJsZVBvd2koYmFzZSwgaW50ZWdlckV4cG9uZW50KSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIElmIHkgaXMg
TmFOLCB0aGUgcmVzdWx0IGlzIE5hTi4KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJs
ZUV4cG9uZW50UG93QmxvY2tFbnRyeSwgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KTsK
LSAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElzTmFOOwotICAgICAgICAgICAgaWYgKHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDIoKSkgJiBTcGVjRG91YmxlTmFOKQotICAgICAgICAgICAgICAg
IGV4cG9uZW50SXNOYU4gPSBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKGV4cG9uZW50
LCBleHBvbmVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXhwb25lbnRJ
c05hTiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChleHBv
bmVudElzTmFOLCByYXJlbHkobmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1c3VhbGx5KG5hbkV4
Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSkpOwotCi0gICAgICAgICAgICAvLyBJZiBhYnMoeCkg
aXMgMSBhbmQgeSBpcyAraW5maW5pdHksIHRoZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAg
Ly8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMgLWluZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4K
LSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0
eSwgbmFuRXhjZXB0aW9uQmFzZUlzT25lKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4
cG9uZW50ID0gbV9vdXQuZG91YmxlQWJzKGV4cG9uZW50KTsKLSAgICAgICAgICAgIExWYWx1ZSBh
YnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlRXhw
b25lbnQsIG1fb3V0LmNvbnN0RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFic29sdXRlRXhwb25lbnRJc0lu
ZmluaXR5LCByYXJlbHkobmFuRXhjZXB0aW9uQmFzZUlzT25lKSwgdXN1YWxseShwb3dCbG9jaykp
OwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25CYXNlSXNPbmUsIHBv
d0Jsb2NrKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVB
YnMoYmFzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5k
b3VibGVFcXVhbChhYnNvbHV0ZUJhc2UsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChhYnNvbHV0ZUJhc2VJc09uZSwgdW5zdXJlKG5hbkV4Y2VwdGlvblJl
c3VsdElzTmFOKSwgdW5zdXJlKHBvd0Jsb2NrKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHBvd0Jsb2NrLCBuYW5FeGNlcHRpb25SZXN1bHRJc05hTik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBwb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93KGJhc2Us
IGV4cG9uZW50KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBl
LCBwb3dEb3VibGVJbnRSZXN1bHQsIHBvd1Jlc3VsdCwgcHVyZU5hbikpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhSYW5kb20oKQotICAgIHsKLSAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLQotICAgICAgICAvLyBJbmxpbmVkIFdlYWtSYW5kb206OmFk
dmFuY2UoKS4KLSAgICAgICAgLy8gdWludDY0X3QgeCA9IG1fbG93OwotICAgICAgICB2b2lkKiBs
b3dBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpT
R2xvYmFsT2JqZWN0Ojp3ZWFrUmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpsb3dPZmZzZXQo
KTsKLSAgICAgICAgTFZhbHVlIGxvdyA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShsb3dB
ZGRyZXNzKSk7Ci0gICAgICAgIC8vIHVpbnQ2NF90IHkgPSBtX2hpZ2g7Ci0gICAgICAgIHZvaWQq
IGhpZ2hBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSAr
IEpTR2xvYmFsT2JqZWN0Ojp3ZWFrUmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpoaWdoT2Zm
c2V0KCk7Ci0gICAgICAgIExWYWx1ZSBoaWdoID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRl
KGhpZ2hBZGRyZXNzKSk7Ci0gICAgICAgIC8vIG1fbG93ID0geTsKLSAgICAgICAgbV9vdXQuc3Rv
cmU2NChoaWdoLCBtX291dC5hYnNvbHV0ZShsb3dBZGRyZXNzKSk7Ci0KLSAgICAgICAgLy8geCBe
PSB4IDw8IDIzOwotICAgICAgICBMVmFsdWUgcGhhc2UxID0gbV9vdXQuYml0WG9yKG1fb3V0LnNo
bChsb3csIG1fb3V0LmNvbnN0SW50NjQoMjMpKSwgbG93KTsKLQotICAgICAgICAvLyB4IF49IHgg
Pj4gMTc7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTIgPSBtX291dC5iaXRYb3IobV9vdXQubFNocihw
aGFzZTEsIG1fb3V0LmNvbnN0SW50NjQoMTcpKSwgcGhhc2UxKTsKLQotICAgICAgICAvLyB4IF49
IHkgXiAoeSA+PiAyNik7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTMgPSBtX291dC5iaXRYb3IobV9v
dXQuYml0WG9yKGhpZ2gsIG1fb3V0LmxTaHIoaGlnaCwgbV9vdXQuY29uc3RJbnQ2NCgyNikpKSwg
cGhhc2UyKTsKLQotICAgICAgICAvLyBtX2hpZ2ggPSB4OwotICAgICAgICBtX291dC5zdG9yZTY0
KHBoYXNlMywgbV9vdXQuYWJzb2x1dGUoaGlnaEFkZHJlc3MpKTsKLQotICAgICAgICAvLyByZXR1
cm4geCArIHk7Ci0gICAgICAgIExWYWx1ZSByYW5kb202NCA9IG1fb3V0LmFkZChwaGFzZTMsIGhp
Z2gpOwotCi0gICAgICAgIC8vIEV4dHJhY3QgcmFuZG9tIDUzYml0LiBbMCwgNTNdIGJpdCBpcyBz
YWZlIGludGVnZXIgbnVtYmVyIHJhbmdlcyBpbiBkb3VibGUgcmVwcmVzZW50YXRpb24uCi0gICAg
ICAgIExWYWx1ZSByYW5kb201MyA9IG1fb3V0LmJpdEFuZChyYW5kb202NCwgbV9vdXQuY29uc3RJ
bnQ2NCgoMVVMTCA8PCA1MykgLSAxKSk7Ci0KLSAgICAgICAgTFZhbHVlIGRvdWJsZTUzSW50ZWdl
ciA9IG1fb3V0LmludFRvRG91YmxlKHJhbmRvbTUzKTsKLQotICAgICAgICAvLyBDb252ZXJ0IGAo
NTNiaXQgZG91YmxlIGludGVnZXIgdmFsdWUpIC8gKDEgPDwgNTMpYCB0byBgKDUzYml0IGRvdWJs
ZSBpbnRlZ2VyIHZhbHVlKSAqICgxLjAgLyAoMSA8PCA1MykpYC4KLSAgICAgICAgLy8gSW4gbGF0
dGVyIGNhc2UsIGAxLjAgLyAoMSA8PCA1MylgIHdpbGwgYmVjb21lIGEgZG91YmxlIHZhbHVlIHJl
cHJlc2VudGVkIGFzIChtYW50aXNzYSA9IDAgJiBleHAgPSA5NzAsIGl0IG1lYW5zIDFlLSgyKio1
NCkpLgotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlID0gMS4wIC8gKDFVTEwgPDwg
NTMpOwotCi0gICAgICAgIC8vIE11bHRpcGx5aW5nIDFlLSgyKio1NCkgd2l0aCB0aGUgZG91Ymxl
IGludGVnZXIgZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIG9mIHRoZSBtYW50aXNzYSBwYXJ0IG9m
IHRoZSBkb3VibGUgaW50ZWdlci4KLSAgICAgICAgLy8gSXQganVzdCByZWR1Y2VzIHRoZSBleHAg
cGFydCBvZiB0aGUgZ2l2ZW4gNTNiaXQgZG91YmxlIGludGVnZXIuCi0gICAgICAgIC8vIChFeGNl
cHQgZm9yIDAuMC4gVGhpcyBpcyBzcGVjaWFsbHkgaGFuZGxlZCBhbmQgaW4gdGhpcyBjYXNlLCBl
eHAganVzdCBiZWNvbWVzIDAuKQotICAgICAgICAvLyBOb3cgd2UgZ2V0IDUzYml0IHByZWNpc2lv
biByYW5kb20gZG91YmxlIHZhbHVlIGluIFswLCAxKS4KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IG1fb3V0LmRvdWJsZU11bChkb3VibGU1M0ludGVnZXIsIG1fb3V0LmNvbnN0RG91YmxlKHNjYWxl
KSk7Ci0KLSAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21w
aWxlQXJpdGhSb3VuZCgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayByZWFsUGFydElzTW9y
ZVRoYW5IYWxmID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFJvdW5kIHNob3VsZCByb3Vu
ZCBkb3duIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoUm91bmQgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGlu
dGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUNlaWwodmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21C
bG9jayBpbnRlZ2VyVmFsdWVSZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlKTsKLQot
ICAgICAgICBMVmFsdWUgcmVhbFBhcnQgPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCB2
YWx1ZSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQocmVhbFBhcnQsIG1fb3V0LmNvbnN0RG91YmxlKDAuNSkpLCB1bnN1cmUocmVhbFBh
cnRJc01vcmVUaGFuSGFsZiksIHVuc3VyZShjb250aW51YXRpb24pKTsKLQotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93biA9
IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2VyVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQgPSBtX291
dC5hbmNob3IoaW50ZWdlclZhbHVlUm91bmRlZERvd24pOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgaW50ZWdlclZhbHVlUmVzdWx0LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7Ci0K
LSAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkp
KSB7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50
MzIocmVzdWx0LCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdN
b2RlKCkpKTsKLSAgICAgICAgICAgIHNldEludDMyKGludGVnZXJWYWx1ZSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
b21waWxlQXJpdGhTcXJ0KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhMb2coKSB7IHNl
dERvdWJsZShtX291dC5kb3VibGVMb2cobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aEZSb3VuZCgpCi0gICAgewotICAgICAgICBzZXRE
b3VibGUobV9vdXQuZnJvdW5kKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aE5lZ2F0ZSgpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAg
aWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICgh
c2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyAiMCAtIHgiIGlzIHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGlu
IGJvdGggQjMgYW5kIExMVk0uIFRoaXMgZ2V0cwotICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQg
dG8gdGhlIHJpZ2h0IHRoaW5nLgotICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0g
bV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJsZXNzU3BlY3VsYXRpb24oY2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3JpZ2luKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVjazsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IDAsIG1fb3V0LnRlc3RJc1plcm8zMih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDdmZmZmZmZm
KSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsK
LSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJl
VHlwZShTcGVjSW50NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGls
ZDEoKSwga2luZCk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhNb2RlKCkpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAgICAgICAg
ICAgIHNldEludDUyKHJlc3VsdCwga2luZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0g
bV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0LmludDY0WmVybywgdmFsdWUpOwotICAgICAgICAgICAg
Ymxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1
ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAgIHNldEludDUyKHJl
c3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91
YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQml0QW5kKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
ewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRBbmRHZW5lcmF0b3I+
KG9wZXJhdGlvblZhbHVlQml0QW5kKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUJpdE9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRP
ckdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRPcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUJpdFhvcigpCi0gICAgewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBw
ZXQ8SklUQml0WG9yR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdFhvcik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0
UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFT
aHIoCi0gICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAg
IG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQz
MigzMSkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCi0gICAg
ewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAg
ICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihv
cGVyYXRpb25WYWx1ZUJpdExTaGlmdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgc2V0SW50MzIobV9vdXQuc2hsKAotICAgICAgICAgICAgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksCi0gICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVCaXRVUlNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0
KEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlVuc2lnbmVkU2hpZnQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmxTaHIoCi0gICAgICAgICAg
ICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgIGlm
IChkb2VzT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgIHNldERv
dWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
IHNldEludDMyKHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1
Y3R1cmUoKQotICAgIHsKLSAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgZXhpdEtpbmQgPSBC
YWRDb25zdGFudENhY2hlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0S2luZCA9IEJh
ZENhY2hlOwotCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
LSAgICAgICAgY2FzZSBDZWxsVXNlOgotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUo
Y2VsbCksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCks
Ci0gICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IENlbGxPck90aGVyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0
cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNC
bG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUg
Q2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2Vs
bE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQx
KCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENl
bGxDYXNlKTsKLSAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNl
dCgpLAotICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hp
bGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgQmFkQ2VsbCwganNWYWx1ZVZhbHVlKGNlbGwpLCBt
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSwKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGws
IHdlYWtQb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0JhZENlbGwoKQotICAgIHsKLSAgICAgICAgdGVybWlu
YXRlKEJhZENlbGwpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNoZWNrTm90RW1wdHkoKQot
ICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKFREWkZhaWx1cmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vdXQuaXNaZXJvNjQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZUNoZWNrSWRlbnQoKQotICAgIHsKLSAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fbm9kZS0+dWlkT3BlcmFuZCgpOwotICAgICAgICBpZiAodWlkLT5pc1N5
bWJvbCgpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgc3ltYm9sID0gbG93U3ltYm9sKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHN5bWJvbCwgbV9oZWFwcy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwotICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZElkZW50LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0lt
cGwsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50
UHRyKHVpZCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1
dGFibGUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBzcGVjdWxhdGVGdW5jdGlvbihtX25vZGUtPmNoaWxkMSgpLCBjZWxs
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNGdW5j
dGlvbl9leGVjdXRhYmxlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFycmF5aWZ5
VG9TdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSAhIW1fbm9kZS0+Y2hpbGQy
KCkgPyBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSA6IDA7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayB1bmV4cGVjdGVkU3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJB
cnJheWlmeVRvU3RydWN0dXJlIHVuZXhwZWN0ZWQgc3RydWN0dXJlIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9T
dHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAot
ICAgICAgICAgICAgcmFyZWx5KHVuZXhwZWN0ZWRTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyh1bmV4cGVjdGVkU3RydWN0dXJlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9y
RXF1YWwocHJvcGVydHksIG1fb3V0LmNvbnN0SW50MzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6Ci0gICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25FbnN1cmVJbnQzMiksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICB2
bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3Vi
bGUpLCBtX2NhbGxGcmFtZSwgY2VsbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMpLCBtX2NhbGxGcmFtZSwg
Y2VsbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgdm1DYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJl
QXJyYXlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJhZEluZGV4
aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSkpOwot
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlUHV0U3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29k
ZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3Bs
YW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwotICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwotICAgICAgICBBU1NF
UlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLQotICAg
ICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAotICAgICAgICBt
X291dC5zdG9yZTMyKAotICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZSks
Ci0gICAgICAgICAgICBjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxVc2U6IHsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUoZ2V0QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHdlaXJkLCBz
aW5jZSB3ZSBkdXBsaWNhdGUgdGhlIHNsb3cgcGF0aCBib3RoIGhlcmUgYW5kIGluIHRoZQotICAg
ICAgICAgICAgLy8gY29kZSBnZW5lcmF0ZWQgYnkgdGhlIElDLiBXZSBzaG91bGQgaW52ZXN0aWdh
dGUgbWFraW5nIHRoaXMgbGVzcyBiYWQuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODMwCi0gICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1
bnR5cGVkIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdldEJ5SWQodmFsdWUp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5SWRHZW5lcmljKSwKLSAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgdmFsdWUs
Ci0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygp
W21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgY2VsbFJlc3VsdCwgbm90Q2VsbFJlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQ
dXRCeUlkKCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIAot
ICAgICAgICAvLyBTZWUgYWJvdmU7IENlbGxVc2UgaXMgZWFzaWVyIHNvIHdlIGRvIG9ubHkgdGhh
dCBmb3Igbm93LgotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENl
bGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldOwotCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291
dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoYmFzZSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7
Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIFB1dEJ5SWRGbHVz
aCwgd2UgbWlnaHQgd2FudCB0byBsYXRlLWNsb2JiZXIgdm9sYXRpbGUgcmVnaXN0ZXJzLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4Ci0K
LSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRs
ZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2lu
dCk7Ci0KLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIEVDTUFN
b2RlIGVjbWFNb2RlID0gbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmVjbWFNb2RlKCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCi0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5q
aXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwotCi0gICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2Vw
dGlvbnMgPQotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhp
dENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBKUyBz
ZXR0ZXIgY2FsbCBJQ3MgZ2VuZXJhdGVkIGJ5IHRoZSBQdXRCeUlkIElDIHdpbGwgbmVlZCB0aGlz
LgotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25G
b3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Z2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5SWRHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0
ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdp
c3RlciwgZWNtYU1vZGUsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJ
ZERpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRM
YXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNs
b3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIGdlbmVyYXRvci0+c2xvd1BhdGhGdW5jdGlv
bigpLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3By
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+cmVwb3J0U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRo
Q2FsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0
QnV0dGVyZmx5KCkKLSAgICB7Ci0gICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVdpdGhC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
bXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKGxv
YWRCdXR0ZXJmbHlSZWFkT25seShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQotICAgIHsKLSAg
ICAgICAgc2V0U3RvcmFnZShtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVy
KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OlN0cmluZykgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgU3RyaW5nIHNs
b3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSBTdHJpbmcgY29udGlu
dWF0aW9uIikpOwotCi0gICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQu
bG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdE51bGwoZmFzdFJlc3VsdFZhbHVlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJl
bHkoc2xvd1BhdGgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uUmVzb2x2ZVJvcGUpLCBtX2NhbGxGcmFtZSwgY2VsbCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCksIG1faGVhcHMuU3RyaW5nSW1wbF9k
YXRhKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNldFN0b3JhZ2UobG9hZFZlY3RvcldpdGhCYXJyaWVyKGNlbGwpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlQ2hlY2tBcnJheSgpCi0gICAgewotICAgICAgICBFZGdlIGVkZ2UgPSBt
X25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoZWRnZSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZCht
X2dyYXBoLCBtX25vZGUsIGFic3RyYWN0VmFsdWUoZWRnZSkpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgQmFkSW5kZXhpbmdU
eXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5sb2dpY2FsTm90
KGlzQXJyYXlUeXBlKGNlbGwsIG1fbm9kZS0+YXJyYXlNb2RlKCkpKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGJhc2VQdHIgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOyAgICAKLQotICAgICAgICBM
QmFzaWNCbG9jayBzaW1wbGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFy
cmF5Qnl0ZU9mZnNldCB3YXN0ZWxlc3MgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHdhc3RlZnVsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5
dGVPZmZzZXQgd2FzdGVmdWwgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIG1vZGUgPSBtX291
dC5sb2FkMzIoYmFzZVB0ciwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKTsKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobW9kZSwgbV9vdXQu
Y29uc3RJbnQzMihXYXN0ZWZ1bFR5cGVkQXJyYXkpKSwKLSAgICAgICAgICAgIHVuc3VyZShzaW1w
bGVDYXNlKSwgdW5zdXJlKHdhc3RlZnVsQ2FzZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2ltcGxlQ2FzZSwgd2FzdGVmdWxDYXNlKTsKLQotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVPdXQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJ
bnRQdHIoMCkpOwotCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
TFZhbHVlIHZlY3RvclB0ciA9IGxvYWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKLSAgICAgICAg
TFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsKLSAg
ICAgICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIs
IG1faGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKLSAgICAgICAgTFZhbHVlIGRhdGFQdHIg
PSBtX291dC5sb2FkUHRyKGFycmF5QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEp
OwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yih2ZWN0b3JQdHIsIGRhdGFQdHIpKTsKLQotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotCi0gICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIHNpbXBsZU91dCwgd2FzdGVmdWxPdXQpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZUdldEFycmF5TGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93U3RvcmFnZSht
X25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBFeG90
aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgbV9vdXQu
bm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNf
b3ZlcnJpZGVzKSkpOwotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czogewotICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudHMsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwotICAgICAgICAgICAgc2V0SW50
MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3Vt
ZW50c190b3RhbExlbmd0aCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5
TW9kZSgpLmlzU29tZVR5cGVkQXJyYXlWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbnQz
MigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGls
ZUNoZWNrSW5Cb3VuZHMoKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVh
bChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAgICAgIG1faGVh
cHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
bG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkp
OwotICAgICAgICAgICAgICAgIExWYWx1ZSBpc0hvbGUgPSBtX291dC5pc1plcm82NChyZXN1bHQp
OwotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5zZWxlY3Qo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc0hvbGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgp
LCAwLCBpc0hvbGUpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGZhc3QgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQv
Y29udGlndW91cyBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGNv
bnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCkpLAotICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFs
bHkoZmFzdENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAg
ICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBz
dG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOwotICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGZhc3RS
ZXN1bHRWYWx1ZSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9
IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9h
ZERvdWJsZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGlu
ZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xl
LCBub1ZhbHVlKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGluQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUg
aW4gYm91bmRzIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm94UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgZG91YmxlIGJveGluZyIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3Vi
bGUgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgY29udGludWF0aW9uIikpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSks
Ci0gICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShpbkJvdW5kcykpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGluQm91bmRzLCBib3hQYXRoKTsKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1
ZSA9IG1fb3V0LmxvYWREb3VibGUoCi0gICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0
b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChkb3Vi
bGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSks
IHVzdWFsbHkoYm94UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhib3hQYXRoLCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGJveERvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5s
ZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAg
ICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAg
bV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRz
X292ZXJyaWRlcykpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBF
eG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgbV9v
dXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKSkpOwotCi0gICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19z
dG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgRXhv
dGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgICAgIG1fb3V0
LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX3RvdGFsTGVuZ3RoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgdGFi
bGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsK
LSAgICAgICAgICAgIExWYWx1ZSBuYW1lZExlbmd0aCA9IG1fb3V0LmxvYWQzMih0YWJsZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBuYW1lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFNjb3BlZEFyZ3VtZW50cyBuYW1lZCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgb3ZlcmZsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRB
cmd1bWVudHMgb3ZlcmZsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRz
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbmFtZWRMZW5ndGgp
LCB1bnN1cmUob3ZlcmZsb3dDYXNlKSwgdW5zdXJlKG5hbWVkQ2FzZSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5hbWVk
Q2FzZSwgb3ZlcmZsb3dDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHNj
b3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19zY29wZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cih0YWJsZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAg
ICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMs
IG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNl
dCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Bl
Y3VsYXRlKAotICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29u
c3RJbnQzMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hl
YXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzLCBzY29wZSwgbV9vdXQuemVyb0V4dFB0
cihzY29wZU9mZnNldCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8ob3ZlcmZsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKLSAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKG1fb3V0LnN1YihpbmRleCwgbmFtZWRMZW5ndGgpKSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgb3ZlcmZsb3dWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmlzWmVybzY0KG92ZXJmbG93VmFsdWUpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG92ZXJmbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG92ZXJmbG93VmFsdWUpOwotICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlWYWwpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aXNUeXBlZFZpZXcodHlwZSkpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRl
ciA9IFR5cGVkUG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5
UHJvcGVydGllcywKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6
ZSh0eXBlKSkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNTaWduZWQodHlw
ZSkgPyBtX291dC5sb2FkOFNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkOFplcm9FeHQz
Mihwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc1NpZ25l
ZCh0eXBlKSA/IG1fb3V0LmxvYWQxNlNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkMTZa
ZXJvRXh0MzIocG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9vdXQubG9hZDMyKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGVsZW1lbnQgc2l6ZSIpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVl
KCksIDAsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0Lnplcm9F
eHQocmVzdWx0LCBtX291dC5pbnQ2NCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZShyZXN1bHQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6Ci0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmZsb2F0VG9Eb3VibGUobV9vdXQubG9hZEZsb2F0KHBv
aW50ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZERv
dWJsZShwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB0eXBlZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0gfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRNeUFy
Z3VtZW50QnlWYWwoKQotICAgIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgbGltaXQ7Ci0gICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50MzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQot
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3RlcjsKLSAgICAgICAgICAgIGxpbWl0ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXls
b2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIDAsIG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbGltaXQpKTsKLSAgICAgICAgCi0gICAg
ICAgIFR5cGVkUG9pbnRlciBiYXNlOwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIDw9IDEpIHsK
LSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBkdWUgdG8g
dGhlIGJvdW5kcyBjaGVjaywgYWJvdmUuIEp1c3QgdGVsbCB0aGUKLSAgICAgICAgICAgICAgICAv
LyBjb21waWxlciB0aGF0IGFueXRoaW5nIGRvbWluYXRlZCBieSB0aGlzIGluc3RydWN0aW9uIGlz
IG5vdCByZWFjaGFibGUsIHNvCi0gICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCB3YXN0
ZSB0aW1lIGdlbmVyYXRpbmcgc3VjaCBjb2RlLiBUaGlzIHdpbGwgYWxzbyBwbGFudCBzb21lCi0g
ICAgICAgICAgICAgICAgLy8ga2luZCBvZiBjcmFzaGluZyBpbnN0cnVjdGlvbiBzbyB0aGF0IGlm
IGJ5IHNvbWUgZmx1a2UgdGhlIGJvdW5kcyBjaGVjayBkaWRuJ3QKLSAgICAgICAgICAgICAgICAv
LyB3b3JrLCB3ZSdsbCBjcmFzaCBpbiBhbiBlYXN5LXRvLXNlZSB3YXkuCi0gICAgICAgICAgICAg
ICAgZGlkQWxyZWFkeVRlcm1pbmF0ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBiYXNlID0gYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAg
ICAgICAgIGJhc2UudmFsdWUoKSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwg
U2NhbGVFaWdodCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KFR5cGVkUG9pbnRl
cihtX2hlYXBzLnZhcmlhYmxlcy5hdEFueUluZGV4KCksIHBvaW50ZXIpKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsKCkKLSAgICB7Ci0gICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwotICAgICAgICBFZGdlIGNoaWxkMiA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7Ci0gICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpOwotICAgICAgICBFZGdlIGNoaWxkNSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzog
ewotICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRpb247Ci0gICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJp
Y3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLAot
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBs
b3dKU1ZhbHVlKGNoaWxkMykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxkMSk7Ci0gICAgICAgIExWYWx1
ZSBpbmRleCA9IGxvd0ludDMyKGNoaWxkMik7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShjaGlsZDQpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlB1dEJ5VmFsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dGVy
TGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhtX291dC5tX2Jsb2NrLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGNoaWxkMywgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyKQotICAgICAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBjaGlsZDMsIFNwZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9
IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5p
bmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
LCBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY29udGlndW91c1B1dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgICAgICAgICAg
ICAgIGNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKQotICAgICAgICAgICAgICAgICAgICA/IG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QKLSAgICAgICAgICAgICAgICAg
ICAgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAg
ICAgICAgICAgICAgICBiYXNlLCBzdG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwg
ZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAg
ICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgY2hpbGQzLCBTcGVjRG91YmxlUmVhbCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgZWxlbWVu
dFBvaW50ZXIgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMu
aW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
LAotICAgICAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGVsZW1lbnRQ
b2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9m
Qm91bmRzKAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkK
LSAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0Ci0gICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0RG91YmxlQnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKLSAgICAgICAgICAgICAgICAgICAgYmFzZSwg
c3RvcmFnZSwgaW5kZXgsIHZhbHVlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIG91dGVyTGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFR5cGVkQXJy
YXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyh0eXBlKSkgewotICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBwb2ludGVyID0gVHlwZWRQb2ludGVyKAotICAgICAgICAgICAg
ICAgICAgICBtX2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc2hsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludFB0ciksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIE91dHB1dDo6U3RvcmVUeXBlIHN0b3JlVHlwZTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1N0b3JlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBM
VmFsdWUgaW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQzLnVzZUtp
bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQzLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRWYWx1ZSA9IGxvd0ludDMyKGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5jYXN0VG9J
bnQzMihsb3dTdHJpY3RJbnQ1MihjaGlsZDMpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzQ2xhbXBlZCh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgaW50IGNsYW1wIGF0TGVhc3RaZXJvIikpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgaW50IGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGludFZhbHVlczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmxlc3NUaGFuKGludFZhbHVlLCBtX291dC5pbnQz
Mlplcm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKGF0TGVhc3RaZXJvKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhhdExlYXN0WmVybywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5k
KG1fb3V0LmFuY2hvcihtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmdyZWF0ZXJUaGFuKGludFZhbHVlLCBtX291dC5jb25zdEludDMyKDI1NSkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKDI1NSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlKSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBk
b3VibGVWYWx1ZSA9IGxvd0RvdWJsZShjaGlsZDMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGF0TGVhc3RaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBk
b3VibGUgY2xhbXAgYXRMZWFzdFplcm8iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgd2l0aGluUmFuZ2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFs
IGRvdWJsZSBjbGFtcCB3aXRoaW5SYW5nZSIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5
VmFsIGRvdWJsZSBjbGFtcCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
LCAzPiBpbnRWYWx1ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFw
cGVuZChtX291dC5hbmNob3IobV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBtX291dC5kb3VibGVa
ZXJvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlv
biksIHVuc3VyZShhdExlYXN0WmVybykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oYXRMZWFzdFplcm8sIHdpdGhpblJhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDI1
NSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuKGRvdWJsZVZh
bHVlLCBtX291dC5jb25zdERvdWJsZSgyNTUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZSh3aXRoaW5SYW5nZSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVRvSW50
KGRvdWJsZVZhbHVlKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW50VmFsdWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0gZG91YmxlVG9JbnQzMihkb3VibGVWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVRvU3RvcmUgPSBpbnRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzJBczg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTMyQXMxNjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgZWxlbWVudCBzaXplIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgLyogIWlzSW50KHR5cGUpICovIHsKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVUb1N0b3JlID0gbV9vdXQuZG91YmxlVG9GbG9hdCh2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRmxvYXQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IHZh
bHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURv
dWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB0eXBlZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpIHx8IG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZh
bEFsaWFzKQotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUsIHBv
aW50ZXIsIHN0b3JlVHlwZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlzSW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1
dEJ5VmFsIHR5cGVkIGFycmF5IGluIGJvdW5kcyBjYXNlIikpOwotICAgICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5
VmFsIHR5cGVkIGFycmF5IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbG93SW50MzIoY2hpbGQ1KSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzSW5Cb3VuZHMpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbkJvdW5kcywgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5
cGUpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxl
UHV0QWNjZXNzb3JCeUlkKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMigpKTsKLSAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9w
KCkgPT0gUHV0R2V0dGVyQnlJZCA/IG9wZXJhdGlvblB1dEdldHRlckJ5SWQgOiBvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25z
dEludFB0cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVz
KCkpLCBhY2Nlc3Nvcik7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlUHV0R2V0dGVyU2V0dGVy
QnlJZCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBnZXR0ZXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBMVmFsdWUgc2V0dGVyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygp
KTsKLSAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lk
VHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciksCi0gICAgICAg
ICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29u
c3RJbnQzMihtX25vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgZ2V0dGVyLCBzZXR0ZXIpOwot
Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeVZhbCgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExW
YWx1ZSBzdWJzY3JpcHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBM
VmFsdWUgYWNjZXNzb3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICB2bUNh
bGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJh
dGlvbihtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlWYWwgPyBvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCA6IG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1l
LCBiYXNlLCBzdWJzY3JpcHQsIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJp
YnV0ZXMoKSksIGFjY2Vzc29yKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJyYXlQ
dXNoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQz
KCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFs
dWUgdmFsdWU7Ci0gICAgICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikgewotICAgICAg
ICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNJbnQzMiwgaXNOb3RJbnQz
Mih2YWx1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdG9yZVR5cGUg
PSBPdXRwdXQ6OlN0b3JlNjQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgIEZU
TF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQyKCksIFNwZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkpOwotICAgICAgICAgICAg
ICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3RvcmVEb3VibGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBz
LmZvckFycmF5VHlwZShtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSk7Ci0KLSAgICAgICAgICAg
IExWYWx1ZSBwcmV2TGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVB1c2ggZmFzdCBwYXRoIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFycmF5UHVzaCBzbG93IHBhdGgiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UHVzaCBjb250aW51YXRpb24i
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIHByZXZMZW5ndGgs
IG1fb3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoZmFzdFBhdGgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmUoCi0gICAg
ICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBtX291dC56
ZXJvRXh0UHRyKHByZXZMZW5ndGgpKSwgc3RvcmVUeXBlKTsKLSAgICAgICAgICAgIExWYWx1ZSBu
ZXdMZW5ndGggPSBtX291dC5hZGQocHJldkxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmUzMihuZXdMZW5ndGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYm94SW50MzIobmV3TGVuZ3RoKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZh
bHVlIG9wZXJhdGlvbjsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSAhPSBBcnJheTo6RG91YmxlKQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2hEb3Vi
bGUpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxs
RnJhbWUsIHZhbHVlLCBiYXNlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50
NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcnJheVBvcCgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKLSAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgSW5kZXhlZEFic3Ry
YWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UG9wIGZhc3QgY2FzZSIpKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBv
cCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UG9wIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmlzWmVybzMyKHByZXZMZW5ndGgpLCByYXJlbHkoY29udGludWF0aW9uKSwg
dXN1YWxseShmYXN0Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgbmV3TGVuZ3RoID0gbV9vdXQuc3ViKHByZXZMZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdlLCBtX2hl
YXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBv
aW50ZXIgPSBtX291dC5iYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihu
ZXdMZW5ndGgpKTsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAh
PSBBcnJheTo6RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmxvYWQ2NChwb2ludGVyKTsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0Lmlu
dDY0WmVybywgcG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQu
YW5jaG9yKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5sb2FkRG91YmxlKHBvaW50ZXIpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQobV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBwb2ludGVyKTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3IoYm94RG91YmxlKHJlc3VsdCkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKHJlc3VsdCwgcmVzdWx0
KSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xv
d0Nhc2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKSwgbV9jYWxs
RnJhbWUsIGJhc2UpKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJl
c3VsdHMpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5
cGUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBzY29w
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJs
ZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpOwotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwotICAgICAgICBKU1ZhbHVlIGluaXRpYWxp
emF0aW9uVmFsdWUgPSBtX25vZGUtPmluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCk7
Ci0gICAgICAgIEFTU0VSVChpbml0aWFsaXphdGlvblZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgaW5p
dGlhbGl6YXRpb25WYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwotICAgICAgICBpZiAodGFibGUtPnNp
bmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwKLSAgICAgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCks
IG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgICAgIHNj
b3BlLCB3ZWFrUG9pbnRlcih0YWJsZSksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGluaXRpYWxpemF0aW9uVmFsdWUpKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZh
dGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZhdGlvbiBjb250aW51YXRpb24iKSk7Ci0g
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZmFzdE9iamVj
dCA9IGFsbG9jYXRlT2JqZWN0PEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAgICAgICAgIEpT
TGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVyZSwgbV9v
dXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2
YXRpb24sIHNvIHRoZQotICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCi0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4
dCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVj
dCwgbV9oZWFwcy5KU1N5bWJvbFRhYmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSksCi0gICAgICAgICAg
ICAgICAgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tp
XSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1
bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQ
dHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0
ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7Ci0gICAgICAg
ICAgICB9LAotICAgICAgICAgICAgc2NvcGUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRy
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgPT0gTmV3
RnVuY3Rpb24gfHwgbV9ub2RlLT5vcCgpID09IE5ld0Fycm93RnVuY3Rpb24gfHwgbV9ub2RlLT5v
cCgpID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uKTsKLSAgICAgICAgYm9vbCBpc0dlbmVyYXRvckZ1
bmN0aW9uID0gbV9ub2RlLT5vcCgpID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uOwotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2Fz
dE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKLSAgICAgICAgaWYgKGV4ZWN1dGFibGUt
PnNpbmdsZXRvbkZ1bmN0aW9uKCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBMVmFs
dWUgY2FsbFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IHZt
Q2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgot
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRh
YmxlKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9Ci0gICAgICAgICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVy
ZSgpIDoKLSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBzbG93
IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiTmV3RnVuY3Rpb24gY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPQotICAgICAgICAg
ICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IGFsbG9jYXRlT2JqZWN0PEpTR2VuZXJhdG9yRnVuY3Rp
b24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpIDoKLSAgICAgICAgICAg
IGFsbG9jYXRlT2JqZWN0PEpTRnVuY3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
c2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQg
bWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBmdW5jdGlvbiwg
c28gaXQKLSAgICAgICAgLy8gbXVzdCBiZSB5b3VuZy4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIo
c2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9zY29wZSk7Ci0gICAgICAgIG1f
b3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKGV4ZWN1dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBz
LkpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0Lmlu
dFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9yYXJlRGF0YSk7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAg
ICBWZWN0b3I8TFZhbHVlPiBzbG93UGF0aEFyZ3VtZW50czsKLSAgICAgICAgc2xvd1BhdGhBcmd1
bWVudHMuYXBwZW5kKHNjb3BlKTsKLSAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xv
d1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzR2VuZXJhdG9yRnVuY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgc2xvd1BhdGhBcmd1bWVudHMpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0
ZURpcmVjdEFyZ3VtZW50cygpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVj
dGl2ZSB3YXkgb2YgZGVhbGluZyB3aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlz
IHRvIGhhdmUKLSAgICAgICAgLy8gdGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBu
b2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQyMjA3Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9Ci0gICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRp
cmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbWlu
Q2FwYWNpdHkgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+bnVtUGFyYW1ldGVycygpIC0gMTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVu
dHMgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBBcmd1bWVudHNMZW5n
dGggbGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICBMVmFs
dWUgZmFzdE9iamVjdDsKLSAgICAgICAgaWYgKGxlbmd0aC5pc0tub3duKSB7Ci0gICAgICAgICAg
ICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAg
ICAgICAgICBEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKHN0ZDo6bWF4KGxlbmd0aC5r
bm93biwgbWluQ2FwYWNpdHkpKSwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgIG1fb3V0Lmlu
dFB0clplcm8sIHNsb3dQYXRoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExWYWx1
ZSBzaXplID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgICAgIG1fb3V0LnNobChsZW5ndGgudmFs
dWUsIG1fb3V0LmNvbnN0SW50MzIoMykpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2l6ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICBtX291dC5hYm92
ZU9yRXF1YWwobGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCi0g
ICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFs
bG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
YXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4o
Ci0gICAgICAgICAgICAgICAgc2l6ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93
UGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3Ro
LnZhbHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwotICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpLCBmYXN0T2Jq
ZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19taW5DYXBhY2l0eSk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJn
dW1lbnRzX292ZXJyaWRlcyk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgo
Ci0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25D
cmVhdGVEaXJlY3RBcmd1bWVudHMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKLSAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJl
c3VsdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7Ci0KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoZ2V0Q3VycmVudENhbGxlZSgpLCByZXN1bHQs
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2NhbGxlZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFz
c2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGxlbmd0aC5rbm93
biwgbWluQ2FwYWNpdHkpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihzdGFydCArIGkpKSwK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9y
YWdlW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExW
YWx1ZSBzdGFja0Jhc2UgPSBnZXRBcmd1bWVudHNTdGFydCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVE
aXJlY3RBcmd1bWVudHMgbG9vcCBib2R5IikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZW5k
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBlbmQi
KSk7Ci0KLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsTGVuZ3RoOwotICAgICAg
ICAgICAgaWYgKG1pbkNhcGFjaXR5KSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNhcGFjaXR5
ID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
bGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCi0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aC52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihtaW5DYXBhY2l0eSkpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0
aFZhbHVlID0gbV9vdXQuemVyb0V4dFB0cihjYXBhY2l0eSk7Ci0gICAgICAgICAgICAgICAgb3Jp
Z2luYWxMZW5ndGggPSBtX291dC5hbmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgTFZhbHVlIG9yaWdpbmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGxl
bmd0aC52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5hbmNo
b3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmlzTnVsbChvcmlnaW5hbExlbmd0aFZhbHVlKSwgdW5zdXJlKGVuZCksIHVuc3VyZShsb29w
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8obG9vcCwgZW5kKTsKLSAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c0lu
ZGV4ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgb3JpZ2luYWxMZW5ndGgpOwotICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9u
ZSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIG1fb3V0Lmxv
YWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHN0YWNrQmFzZSwgaW5kZXgp
KSwKLSAgICAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVu
dHNfc3RvcmFnZSwgcmVzdWx0LCBpbmRleCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKLSAgICAgICAgICAgIG1fb3V0LmFkZElu
Y29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKLSAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5pc051bGwoaW5kZXgpLCB1bnN1cmUoZW5kKSwgdW5zdXJlKGxvb3ApKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZW5kLCBsYXN0TmV4dCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCkKLSAgICB7Ci0g
ICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMpLCBtX2Nh
bGxGcmFtZSwKLSAgICAgICAgICAgIHdlYWtQb2ludGVyKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2NvcGVkQXJndW1l
bnRzU3RydWN0dXJlKCkpLAotICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJn
dW1lbnRzTGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSwgc2NvcGUpOwotICAgICAg
ICAKLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICB3
ZWFrUG9pbnRlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKLSAg
ICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVl
LCBnZXRDdXJyZW50Q2FsbGVlKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNvcHlSZXN0KCkKLSAgICB7ICAgICAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGRvQ29weVJlc3QgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkNvcHlSZXN0IEMgY2FsbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGaWxsUmVzdFBhcmFtZXRlciBjb250aW51YXRpb24i
KSk7Ci0KLSAgICAgICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwo
YXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAotICAgICAgICAgICAgdW5zdXJlKGNv
bnRpbnVhdGlvbiksIHVuc3VyZShkb0NvcHlSZXN0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51
YXRpb24pOwotICAgICAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAy
OmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkg
bGVuZ3RoCi0gICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNv
bnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgdm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkNvcHlSZXN0KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgYXJy
YXlMZW5ndGgpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBjb21waWxlR2V0UmVzdExlbmd0aCgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBub25a
ZXJvTGVuZ3RoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIG5vbiB6ZXJv
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldFJlc3RMZW5ndGggY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgemVyb0xlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25z
dEludDMyKDApKTsKLQotICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBt
X291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAg
ICAgIExWYWx1ZSBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApLAotICAgICAgICAgICAgdW5zdXJlKG5vblplcm9MZW5ndGgpLCB1
bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vblplcm9MZW5ndGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG5vblplcm9MZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuc3ViKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKLSAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LnBo
aShtX291dC5pbnQzMiwgemVyb0xlbmd0aFJlc3VsdCwgbm9uWmVyb0xlbmd0aFJlc3VsdCkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQotICAgIHsKLSAgICAgICAg
c2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKLSAgICB7Ci0gICAgICAgIC8vIEZpcnN0
IHNwZWN1bGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4uIERvIHRoaXMg
dW5jb25kaXRpb25hbGx5IHVwIGhlcmUKLSAgICAgICAgLy8gYmVjYXVzZSBzb21lIG9mIHRoZSBz
bG93IHBhdGhzIG1heSBvdGhlcndpc2UgZm9yZ2V0IHRvIGRvIGl0LiBJdCdzIHNvcnQgb2YgYXJn
dWFibGUKLSAgICAgICAgLy8gdGhhdCBkb2luZyB0aGUgc3BlY3VsYXRpb25zIHVwIGhlcmUgbWln
aHQgYmUgdW5wcm9maXRhYmxlIGZvciBSQSAtIHNvIHdlIGNhbiBjb25zaWRlcgotICAgICAgICAv
LyBzaW5raW5nIHRoaXMgdG8gYmVsb3cgdGhlIGFsbG9jYXRpb24gZmFzdCBwYXRoIGlmIHdlIGZp
bmQgdGhhdCB0aGlzIGhhcyBhIGxvdCBvZgotICAgICAgICAvLyByZWdpc3RlciBwcmVzc3VyZS4K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBt
X25vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgc3BlY3Vs
YXRlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpKTsKLSAgICAgICAg
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKLQotICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJh
eVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1
cmUsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZGV4aW5nIHR5cGUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmVEb3VibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUoZWRnZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbHVlcy5idXR0ZXJmbHksIG1faGVhcHMuaW5k
ZXhlZERvdWJsZVByb3BlcnRpZXNbb3BlcmFuZEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5p
bmRleGluZ1R5cGUoKSktPmF0KG9wZXJhbmRJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW5k
ZXhpbmcgdHlwZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEpTVmFsdWUo
YXJyYXlWYWx1ZXMuYXJyYXkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5KSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogbV9ub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICBBU1NF
UlQoc2NyYXRjaFNpemUpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29kZWRK
U1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJh
bmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVy
YW5kSW5kZXgpIHsKLSAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCBvcGVyYW5kSW5kZXgpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZEluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoc2NyYXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVm
ZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXkpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSksIG1fb3V0LmNvbnN0SW50UHRyKGJ1ZmZlciksCi0gICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihtX25vZGUtPm51bUNoaWxkcmVuKCkpKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIG1fb3V0LmFic29sdXRlKHNjcmF0
Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5ld0FycmF5QnVmZmVy
KCkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtX25vZGUtPm51bUNvbnN0YW50cygpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9j
YXRlSlNBcnJheShzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZSogZGF0YSA9IGNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihtX25vZGUt
PnN0YXJ0Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtX25vZGUtPm51bUNvbnN0YW50cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgaW50NjRfdCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihkYXRhW2luZGV4XS5hc051bWJlcigpKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhd
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHZhbHVlKSwKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICBtX2hlYXBz
LmZvckluZGV4aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheVZh
bHVlcy5hcnJheSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciksIG1fY2FsbEZyYW1lLAotICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5zdGFydENvbnN0YW50KCkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5udW1Db25zdGFudHMoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTmV3
QXJyYXlXaXRoU2l6ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgcHVibGljTGVuZ3RoID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAotICAgICAgICAg
ICAgbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAg
ICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAg
ICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAg
IHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAg
IHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotCi0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJy
YXlXaXRoU2l6ZSBmYXN0IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgbGFyZ2UgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOZXdBcnJheVdpdGhTaXplIGZhaWwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIHNs
b3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291
dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9T
VE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkobGFy
Z2VDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4g
Zm9yIG5ldyBBcnJheShibGFoKS4KLSAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBw
dWJsaWNMZW5ndGg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6
ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3Ro
LCBtX291dC5pbnRQdHIpLCBtX291dC5jb25zdEludFB0cigzKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlTaXplID0gbV9vdXQuYWRkKAotICAgICAgICAgICAg
ICAgIHBheWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxv
Y2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoZW5kT2ZT
dG9yYWdlLCBwYXlsb2FkU2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFp
bENhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHB1YmxpY0xl
bmd0aCwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0Rv
dWJsZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGluaXRMb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGRv
dWJsZSBpbml0IGxvb3AiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdERvbmUg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgZG9u
ZSIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBv
cmlnaW5hbEluZGV4ID0gbV9vdXQuYW5jaG9yKHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxQb2ludGVyID0gbV9vdXQuYW5jaG9yKGJ1dHRlcmZs
eSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RaZXJvMzIodmVjdG9yTGVuZ3RoKSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGlu
aXREb25lKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
aW5pdExhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5pdExvb3AsIGluaXREb25lKTsKLSAgICAg
ICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkobV9vdXQuaW50MzIsIG9yaWdpbmFs
SW5kZXgpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKG1fb3V0
LmludFB0ciwgb3JpZ2luYWxQb2ludGVyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAgIFR5cGVk
UG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9p
bnRlcikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0SW5k
ZXggPSBtX291dC5zdWIoaW5kZXgsIG1fb3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwb2ludGVyLCBtX291dC5hbmNo
b3IobV9vdXQuYWRkKHBvaW50ZXIsIG1fb3V0LmludFB0ckVpZ2h0KSkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG5l
eHRJbmRleCksIHVuc3VyZShpbml0TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluaXREb25lLCBpbml0TGFz
dE5leHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG9iamVjdCk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGxhcmdlQ2FzZSwgZmFpbENhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbGFyZ2VTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCi0gICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwotICAgICAgICAgICAgbV9v
dXQuanVtcChzbG93Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGZhaWxDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYWls
U3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpOwot
ICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
TFZhbHVlIHN0cnVjdHVyZVZhbHVlID0gbV9vdXQucGhpKAotICAgICAgICAgICAgICAgIG1fb3V0
LmludFB0ciwgbGFyZ2VTdHJ1Y3R1cmUsIGZhaWxTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgTFZh
bHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0g
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0
aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKLSAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNM
ZW5ndGgpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5z
ZWxlY3QoCi0gICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291
dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJl
KSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSksIG1fY2FsbEZyYW1lLCBzdHJ1Y3R1cmVWYWx1
ZSwgcHVibGljTGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJh
eSgpCi0gICAgewotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT50eXBlZEFy
cmF5VHlwZSgpOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNl
IEludDMyVXNlOiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZSh0eXBlKTsKLQotICAgICAgICAgICAgTFZhbHVlIHNp
emUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgc21hbGxFbm91Z2hDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5
IHNtYWxsIGVub3VnaCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm9uWmVyb0Nh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld1R5cGVkQXJyYXkgbm9uLXplcm8gY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOZXdUeXBlZEFycmF5IHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBjb250
aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZShzaXplLCBtX291dC5jb25zdEludDMyKEpTQXJyYXlCdWZmZXJWaWV3Ojpm
YXN0U2l6ZUxpbWl0KSksCi0gICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxs
eShzbWFsbEVub3VnaENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbEVub3VnaENhc2UsIG5vblplcm9DYXNlKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihzaXplKSwgdXN1YWxseShub25aZXJv
Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhu
b25aZXJvQ2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAgICBMVmFsdWUgYnl0ZVNpemUgPQot
ICAgICAgICAgICAgICAgIG1fb3V0LnNobChtX291dC56ZXJvRXh0UHRyKHNpemUpLCBtX291dC5j
b25zdEludDMyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dFNpemUodHlwZSkgPCA4KSB7Ci0gICAgICAgICAgICAgICAgYnl0ZVNpemUgPSBtX291dC5iaXRB
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZChieXRlU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoNykpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cih+c3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KDcpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAg
ICAgTFZhbHVlIHN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZShieXRlU2l6ZSwgc2xvd0Nh
c2UpOwotCi0gICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0KLSAgICAgICAgICAg
ICAgICBhbGxvY2F0ZU9iamVjdDxKU0FycmF5QnVmZmVyVmlldz4oc3RydWN0dXJlLCBtX291dC5p
bnRQdHJaZXJvLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHN0b3Jh
Z2UsIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwot
ICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihzaXplLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMu
SlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9v
dXQuY29uc3RJbnQzMihGYXN0VHlwZWRBcnJheSksIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5K
U0FycmF5QnVmZmVyVmlld19tb2RlKTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
Q2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1
ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUo
dHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2l6ZSk7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dS
ZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
Ci0gICAgICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
TmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUodHlwZSkpLAotICAgICAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUodHlwZSkpLCBhcmd1bWVudCk7Ci0KLSAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG9iamVj
dCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldFN0b3JhZ2UoYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkK
LSAgICB7Ci0gICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBtX25vZGUtPnRyYW5zaXRp
b24oKTsKLSAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UoCi0gICAgICAgICAgICByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJh
bnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5leHQpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb21waWxlVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
U3RyaW5nT2JqZWN0VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxs
KG1fbm9kZS0+Y2hpbGQxKCksIGNlbGwpOwotICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0
ZXIobV9ub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZ09iamVjdCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBl
ck9iamVjdF9pbnRlcm5hbFZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOiB7Ci0g
ICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIFN0cmluZ09yU3Ry
aW5nT2JqZWN0IG5vdCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgU3RyaW5nT3JTdHJp
bmdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBzaW1wbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2VsbCk7Ci0gICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQs
IG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKLSAgICAgICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vdFN0cmluZywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09i
amVjdEZvclN0cnVjdHVyZUlEKG1fbm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWRSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAg
ICAgICAgICAgICAgbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9p
bnRlcm5hbFZhbHVlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNp
bXBsZVJlc3VsdCwgdW5ib3hlZFJlc3VsdCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nIHwgU3BlY1N0
cmluZ09iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBD
ZWxsVXNlL1VudHlwZWRVc2UgaXMgY2VsbCIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVk
VXNlIG5vdCBzdHJpbmciKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBjb250
aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBpc0NlbGxQcmVk
aWNhdGU7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSkKLSAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuVHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSB0
aGlzLT5pc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbFByZWRpY2F0ZSwgdW5zdXJlKGlzQ2VsbCksIHVuc3Vy
ZShub3RTdHJpbmcpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGwsIG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBzaW1wbGVSZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOwotICAgICAg
ICAgICAgTFZhbHVlIGlzU3RyaW5nUHJlZGljYXRlOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBp
c1N0cmluZ1ByZWRpY2F0ZSA9IGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJl
ZGljYXRlID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
U3RyaW5nUHJlZGljYXRlLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwotICAgICAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/
IG9wZXJhdGlvblRvU3RyaW5nT25DZWxsIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9y
T25DZWxsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBt
X291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJp
bmcgOiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0b3IpOwotICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgY29udmVydGVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChtX291dC5pbnQ2
NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnQ2NCwgc2ltcGxlUmVzdWx0LCBjb252ZXJ0ZWRSZXN1bHQpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVUb1ByaW1pdGl2ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9QcmltaXRpdmUgY2VsbCBjYXNlIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBpc09iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvUHJpbWl0aXZlIG9iamVjdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkp
OwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250
aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNPYmplY3RDYXNlKTsKLSAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVuc3VyZShpc09iamVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpc09iamVjdENhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlKSwg
bV9jYWxsRnJhbWUsIHZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTWFrZVJvcGUoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIGtpZHNbM107Ci0gICAgICAgIHVuc2lnbmVkIG51bUtpZHM7Ci0gICAgICAgIGtpZHNb
MF0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBraWRzWzFdID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKLSAg
ICAgICAgICAgIGtpZHNbMl0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAg
ICAgbnVtS2lkcyA9IDM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBraWRzWzJdID0g
MDsKLSAgICAgICAgICAgIG51bUtpZHMgPSAyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUg
c2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk1ha2VSb3BlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0K
LSAgICAgICAgICAgIHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcihz
aXplb2YoSlNSb3BlU3RyaW5nKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
YWxsb2NhdGVDZWxsKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciks
Ci0gICAgICAgICAgICB2bSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgIHNs
b3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clpl
cm8sIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1LaWRzOyArK2kpCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihr
aWRzW2ldLCByZXN1bHQsIG1faGVhcHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUtpZHM7IGkgPCBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQ
dHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7Ci0gICAgICAg
IExWYWx1ZSBmbGFncyA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2Zs
YWdzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBu
dW1LaWRzOyArK2kpIHsKLSAgICAgICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdzLCBt
X291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19mbGFncykpOwotICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogbGVuZ3RoQ2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCi0gICAgICAg
ICAgICAgICAgbGVuZ3RoLCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19s
ZW5ndGgpKTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24obGVuZ3RoQ2hlY2ssIFVuY291
bnRhYmxlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSAgICAgICAgICAgIGxlbmd0
aCA9IGxlbmd0aENoZWNrOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAg
ICAgICAgICBtX291dC5iaXRBbmQobV9vdXQuY29uc3RJbnQzMihKU1N0cmluZzo6SXM4Qml0KSwg
ZmxhZ3MpLAotICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKLSAg
ICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgsIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19sZW5n
dGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihyZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZTsKLSAgICAgICAgc3dpdGNoIChudW1LaWRzKSB7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
Ml0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHNsb3dSZXN1
bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIo
KSk7Ci0gICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgbnVtYmVyIG9mIGNoaWxkcmVuIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdD
aGFyQXQoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgZmFzdCBwYXRoIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5n
IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JF
cXVhbCgKLSAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFz
ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKSwKLSAgICAgICAgICAgIHJhcmVseShzbG93UGF0
aCksIHVzdWFsbHkoZmFzdFBhdGgpKTsKLSAgICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1f
aGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDgtYml0IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyAxNi1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Yml0c0NvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5n
IGJpdG5lc3MgY29udGludWF0aW9uIikpOwotICAgICAgICBMQmFzaWNCbG9jayBiaWdDaGFyYWN0
ZXIgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBiaWcgY2hhcmFjdGVy
IikpOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgIHVu
c3VyZShpczE2Qml0KSwgdW5zdXJlKGlzOEJpdCkpOwotICAgICAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2hhcjhCaXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5j
aGFyYWN0ZXJzOCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAg
ICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoYml0c0NvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oaXMxNkJpdCwgYmlnQ2hhcmFjdGVyKTsKLQotICAgICAgICBMVmFsdWUgY2hhcjE2Qml0VmFs
dWUgPSBtX291dC5sb2FkMTZaZXJvRXh0MzIoCi0gICAgICAgICAgICBtX291dC5iYXNlSW5kZXgo
Ci0gICAgICAgICAgICAgICAgbV9oZWFwcy5jaGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnpl
cm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hv
cihjaGFyMTZCaXRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChjaGFyMTZCaXRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDEwMCkp
LAotICAgICAgICAgICAgcmFyZWx5KGJpZ0NoYXJhY3RlciksIHVzdWFsbHkoYml0c0NvbnRpbnVh
dGlvbikpOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpZ0NoYXJhY3Rl
ciwgYml0c0NvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVl
RnJvbUJsb2NrLCA0PiByZXN1bHRzOwotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNo
YXIxNkJpdFZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oYml0c0NvbnRpbnVhdGlvbiwgc2xvd1Bh
dGgpOwotICAgICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjaGFyYWN0ZXIgPSBtX291dC5waGko
bV9vdXQuaW50MzIsIGNoYXI4Qml0LCBjaGFyMTZCaXQpOwotICAgICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCgKLSAg
ICAgICAgICAgIG1faGVhcHMuc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBt
X291dC56ZXJvRXh0UHRyKGNoYXJhY3RlcikpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMs
IG5vVmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmludFB0clplcm8pKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgY2FwdHVyZWQgdXNp
bmcgYSBTcGVjdWxhdGlvbiBtb2RlIHRoYXQgbWVhbnMKLSAgICAgICAgICAgICAgICAvLyAib3V0
LW9mLWJvdW5kcyBsb2FkcyByZXR1cm4gYSB0cml2aWFsIHZhbHVlIiwgc29tZXRoaW5nIGxpa2UK
LSAgICAgICAgICAgICAgICAvLyBTYW5lQ2hhaW5PdXRPZkJvdW5kcy4KLSAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseShnbG9iYWxPYmplY3QtPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbmVnYXRpdmVJbmRleCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgU3RyaW5nIG5lZ2F0aXZlIGluZGV4IikpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7Ci0gICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihpbmRl
eCwgbV9vdXQuaW50MzJaZXJvKSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KG5lZ2F0aXZl
SW5kZXgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZWdhdGl2ZUluZGV4LCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KSwgbV9jYWxsRnJhbWUs
IGJhc2UsIGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJp
bmdDaGFyQ29kZUF0KCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nQ2hhckNvZGVBdCA4LWJpdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBpczE2Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFy
Q29kZUF0IDE2LWJpdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgY29udGludWF0aW9uIikp
OwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAg
IExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAg
Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCks
IDAsCi0gICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgaW5k
ZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3Ro
KSkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
KSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhC
aXQoKSkpLAotICAgICAgICAgICAgdW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpczhCaXQsIGlzMTZCaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGNoYXI4Qml0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0
MzIobV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgs
IHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgIHByb3Zl
blZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyMTZC
aXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkMTZaZXJvRXh0MzIobV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2LCBzdG9y
YWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAgICAgICAgICAgICAgICBwcm92ZW5WYWx1
ZShtX25vZGUtPmNoaWxkMigpKSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIAotICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIGNo
YXI4Qml0LCBjaGFyMTZCaXQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdGcm9t
Q2hhckNvZGUoKQotICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBtX25vZGUtPmNoaWxk
MSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFy
Q29kZVVudHlwZWQpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNo
aWxkRWRnZSkpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UpOwotCi0gICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0ludDMyKGNoaWxkRWRnZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBz
bWFsbEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBz
bWFsbCBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBzbG93IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5n
RnJvbUNoYXJDb2RlIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHhm
ZikpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEludENhc2Up
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxs
SW50Q2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291
dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
OwotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cigKLSAgICAg
ICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIHNt
YWxsU3RyaW5ncywgbV9vdXQuemVyb0V4dFB0cih2YWx1ZSkpKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblN0cmluZ0Zyb21DaGFyQ29kZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsK
LSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotCi0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZUdldEJ5T2Zmc2V0KCkKLSAgICB7Ci0gICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhJiBkYXRhID0gbV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAg
ICAgICAgc2V0SlNWYWx1ZShsb2FkUHJvcGVydHkoCi0gICAgICAgICAgICBsb3dTdG9yYWdlKG1f
bm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIGRhdGEub2Zmc2V0KSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdldEdldHRlcigpCi0gICAgewotICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFw
cy5HZXR0ZXJTZXR0ZXJfZ2V0dGVyKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdl
dFNldHRlcigpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5HZXR0ZXJTZXR0ZXJfc2V0dGVyKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZU11bHRpR2V0QnlPZmZzZXQoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCk7Ci0KLSAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJv
IGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KLSAgICAgICAgICAgIHRlcm1pbmF0ZShC
YWRDYWNoZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspCi0gICAgICAg
ICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQg
Y2FzZSAiLCBpKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgZmFpbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRp
bnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNl
czsKLSAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwotICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRj
aENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rp
b24oCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7Ci0gICAgICAgIAotICAgICAgICBW
ZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKLSAgICAgICAgICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/
IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpDb25zdGFudDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShtZXRob2QuY29uc3RhbnQoKS0+dmFsdWUoKSkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWRGcm9tUHJvdG90eXBlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsK
LSAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZCkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2lu
dGVyKG1ldGhvZC5wcm90b3R5cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpc0lubGluZU9mZnNldChtZXRob2Qub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eUJhc2UgPSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihiYXNlU2V0KSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoKQotICAgIHsKLSAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIAotICAgICAgICBzdG9yZVByb3BlcnR5KAotICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMygpKSwKLSAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDEoKSksIGRhdGEuaWRlbnRpZmllck51bWJlciwgZGF0YS5vZmZzZXQpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
OwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52
YXJpYW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTXVsdGlQdXRCeU9mZnNldCBjYXNlICIsIGkpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
ZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBmYWlsIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik11bHRpUHV0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVj
dG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXpl
KCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlh
bnQub2xkU3RydWN0dXJlKClbal07Ci0gICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBl
eGl0LCBXZWlnaHQoMCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5tX25leHRCbG9jazsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFd
IDogZXhpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotCi0gICAgICAgICAgICBjaGVja0luZmVycmVkVHlwZSht
X25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFzZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFk
ZExhemlseSgKLSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAotICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBi
YXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGV4aXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JO
b2RlKG1fbm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
Ym9vbGVhblRydWUpOwotICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKCkKLSAgICB7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2lu
dGVyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxl
KCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5hYnNvbHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRl
cigpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKCkKLSAgICB7
Ci0gICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOwot
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90
aWZ5V3JpdGUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0YXRl
ID0gbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0
ZSgpKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0
YXRlLCBtX291dC5jb25zdEludDMyKElzSW52YWxpZGF0ZWQpKSwKLSAgICAgICAgICAgIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlzTm90SW52YWxpZGF0ZWQpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlk
YXRlZCwgY29udGludWF0aW9uKTsKLQotICAgICAgICBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BS
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0KSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldENhbGxlZSgpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihKU1N0YWNrOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnQoKQotICAgIHsKLSAgICAgICAgc2V0SW50MzIobV9v
dXQubG9hZDMyKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQotICAgIHsKLSAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNGdW5j
dGlvbl9zY29wZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSksIG1faGVhcHMuSlNTY29wZV9uZXh0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZUdldENsb3N1cmVWYXIoKQotICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAg
ICAgICAgIG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpLAotICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJp
YWJsZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
NjQoCi0gICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAotICAgICAgICAg
ICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1faGVhcHMuSlNFbnZp
cm9ubWVudFJlY29yZF92YXJpYWJsZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdldEZyb21Bcmd1bWVudHMoKQotICAgIHsK
LSAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKLSAgICAgICAg
ICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG1faGVh
cHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNl
dCgpLm9mZnNldCgpXSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3Vt
ZW50cygpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKSwKLSAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSksCi0gICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9k
ZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVDb21wYXJlRXEoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKEludDMyVXNlKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50NTJSZXBVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChEb3VibGVSZXBVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFu
VXNlKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKQot
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpCi0g
ICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UsIE9iamVjdE9yT3RoZXJVc2UpKSB7Ci0gICAgICAgICAgICBjb21wYXJlRXFPYmpl
Y3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDIoKSwgbV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RPck90aGVyVXNlLCBPYmplY3RVc2UpKSB7Ci0gICAg
ICAgICAgICBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDEoKSwg
bV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewot
ICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKAotICAgICAgICAgICAgICAgIFsmXSAo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICAgICAgb3BlcmF0aW9uQ29tcGFyZUVxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkg
ewotICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9k
ZS0+Y2hpbGQxKCksIFNwZWNPdGhlcikpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51
bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMigpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51
bGxPclVuZGVmaW5lZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5k
KCkgPT0gT3RoZXJVc2UpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVk
c1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMigpLCBTcGVjT3RoZXIpKTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNB
cmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlQ29tcGFyZVN0cmljdEVxKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAg
ICAgICAgICAgbV9vdXQuZXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkp
IHsKLSAgICAgICAgICAgIEludDUyS2luZCBraW5kOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQg
PSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoRG91YmxlUmVwVXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAg
ICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3Ry
aW5nSWRlbnRVc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAgICAgICAgICAg
IG1fb3V0LmVxdWFsKGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dTdHJpbmdJ
ZGVudChtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKLSAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFRyaXZpYWxseUVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ29tcGFyZVN0cmljdEVxL1N0cmluZyBub3QgdHJpdmlhbGx5IGVxdWFsIGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcS9TdHJpbmcgY29udGludWF0aW9uIikpOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCk7Ci0KLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1f
b3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RU
cml2aWFsbHlFcXVhbENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhub3RUcml2aWFsbHlFcXVhbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhtX25vZGUtPmNoaWxkMigpLCByaWdodCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Ioc3RyaW5nc0VxdWFsKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVz
ZSwgVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICAg
ICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9u
b2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE9iamVjdFVzZSkp
IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwo
Ci0gICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSks
Ci0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChPYmplY3RVc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNl
KSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVh
bChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQy
KCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxl
ZnQgPSBsb3dTeW1ib2wobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmln
aHQgPSBsb3dTeW1ib2wobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgbGVm
dFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGxlZnQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVO
YW1lKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHJpZ2h0LCBtX2hlYXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7Ci0gICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LmVxdWFsKGxlZnRTdHJpbmdJbXBsLCByaWdodFN0cmluZ0ltcGwpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE1pc2NVc2UsIFVudHlwZWRVc2UpCi0gICAgICAgICAgICB8fCBtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlLCBNaXNjVXNlKSkgewotICAgICAgICAgICAg
c3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFyVXNl
KQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTm90U3RyaW5nVmFyVXNl
LCBTdHJpbmdJZGVudFVzZSkpIHsKLSAgICAgICAgICAgIEVkZ2UgbGVmdEVkZ2UgPSBtX25vZGUt
PmNoaWxkRm9yKFN0cmluZ0lkZW50VXNlKTsKLSAgICAgICAgICAgIEVkZ2UgcmlnaHRFZGdlID0g
bV9ub2RlLT5jaGlsZEZvcihOb3RTdHJpbmdWYXJVc2UpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgbGVmdCA9IGxvd1N0cmluZ0lkZW50KGxlZnRFZGdlKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodFZhbHVlID0gbG93SlNWYWx1ZShyaWdodEVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVu
dCB0byBOb3RTdHJpbmdWYXIgaXMgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEg
U3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21w
YXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbChyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0
RWRnZSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub3RTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhbkZhbHNlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBp
c1N0cmluZyhyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAotICAgICAgICAgICAg
ICAgIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IG1fb3V0LmxvYWRQdHIocmlnaHRWYWx1
ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJ
ZGVudChyaWdodEVkZ2UsIHJpZ2h0VmFsdWUsIHJpZ2h0KTsKLSAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGlzU3RyaW5nUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKGxlZnQsIHJp
Z2h0KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJl
c3VsdCwgbm90U3RyaW5nUmVzdWx0LCBpc1N0cmluZ1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kcyIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21w
YXJlU3RyaWN0RXFDb25zdGFudCgpCi0gICAgewotICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0g
bV9ub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVlKCk7Ci0KLSAgICAgICAgc2V0Qm9vbGVhbigKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpl
bmNvZGUoY29uc3RhbnQpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJl
TGVzcygpCi0gICAgewotICAgICAgICBjb21wYXJlKAotICAgICAgICAgICAgWyZdIChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NU
aGFuKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91
YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29tcGFy
ZUxlc3NFcSgpCi0gICAgewotICAgICAgICBjb21wYXJlKAotICAgICAgICAgICAgWyZdIChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxl
c3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
WyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVHcmVhdGVyKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0g
ICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBtX291dC5kb3VibGVHcmVhdGVyVGhhbihsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlckVxKCkKLSAgICB7Ci0gICAg
ICAgIGNvbXBhcmUoCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGxlZnQs
IHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRl
clRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
TG9naWNhbE5vdCgpCi0gICAgewotICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmxvZ2ljYWxOb3Qo
Ym9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNh
bGxPckNvbnN0cnVjdCgpCi0gICAgewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAg
ICAgICB1bnNpZ25lZCBudW1BcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0KLSAgICAg
ICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLQotICAgICAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgbnVtQXJnczsKLSAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBmcmFt
ZVNpemUpOwotCi0gICAgICAgIC8vIEpTLT5KUyBjYWxsaW5nIGNvbnZlbnRpb24gcmVxdWlyZXMg
dGhhdCB0aGUgY2FsbGVyIGFsbG93cyB0aGlzIG11Y2ggc3BhY2Ugb24gdG9wIG9mIHN0YWNrIHRv
Ci0gICAgICAgIC8vIGdldCB0cmFzaGVkIGJ5IHRoZSBjYWxsZWUsIGV2ZW4gaWYgbm90IGFsbCBv
ZiB0aGF0IHNwYWNlIGlzIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMuIFdlIHRlbGwKLSAgICAgICAg
Ly8gQjMgdGhpcyBleHBsaWNpdGx5IGZvciB0d28gcmVhc29uczoKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gLSBXZSB3aWxsIG9ubHkgcGFzcyBmcmFtZVNpemUgd29ydGggb2Ygc3R1ZmYuCi0gICAg
ICAgIC8vIC0gVGhlIHRyYXNoZWQgc3RhY2sgZ3VhcmFudGVlIGlzIGxvZ2ljYWxseSBzZXBhcmF0
ZSBmcm9tIHRoZSBhY3Qgb2YgcGFzc2luZyBhcmd1bWVudHMsIHNvIHdlCi0gICAgICAgIC8vICAg
c2hvdWxkbid0IHJlbHkgb24gQWlyIHRvIGluZmVyIHRoZSB0cmFzaGVkIHN0YWNrIHByb3BlcnR5
IGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgaXQgZW5kcwotICAgICAgICAvLyAgIHVwIHNlZWluZy4K
LSAgICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYWxpZ25lZEZyYW1lU2l6ZSk7
Ci0KLSAgICAgICAgLy8gQ29sbGVjdCB0aGUgYXJndW1lbnRzLCBzaW5jZSB0aGlzIGNhbiBnZW5l
cmF0ZSBjb2RlIGFuZCB3ZSB3YW50IHRvIGdlbmVyYXRlIGl0IGJlZm9yZSB3ZSBlbWl0Ci0gICAg
ICAgIC8vIHRoZSBjYWxsLgotICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1l
bnRzOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIEdQ
UjAgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0IHRoZQot
ICAgICAgICAvLyBjYWxsZWUgdG8gYmUuCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKLQot
ICAgICAgICBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdp
c3RlciByZWcsIGludCBvZmZzZXQpIHsKLSAgICAgICAgICAgIGludHB0cl90IG9mZnNldEZyb21T
UCA9Ci0gICAgICAgICAgICAgICAgKHJlZy5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpzdGFj
a0FyZ3VtZW50KG9mZnNldEZyb21TUCkpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBhZGRBcmd1
bWVudChqc0NhbGxlZSwgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIDApOwotICAg
ICAgICBhZGRBcmd1bWVudChtX291dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0
ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAgICAgICAgYWRkQXJndW1l
bnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKLQotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVy
c0ZvckpTQ2FsbCgpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZh
bHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotCi0gICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKLSAgICAg
ICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRk
VW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0
ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotCi0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLQotICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwot
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENv
bnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLAot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1Qw
KTsKLQotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKAotICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCi0gICAg
ewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
ID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0KLSAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFdlIHdhbnQgQjMgdG8gZ2l2ZSB1cyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB1c2luZyB3
aGF0ZXZlciBtZWNoYW5pc20gaXQgdGhpbmtzIGlzCi0gICAgICAgIC8vIGNvbnZlbmllbnQuIFRo
ZSBnZW5lcmF0b3IgdGhlbiBzaHVmZmxlcyB0aG9zZSBhcmd1bWVudHMgaW50byBvdXIgb3duIGNh
bGwgZnJhbWUsCi0gICAgICAgIC8vIGRlc3Ryb3lpbmcgb3VyIGZyYW1lIGluIHRoZSBwcm9jZXNz
LgotCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNw
ZWNpYWwgZm9yIGV4Y2VwdGlvbnMuIEEgdGFpbCBjYWxsIGlzIG9ubHkgYQotICAgICAgICAvLyB0
YWlsIGNhbGwgaWYgaXQgaXMgbm90IGluc2lkZSBhIHRyeSBibG9jay4KLQotICAgICAgICBWZWN0
b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOwotCi0gICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdU
MCkpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7
Ci0gICAgICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBsZXQgdGhlIHNodWZmbGVyIGRvIGJveGlu
ZyBmb3IgdXMsIGJ1dCBpdCdzIG5vdCBzdXBlciBjbGVhciB0aGF0IHRoaXMKLSAgICAgICAgICAg
IC8vIHdvdWxkIGJlIGJldHRlci4gQWxzbywgaWYgd2Ugd2FudGVkIHRvIGRvIHRoYXQsIHRoZW4g
d2UnZCBoYXZlIHRvIHRlYWNoIHRoZSBzaHVmZmxlcgotICAgICAgICAgICAgLy8gdGhhdCAzMi1i
aXQgdmFsdWVzIGNvdWxkIGxhbmQgYXQgNC1ieXRlIGFsaWdubWVudCBidXQgbm90IDgtYnl0ZSBh
bGlnbm1lbnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY29u
c3RyYWluZWRWYWx1ZSgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6V2FybUFueSk7
Ci0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0cmFpbmVkVmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hw
b2ludChWb2lkKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7
Ci0KLSAgICAgICAgLy8gUHJldmVudCBhbnkgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHVzaW5nIHRo
ZSBzY3JhdGNoIHJlZ2lzdGVyLgotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHRlbGwgdGhlIHBhdGNocG9pbnQgdGhhdCB3ZSB3aWxsIGNsb2JiZXIgcmVnaXN0
ZXJzLCBzaW5jZSB3ZSB3b24ndCByZXR1cm4KLSAgICAgICAgLy8gYW55d2F5LgotCi0gICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUo
KTsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5j
b21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3Rl
ckNvdW50OwotICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zl
cnk6OmluR1BSKEdQUkluZm86OnJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotCi0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpT
VmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKLQotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLQot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0KLSAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5l
YXJUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQot
ICAgICAgICAgICAgICAgIC8vIFllcywgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LiBZb3UgY291
bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGluIGEgaG9zdCBjYWxsIG9uIHRoZQotICAgICAgICAgICAg
ICAgIC8vIHNsb3cgcGF0aC4gVGhhdCdsbCByb3V0ZSB1cyB0byBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKCksIHdoaWNoIHVud2luZHMgc3RhcnRpbmcKLSAgICAgICAgICAgICAgICAvLyB3aXRoIHRo
ZSBjYWxsIHNpdGUgaW5kZXggb2Ygb3VyIGZyYW1lLiBCYWQgdGhpbmdzIGhhcHBlbiBpZiBpdCdz
IG5vdCBzZXQuCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAg
IHNsb3dQYXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDApKTsKLSAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JT
bG93UGF0aCgpOwotCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLQotICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
LQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
VGFpbENhbGwsIGNvZGVPcmlnaW4sIEdQUkluZm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0o
KS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0Nh
bGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0
Q2FsbCkpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCi0gICAgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwotICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDMoKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRy
OwotICAgICAgICBib29sIGZvcndhcmRpbmcgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgotICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAg
ICAgICBmb3J3YXJkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBl
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0KLSAg
ICAgICAgLy8gQXBwZW5kIHRoZSBmb3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1
c2UgYmVmb3JlIGFueSBjbG9iYmVyaW5nIGhhcHBlbnMuCi0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOwotICAgICAgICBp
ZiAoanNBcmd1bWVudHMpCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoanNBcmd1bWVudHMpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
dGhpc0FyZyk7Ci0KLSAgICAgICAgaWYgKCFmb3J3YXJkaW5nKSB7Ci0gICAgICAgICAgICAvLyBO
b3cgYXBwZW5kIHRoZW0gYWdhaW4gZm9yIGFmdGVyIGNsb2JiZXJpbmcuIE5vdGUgdGhhdCB0aGUg
Y29tcGlsZXIgbWF5IGFzayB1cyB0byB1c2UgYQotICAgICAgICAgICAgLy8gZGlmZmVyZW50IHJl
Z2lzdGVyIGZvciB0aGUgbGF0ZSBmb3IgdGhlIHBvc3QtY2xvYmJlcmluZyB2ZXJzaW9uIG9mIHRo
ZSB2YWx1ZS4gVGhpcyBnaXZlcwotICAgICAgICAgICAgLy8gdGhlIGNvbXBpbGVyIGEgY2hhbmNl
IHRvIHNwaWxsIHRoZXNlIHZhbHVlcyB3aXRob3V0IGhhdmluZyB0byBidXJuIGFueSBjYWxsZWUt
c2F2ZXMuCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVw
OjpMYXRlQ29sZEFueSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNBcmd1bWVu
dHMsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQodGhpc0FyZywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAg
ICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOwotICAg
ICAgICAKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3Rl
clNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLQotICAgICAgICAvLyBUaGlzIGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjYWxsIGFyZyBh
cmVhIHN0YWNrIHNwYWNlIHRoYXQgYWxsIEpTLT5KUyBjYWxscyBhbHdheXMgaGF2ZS4KLSAgICAg
ICAgdW5zaWduZWQgbWluaW11bUpTQ2FsbEFyZWFTaXplID0KLSAgICAgICAgICAgIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSArCi0gICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0KLSAg
ICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUobWluaW11bUpTQ2FsbEFyZWFTaXpl
KTsKLSAgICAgICAgCi0gICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5E
ZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCA9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotCi0g
ICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVu
d2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJ
bmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1thcmdJ
bmRleCsrXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbGVlR1BSID09IEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0ganNBcmd1
bWVudHMgPyBwYXJhbXNbYXJnSW5kZXgrK10uZ3ByKCkgOiBJbnZhbGlkR1BSUmVnOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyB0aGlzR1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGNhbGxlZUxhdGVSZXA7Ci0gICAgICAgICAgICAg
ICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50c0xhdGVSZXA7Ci0gICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIHRoaXNMYXRlUmVwOwotICAgICAgICAgICAgICAgIGlmICghZm9yd2FyZGluZykgewot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZm9yd2FyZGluZyB0aGVuIHdlJ2xs
IG5lZWQgY2FsbGVlLCBhcmd1bWVudHMsIGFuZCB0aGlzIGFmdGVyIHdlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgcG90ZW50aWFsbHkgY2xvYmJlcmVkIGNhbGxlZUdQUiwgYXJndW1lbnRz
R1BSLCBhbmQgdGhpc0dQUi4gT3VyIHRlY2huaXF1ZQotICAgICAgICAgICAgICAgICAgICAvLyBm
b3IgdGhpcyBpcyB0byBzdXBwbHkgYWxsIG9mIHRob3NlIG9wZXJhbmRzIGFzIGxhdGUgdXNlcyBp
biBhZGRpdGlvbiB0bwotICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoZW0gYXMg
ZWFybHkgdXNlcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBsYXRlIHVzZSB1c2VzIGEgc3BpbGwK
LSAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdGhlIGVhcmx5IHVzZSB1c2VzIGEgcmVnaXN0
ZXIsIGFuZCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgbGF0ZSBhbmQgZWFybHkKLSAgICAgICAgICAg
ICAgICAgICAgLy8gdXNlcyB0byB1c2UgZGlmZmVyZW50IHJlZ2lzdGVycy4gV2UgZG8ga25vdyB0
aGF0IHRoZSBsYXRlIHVzZXMgaW50ZXJmZXJlIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgLy8g
YWxsIHZvbGF0aWxlIHJlZ2lzdGVycyBhbmQgc28gd29uJ3QgdXNlIHRob3NlLCBidXQgdGhlIGVh
cmx5IHVzZXMgbWF5IHVzZQotICAgICAgICAgICAgICAgICAgICAvLyB2b2xhdGlsZSByZWdpc3Rl
cnMgYW5kIGluIHRoZSBjYXNlIG9mIGNhbGxlZUdQUiwgaXQncyBwaW5uZWQgdG8gcmVnVDAgc28g
aXQKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5pdGVseSB3aWxsLgotICAgICAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBi
ZSBzdXBlciBjYXJlZnVsIHdpdGggdGhlc2UuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZQotICAg
ICAgICAgICAgICAgICAgICAvLyB1c2UgYSBzaHVmZmxpbmcgb2YgdGhlIHJlZ2lzdGVycyB1c2Vk
IGZvciBjYWxsZWVHUFIsIGFyZ3VtZW50c0dQUiwgYW5kCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoaXNHUFIuIElmIHRoYXQgaGFwcGVucyBhbmQgd2UgZG8gZm9yIGV4YW1wbGU6Ci0gICAgICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICBjYWxsZWVMYXRlUmVw
LmVtaXRSZXN0b3JlKGppdCwgY2FsbGVlR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IGFyZ3VtZW50c0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOwotICAgICAgICAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIHdlIG1pZ2h0IGVuZCB1
cCB3aXRoIGdhcmJhZ2UgaWYgY2FsbGVlTGF0ZVJlcC5ncHIoKSA9PSBhcmd1bWVudHNHUFIgYW5k
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgPT0gY2FsbGVl
R1BSLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
byBhIHZhcmlldHkgb2YgdGhpbmdzIHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gRm9y
IGV4YW1wbGUsIHdlIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRlUmVw
IGJlZm9yZSBuZWVkaW5nIHRoZSBvdGhlciB0d28gYW5kIGFmdGVyIHdlJ3ZlIGFscmVhZHkgc3Rv
cHBlZAotICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgKkdQUnMuIEFsc28sIHdlIHBp
biBjYWxsZWVHUFIgdG8gcmVnVDAsIGFuZCByZWx5IG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlICpMYXRlUmVwcyBjYW5ub3QgdXNlIHZvbGF0aWxlIHJlZ2lzdGVy
cyAoc28gdGhleSBjYW5ub3QgYmUgcmVnVDAsIHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxlZUdQUiAhPSBhcmd1bWVudHNMYXRlUmVwLmdwcigpIGFuZCBjYWxsZWVHUFIgIT0gdGhpc0xh
dGVSZXAuZ3ByKCkpLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAg
ICAvLyBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBoYXZlIGJlZW4gdG8ganVzdCB1c2UgZWFybHkgdXNl
cyBhbmQgZWFybHktY2xvYmJlciBhbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gdm9sYXRpbGUg
cmVnaXN0ZXJzLiBCdXQgdGhhdCB3b3VsZCBmb3JjZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRo
aXMgaW50bwotICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZXZl
biBpZiB3ZSBoYXZlIHRvIHNwaWxsIHRoZW0uIFdlIGRvbid0IHdhbnQgc3BpbGxpbmcgdG8KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIHVwIHRocmVlIGNhbGxlZS1zYXZlcy4KLSAgICAgICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVEw7RFI6IFRoZSB3YXkgd2Ug
dXNlIExhdGVSZXBzIGhlcmUgaXMgZGFuZ2Vyb3VzIGFuZCBiYXJlbHkgd29ya3MgYnV0IGFjaGll
dmVzCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgZGVzaXJhYmxlIHBlcmZvcm1hbmNlIHBy
b3BlcnRpZXMsIHNvIGRvbid0IG1pc3Rha2UgdGhlIGNsZXZlcm5lc3MgZm9yCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGVsZWdhbmNlLgotICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVw
ID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNMYXRl
UmVwID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJl
cCA9IHBhcmFtc1thcmdJbmRleCsrXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOwotICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVy
Z2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7
Ci0gICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxs
ZWVHUFIpOwotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsK
LSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2FsbGVlTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLnNldChjYWxsZWVMYXRlUmVwLnJlZygpKTsKLSAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0
ZXJzLnNldChhcmd1bWVudHNMYXRlUmVwLnJlZygpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
c0xhdGVSZXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQo
dGhpc0xhdGVSZXAucmVnKCkpOwotICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBmb3J3YXJkaW5nID8gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpIDogSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOwot
Ci0gICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lk
KiBjYWxsZWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BS
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
QXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0
LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNr
LCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAg
dW5zaWduZWQgb3JpZ2luYWxTdGFja0hlaWdodCA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZm9yd2FyZGluZykgewotICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nh
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGpp
dCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5v
ZGUtPmNoaWxkMigpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2UubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0
d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93
aW5nUGF0aERpZE5vdFRocm93KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFj
ayhzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hl
aWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBz
Y3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKLQotICAgICAg
ICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0
Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9y
ZShqaXQsIGFyZ3VtZW50c0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRTZXRWYXJhcmdz
RnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLW1pbmltdW1KU0NhbGxBcmVhU2l6ZSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFjayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIEdQ
UkluZm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBub3QgZW1p
dCBjb2RlIGlmIHRoaXNHUFIgZ290IGEgY2FsbGVlLXNhdmUuIEFsc28sIHdlJ3JlIGd1YXJhbnRl
ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzR1BSICE9IEdQUkluZm86OnJlZ1Qw
IGJlY2F1c2UgcmVnVDAgaW50ZXJmZXJlcyB3aXRoIGl0LgotICAgICAgICAgICAgICAgICAgICB0
aGlzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIHRoaXNHUFIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVB
cmd1bWVudFNsb3QoMCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ29uc3RydWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzKQotICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29u
c3RydWN0VmFyYXJnczsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IFRh
aWxDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFy
Z3M7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlw
ZSkgPT0gQ2FsbE1vZGU6OlRhaWw7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgZmFzdENhbGw7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAg
ICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwo
KTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKQotICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmln
aW5hbFN0YWNrSGVpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQotICAgIHsKLSAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCi0gICAgICAgICAgICBt
X291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2Nh
bGxGcmFtZSwganNBcmd1bWVudHMsCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEt
Pm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNl
IHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRo
aXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGlu
dGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAg
ICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJl
IHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8v
IHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAgIHNw
ZWN1bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRy
LAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIo
bGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxs
eS4gSWYgb3BlcmF0aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCi0g
ICAgICAgIC8vIG9mIGEgVmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRo
aXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE2NjAKLSAgICAgICAgTFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAg
ICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZh
bHVlKCksIG1fY2FsbEZyYW1lKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsK
LSAgICAgICAgCi0gICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKLSAgICAg
ICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCi0gICAgewotICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0QXJn
dW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSkudmFsdWU7Ci0gICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxIC0g
ZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7Ci0gICAgICAgIAotICAgICAgICBMVmFs
dWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOwotICAg
ICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCku
dmFsdWUoKTsKLQotICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyB1bmRlZmluZWQgbG9vcCBib2R5IikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBtYWluTG9vcEVudHJ5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJG
b3J3YXJkVmFyYXJncyBtYWluIGxvb3AgZW50cnkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG1h
aW5Mb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxvb3Ag
Ym9keSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgbGVuZ3RoQXNQdHIgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7Ci0gICAg
ICAgIExWYWx1ZSBsb29wQm91bmRWYWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRh
dG9yeU1pbmltdW0pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsb29wQm91bmQgPSBtX291dC5h
bmNob3IobG9vcEJvdW5kVmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICBtX291dC5hYm92ZShsb29wQm91bmRWYWx1ZSwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZp
bmVkTG9vcCksIHVuc3VyZShtYWluTG9vcEVudHJ5KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIG1haW5Mb29w
RW50cnkpOwotICAgICAgICBMVmFsdWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGxvb3BCb3VuZCk7Ci0gICAgICAgIExWYWx1ZSBjdXJyZW50SW5kZXggPSBtX291dC5z
dWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2
NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
dGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0
SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKLSAgICAgICAgbV9vdXQuYWRkSW5j
b21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwotICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICBtX291dC5hYm92ZShjdXJyZW50SW5kZXgsIGxlbmd0aEFzUHRyKSwg
dW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFpbkxvb3BFbnRyeSwgbWFpbkxvb3ApOwotICAgICAg
ICBsb29wQm91bmQgPSBtX291dC5hbmNob3IobGVuZ3RoQXNQdHIpOwotICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQubm90TnVsbChsZW5ndGhBc1B0ciksIHVuc3VyZShtYWluTG9vcCksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5M
b29wLCBjb250aW51YXRpb24pOwotICAgICAgICBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgbG9vcEJvdW5kKTsKLSAgICAgICAgY3VycmVudEluZGV4ID0gbV9vdXQuc3Vi
KHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9
IG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAg
ICAgICBtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsCi0gICAgICAgICAgICAgICAgbV9v
dXQuYWRkKGN1cnJlbnRJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+b2Zmc2V0KSkpKTsK
LSAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFy
aWFibGVzLCB0YXJnZXRTdGFydCwgY3VycmVudEluZGV4KSk7Ci0gICAgICAgIG5leHRJbmRleCA9
IG1fb3V0LmFuY2hvcihjdXJyZW50SW5kZXgpOwotICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC5pc051bGwoY3VycmVudEluZGV4KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShtYWlu
TG9vcCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSnVtcCgpCi0gICAgewotICAgICAg
ICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFyZ2V0QmxvY2soKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVCcmFuY2goKQotICAgIHsKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIFdl
aWdodGVkVGFyZ2V0KAotICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0
YSgpLT50YWtlbi5ibG9jayksCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCkt
PnRha2VuLmNvdW50KSwKLSAgICAgICAgICAgIFdlaWdodGVkVGFyZ2V0KAotICAgICAgICAgICAg
ICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayksCi0gICAg
ICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmNvdW50KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVN3aXRjaCgpCi0gICAgewotICAgICAgICBTd2l0Y2hE
YXRhKiBkYXRhID0gbV9ub2RlLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIHN3aXRjaCAoZGF0YS0+
a2luZCkgewotICAgICAgICBjYXNlIFN3aXRjaEltbTogewotICAgICAgICAgICAgVmVjdG9yPFZh
bHVlRnJvbUJsb2NrLCAyPiBpbnRWYWx1ZXM7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzd2l0
Y2hPbkludHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaW50IGNh
c2UiKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8obV9vdXQubV9ibG9jaywgc3dpdGNoT25JbnRzKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAg
ICAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBl
bmQobV9vdXQuYW5jaG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgbV9vdXQuanVtcChzd2l0Y2hPbkludHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOiB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNJbnQgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgaW50IikpOwotICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzTm90SW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNo
SW1tIGlzIG5vdCBpbnQiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNEb3VibGUg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgZG91YmxlIikpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBib3hlZFZhbHVlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
aXNOb3RJbnQzMihib3hlZFZhbHVlKSwgdW5zdXJlKGlzTm90SW50KSwgdW5zdXJlKGlzSW50KSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW50LCBpc05vdEludCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQz
Mihib3hlZFZhbHVlKSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRz
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc05v
dEludCwgaXNEb3VibGUpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNDZWxsT3JNaXNjKGJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrKSksIHJhcmVseShpc0RvdWJsZSkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZShib3hlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgaW50SW5Eb3VibGUgPSBtX291dC5kb3VibGVU
b0ludChkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291
dC5hbmNob3IoaW50SW5Eb3VibGUpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKG1fb3V0LmludFRvRG91YmxlKGlu
dEluRG91YmxlKSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoc3dp
dGNoT25JbnRzKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN3aXRjaE9u
SW50cywgbGFzdE5leHQpOwotICAgICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50
MzIsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogewotICAg
ICAgICAgICAgTFZhbHVlIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB1bnN1cmUoKSBmb3Ig
dGhlIGJyYW5jaCB3ZWlnaHQKLSAgICAgICAgICAgIC8vIG9mIHRoZSBmYWxsVGhyb3VnaCBibG9j
ay4gVGhlIG1haW4gY2hhbGxlbmdlIGlzIGp1c3QgdGhhdCB3ZSBoYXZlIG11bHRpcGxlCi0gICAg
ICAgICAgICAvLyBicmFuY2hlcyB0byBmYWxsVGhyb3VnaCBidXQgYSBzaW5nbGUgY291bnQsIHNv
IHdlIHdvdWxkIG5lZWQgdG8gZGl2dnkgaXQgdXAKLSAgICAgICAgICAgIC8vIGFtb25nIHRoZSBk
aWZmZXJlbnQgbG93ZXJlZCBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwODIKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBTdHJpbmdVc2U6IHsKLSAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAg
ICAgICAgICAgIExWYWx1ZSB1bmJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIGNlbGwi
KSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBpcyBzdHJpbmciKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBpc05vdENlbGwodW5ib3hlZFZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwK
LSAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJs
b2NrKSksIHVuc3VyZShpc0NlbGxDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBp
c1N0cmluZ0Nhc2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjZWxsVmFsdWUgPSB1bmJveGVk
VmFsdWU7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBpc05vdFN0cmluZyhjZWxsVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAot
ICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxv
Y2spKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbGFzdE5leHQpOwotICAgICAgICAg
ICAgICAgIHN0cmluZ1ZhbHVlID0gY2VsbFZhbHVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxlbmd0aElzMSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaENoYXIgbGVuZ3RoIGlzIDEiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBuZWVkUmVzb2x1dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENo
YXIgcmVzb2x1dGlvbiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHJlc29sdmVkID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciByZXNvbHZlZCIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaENoYXIgOGJpdCIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIDE2Yml0IikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2hhciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVh
cHMuSlNTdHJpbmdfbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9j
aykpLCB1bnN1cmUobGVuZ3RoSXMxKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVuZ3RoSXMxLCBuZWVkUmVzb2x1dGlv
bik7Ci0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHZhbHVlczsKLSAgICAg
ICAgICAgIExWYWx1ZSBmYXN0VmFsdWUgPSBtX291dC5sb2FkUHRyKHN0cmluZ1ZhbHVlLCBtX2hl
YXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9vdXQuYW5j
aG9yKGZhc3RWYWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChm
YXN0VmFsdWUpLCByYXJlbHkobmVlZFJlc29sdXRpb24pLCB1c3VhbGx5KHJlc29sdmVkKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5lZWRSZXNvbHV0aW9uLCBy
ZXNvbHZlZCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcigKLSAgICAg
ICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
UmVzb2x2ZVJvcGUpLCBtX2NhbGxGcmFtZSwgc3RyaW5nVmFsdWUpKSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKHJlc29sdmVkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8ocmVzb2x2ZWQsIGlzOEJpdCk7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291
dC5waGkobV9vdXQuaW50UHRyLCB2YWx1ZXMpOwotICAgICAgICAgICAgTFZhbHVlIGNoYXJhY3Rl
ckRhdGEgPSBtX291dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7Ci0g
ICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblpl
cm8zMigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLlN0
cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgICAgICB1bnN1cmUo
aXM4Qml0KSwgdW5zdXJlKGlzMTZCaXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVj
dG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBjaGFyYWN0ZXJzOwotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKG1f
b3V0LmFuY2hvcihtX291dC5sb2FkOFplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNo
YXJhY3RlcnM4WzBdKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgY2hhcmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0
LmxvYWQxNlplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnMxNlswXSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICBidWlsZFN3aXRjaChkYXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0Lmlu
dDMyLCBjaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0cmluZ0lkZW50
VXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBsb3dTdHJpbmdJZGVu
dChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0
cmluZ0ltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJsb2NrID0gbG93
QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
V2VpZ2h0IHdlaWdodCA9IFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh2YWx1ZSwgYmxvY2ssIHdl
aWdodCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5n
SW1wbCwgY2FzZXMsIGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKLSAgICAgICAg
ICAgICAgICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBTdHJpbmdVc2U6IHsKLSAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwg
bG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGlzQ2VsbEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5n
IFVudHlwZWQgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3Ry
aW5nQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgVW50
eXBlZCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxC
bG9jayksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbEJsb2NrLCBpc1N0cmluZ0Jsb2NrKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIGlzU3Ry
aW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAgICAgICAgICAgICAg
ICAgICAgdW5zdXJlKGlzU3RyaW5nQmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNTdHJpbmdCbG9jaywgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHN3aXRjaFN0cmluZyhkYXRhLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVz
ZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTd2l0
Y2hDZWxsOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbDsKLSAgICAgICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2VsbFVzZTog
ewotICAgICAgICAgICAgICAgIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENlbGwg
Y2VsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgICAgICAgICAgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrKSkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNl
bGxDYXNlKTsKLSAgICAgICAgICAgICAgICBjZWxsID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNl
IGtpbmQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGJ1aWxkU3dpdGNoKG1fbm9kZS0+c3dpdGNoRGF0YSgpLCBtX291
dC5pbnRQdHIsIGNlbGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IH0KLSAgICAg
ICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQi
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUmV0dXJuKCkKLSAgICB7Ci0gICAgICAg
IG1fb3V0LnJldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlRm9yY2VPU1JFeGl0KCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZShJ
bmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUaHJvdygp
Ci0gICAgewotICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCi0gICAgewotICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFs
aWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJc
biIpOwotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0
T0spOwotICAgICAgICAKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChWb2lkKTsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOwotICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRDb2xkQW55cyhidWlsZEV4aXRBcmd1bWVudHMoZGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQs
IG5vVmFsdWUoKSkpOwotICAgICAgICAKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7Ci0KLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIE1hY3JvQXNzZW1ibGVyIGtub3dzIG1v
cmUgYWJvdXQgdGhpcyB0aGFuIEIzIGRvZXMuIFRoZSB3YXRjaHBvaW50TGFiZWwoKSBtZXRob2QK
LSAgICAgICAgICAgICAgICAvLyB3aWxsIGVuc3VyZSB0aGF0IHRoaXMgaXMgZm9sbG93ZWQgYnkg
YSBub3Agc2hhZG93IGJ1dCBvbmx5IHdoZW4gdGhpcyBpcyBhY3R1YWxseQotICAgICAgICAgICAg
ICAgIC8vIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxh
YmVsID0gaml0LndhdGNocG9pbnRMYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPE9T
UkV4aXRIYW5kbGU+IGhhbmRsZSA9IGRlc2NyaXB0b3ItPmVtaXRPU1JFeGl0TGF0ZXIoCi0gICAg
ICAgICAgICAgICAgICAgICpzdGF0ZSwgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIG9yaWdpbiwg
cGFyYW1zKTsKLQotICAgICAgICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gc3Rh
dGUtPmppdENvZGUuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0g
ICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgSnVtcFJlcGxhY2VtZW50IGp1bXBSZXBsYWNlbWVudCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWwpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxh
YmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uanVtcFJlcGxh
Y2VtZW50cy5hcHBlbmQoanVtcFJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3VzIHRoaW5ncy4K
LSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOwotICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc0xvY2FsU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoaXMgaXMgaG93IHdlIHRlbGwgQjMgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGp1
bXAgcmVwbGFjZW1lbnQuCi0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5
cyA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29t
ZSBwcmlvciBicmFuY2ggdG8gZGV0ZXJtaW5lIHRoZSBzYWZldHkgb2YgdGhpcyBvcGVyYXRpb24u
IEl0J3MgYWx3YXlzCi0gICAgICAgIC8vIGZpbmUgdG8gZXhlY3V0ZSB0aGlzIG9uIHNvbWUgcGF0
aCB0aGF0IHdvdWxkbid0IGhhdmUgb3JpZ2luYWxseSBleGVjdXRlZCBpdCBiZWZvcmUKLSAgICAg
ICAgLy8gb3B0aW1pemF0aW9uLgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmNvbnRyb2xE
ZXBlbmRlbnQgPSBmYWxzZTsKLQotICAgICAgICAvLyBJZiB0aGlzIGZhbGxzIHRocm91Z2ggdGhl
biBpdCB3b24ndCB3cml0ZSBhbnl0aGluZy4KLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53
cml0ZXMgPSBIZWFwUmFuZ2UoKTsKLQotICAgICAgICAvLyBXaGVuIHRoaXMgYWJydXB0bHkgdGVy
bWluYXRlcywgaXQgY291bGQgcmVhZCBhbnkgaGVhcCBsb2NhdGlvbi4KLSAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUlzVW5kZWZpbmVkKCkKLSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4oZXF1
YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1
YWxVbmRlZmluZWQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSXNCb29sZWFuKCkK
LSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4oaXNCb29sZWFuKGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlSXNOdW1iZXIoKQotICAgIHsKLSAgICAgICAgc2V0Qm9vbGVhbihpc051
bWJlcihsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUlzU3RyaW5nKCkKLSAgICB7
Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJJc1N0cmluZyBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNTdHJpbmcgY29udGludWF0aW9uIikp
OwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1
cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5w
aGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3QgY2VsbCBjYXNlIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IklzT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwot
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQu
cGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCi0gICAgewotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgRWRnZSBjaGlsZCA9IG1fbm9kZS0+
Y2hpbGQxKCk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQpOwotICAg
ICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzT2JqZWN0T3JOdWxsIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90
RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3Qg
ZnVuY3Rpb24gY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9y
TnVsbCBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgY2VsbCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
T2JqZWN0T3JOdWxsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwg
dW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlvbkNhc2UpOwotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpc0Z1bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJv
b2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRnVuY3Rp
b24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIG9iamVjdENhc2UpOwotICAgICAgICBWYWx1ZUZy
b21CbG9jayBub3RPYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNl
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVuc3VyZShvYmplY3RDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob2JqZWN0
Q2FzZSwgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAot
ICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2FzZSk7Ci0g
ICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc09iamVj
dCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3RaZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUg
bm90Q2VsbFJlc3VsdFZhbHVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG5vdENlbGxSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
cGhpKAotICAgICAgICAgICAgbV9vdXQuYm9vbGVhbiwKLSAgICAgICAgICAgIGlzRnVuY3Rpb25S
ZXN1bHQsIG5vdE9iamVjdFJlc3VsdCwgb2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0LCBub3RDZWxs
UmVzdWx0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsK
LSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5j
dGlvbiBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBub3QgZnVuY3Rpb24gY2FzZSIpKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
RnVuY3Rpb24gc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY29udGludWF0aW9uIikpOwotICAg
ICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
blRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0Z1bmN0aW9uKHZh
bHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9u
KSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJv
dmVuVHlwZShjaGlsZCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShj
b250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwg
bG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxs
KHNsb3dSZXN1bHRWYWx1ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKLSAgICAgICAgICAgIG1fb3V0LmJv
b2xlYW4sIG5vdENlbGxSZXN1bHQsIGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwotICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVR5cGVPZigpCi0gICAgewotICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5j
aGlsZDEoKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7Ci0gICAg
ICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlR5cGVPZiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgIAotICAg
ICAgICBidWlsZFR5cGVPZigKLSAgICAgICAgICAgIGNoaWxkLCB2YWx1ZSwKLSAgICAgICAgICAg
IFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlw
ZSkpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJl
c3VsdHMpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSW4oKQotICAgIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAgICAgRWRnZSBiYXNlID0gbm9kZS0+Y2hpbGQy
KCk7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChiYXNlKTsKLSAgICAgICAgaWYgKEpT
U3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0
cmluZyo+KCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYm
IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKLSAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogc3RyID0gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBs
Kj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7Ci0gICAgICAgICAgICAgICAgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihjZWxsKTsKLSAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7Ci0KLSAgICAgICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
LSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gcGFyYW1zWzFdLmdwcigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHBhcmFtc1swXS5ncHIoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6Oklu
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENvZGVP
cmlnaW4obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5jb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGJhc2VHUFIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVl
R1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihyZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRj
aGFibGVKdW1wIGp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcC5saW5rKCZq
aXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIG51bGxwdHIsIG9wZXJhdGlvbkluT3B0aW1pemUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RyKSkuY2FsbCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25l
LCAmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENh
bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhC
ZWdpbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0KLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZW5lcmljSW4pLCBtX2Nh
bGxGcmFtZSwgY2VsbCwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIEpT
RnVuY3Rpb24qIGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotCi0gICAgICAgIExWYWx1ZSBjb25z
dHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBoYXNJ
bnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgTEJhc2lj
QmxvY2sgZGVmYXVsdEhhc0luc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlk
ZXNIYXNJbnN0YW5jZSBTeW1ib2wuaGFzSW5zdGFuY2UgaXMgZGVmYXVsdCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlk
ZXNIYXNJbnN0YW5jZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgLy8gVW5saWtlIGluIHRo
ZSBERkcsIHdlIGRvbid0IHdvcnJ5IGFib3V0IGNsZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhl
IGNhc2Ugd2hlcmUgd2UgaGF2ZSBwcm92ZW4gdGhlIGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25z
dGFudCBhcyBMTFZNIHNob3VsZCBmaXggaXQgZm9yIHVzLgotCi0gICAgICAgIEFTU0VSVCghbV9u
b2RlLT5jaGlsZDIoKS5ub2RlKCktPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3Rh
bmNlRnVuY3Rpb24gPT0gbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCktPmFzQ2VsbCgpKTsKLQotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBub3REZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90
RXF1YWwoaGFzSW5zdGFuY2UsIG1fb3V0LmNvbnN0SW50UHRyKGRlZmF1bHRIYXNJbnN0YW5jZUZ1
bmN0aW9uKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZGVmYXVsdEhhc0luc3RhbmNl
KSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkZWZh
dWx0SGFzSW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQudGVz
dElzWmVybzMyKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY29uc3RydWN0b3Is
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOwotICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGlt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQsIG5vdERlZmF1bHRIYXNJbnN0YW5jZVJl
c3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpCi0g
ICAgewotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlSW5mb0ZsYWdzLCBu
b1ZhbHVlKCksIDAsCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9o
ZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihtX25vZGUtPnR5cGVJbmZvT3BlcmFuZCgpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVJbnN0YW5jZU9mKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsOwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
Ci0gICAgICAgICAgICBjZWxsID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgcHJvdG90eXBlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkluc3RhbmNlT2YgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGxvb3AiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFlldEluc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJJbnN0YW5jZU9mIG5vdCB5ZXQgaW5zdGFuY2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjb250aW51YXRp
b24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgY29uZGl0aW9uOwotICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgIGNv
bmRpdGlvbiA9IGlzQ2VsbChjZWxsLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhblRydWU7Ci0g
ICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24s
IHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBs
b29wKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBub1ZhbHVlKCksIDAs
IGlzTm90T2JqZWN0KHByb3RvdHlwZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSkpOwot
ICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxWYWx1ZSA9IG1fb3V0LmFu
Y2hvcihjZWxsKTsKLSAgICAgICAgbV9vdXQuanVtcChsb29wKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGxvb3AsIG5vdFlldEluc3RhbmNlKTsKLSAgICAgICAgTFZhbHVlIHZh
bHVlID0gbV9vdXQucGhpKG1fb3V0LmludDY0LCBvcmlnaW5hbFZhbHVlKTsKLSAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUpOwotICAgICAgICBMVmFsdWUgY3Vy
cmVudFByb3RvdHlwZSA9IG1fb3V0LmxvYWQ2NChzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJl
X3Byb3RvdHlwZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzSW5zdGFuY2VSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBtX291dC5lcXVhbChjdXJyZW50UHJvdG90eXBlLCBwcm90b3R5cGUpLAotICAg
ICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RZZXRJbnN0YW5jZSkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90WWV0SW5zdGFuY2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdEluc3RhbmNlUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9Q
aGkodmFsdWUsIG1fb3V0LmFuY2hvcihjdXJyZW50UHJvdG90eXBlKSk7Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChpc0NlbGwoY3VycmVudFByb3RvdHlwZSksIHVuc3VyZShsb29wKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICBtX291dC5w
aGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgaXNJbnN0YW5jZVJlc3VsdCwgbm90SW5z
dGFuY2VSZXN1bHQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9t
KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDMoKSk7Ci0KLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVx
dWFsKG1fb3V0LmNvbnN0SW50MzIoMCksIHZtQ2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20pLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGNvbnN0
cnVjdG9yLCBoYXNJbnN0YW5jZSkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNv
dW50RXhlY3V0aW9uKCkKLSAgICB7Ci0gICAgICAgIFR5cGVkUG9pbnRlciBjb3VudGVyID0gbV9v
dXQuYWJzb2x1dGUobV9ub2RlLT5leGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSk7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlNjQobV9vdXQuYWRkKG1fb3V0LmxvYWQ2NChjb3VudGVyKSwgbV9vdXQu
Y29uc3RJbnQ2NCgxKSksIGNvdW50ZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVT
dG9yZUJhcnJpZXIoKQotICAgIHsKLSAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7Ci0KLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAgICAg
IG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3Vv
dXNQcm9wZXJ0aWVzOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hvbGUgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjaGVj
ayBob2xlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBzbG93IGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjb250aW51YXRpb24i
KSk7Ci0KLSAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5s
b2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
KSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja0hv
bGUpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2hl
Y2tIb2xlKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhjaGVja0hvbGUsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVS
ZXN1bHRWYWx1ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2
NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3Io
Y2hlY2tIb2xlUmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9s
ZVJlc3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwot
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1fY2FsbEZyYW1l
LCBiYXNlLCBpbmRleCkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBjaGVja0hvbGVS
ZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dT
dG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBJbmRl
eGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllczsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIb2xlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIGNoZWNrIGhvbGUiKSk7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiSGFzSW5kZXhlZFByb3BlcnR5IGRvdWJsZSBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4
ZWRQcm9wZXJ0eSBkb3VibGUgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1
YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCi0gICAgICAgICAg
ICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7Ci0KLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xl
LCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2Fk
RG91YmxlKGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkp
OwotICAgICAgICAgICAgTFZhbHVlIGNoZWNrSG9sZVJlc3VsdFZhbHVlID0gbV9vdXQuZG91Ymxl
RXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNoZWNrSG9sZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7
Ci0gICAgICAgICAgICBtX291dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKLSAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4KSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUg
cHJvcGVydHkgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQ
cm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSkpOwotICAgIH0KLQotICAgIHZv
aWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBi
YXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHByb3Bl
cnR5ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVy
YXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29ycmVjdFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJv
cGVydHkgY29ycmVjdCBzdHJ1Y3R1cmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHdyb25nU3Ry
dWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSB3cm9u
ZyBzdHJ1Y3R1cmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJvcGVydHkgY29udGludWF0aW9uIikpOwot
Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAgICAgIHJhcmVseSh3cm9uZ1N0cnVjdHVyZSks
IHVzdWFsbHkoY29ycmVjdFN0cnVjdHVyZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY29ycmVjdFN0cnVjdHVyZSwgd3JvbmdTdHJ1Y3R1cmUpOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBjb3JyZWN0U3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdyb25nU3RydWN0dXJlLCBjb250aW51YXRpb24p
OwotICAgICAgICBWYWx1ZUZyb21CbG9jayB3cm9uZ1N0cnVjdHVyZVJlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKLSAgICAgICAgICAg
ICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5l
cmljUHJvcGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9v
bGVhbiwgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCwgd3JvbmdTdHJ1Y3R1cmVSZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpCi0gICAgewotICAgICAgICBM
VmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKLSAg
ICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBjaGVj
a09mZnNldCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY2hlY2sgb2Zm
c2V0IikpOwotICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJHZXREaXJlY3RQbmFtZSBpbmxpbmUgbG9hZCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZMaW5lTG9hZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUg
b3V0LW9mLWxpbmUgbG9hZCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIHNsb3cgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJl
Y3RQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5v
dEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBz
LkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOwotCi0gICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tPZmZzZXQsIGlubGluZUxv
YWQpOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBtX291
dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkSW5saW5lQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgIHVuc3VyZShvdXRPZkxpbmVMb2FkKSwg
dW5zdXJlKGlubGluZUxvYWQpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2Fk
LCBvdXRPZkxpbmVMb2FkKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCi0gICAgICAgICAgICAgICAgYmFzZSwg
bV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50NjQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7
Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOwot
ICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKLSAgICAgICAg
ICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7
Ci0gICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2Nh
bGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKAotICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgaW5saW5lUmVzdWx0LCBvdXRPZkxpbmVSZXN1bHQsIHNsb3dDYXNlUmVzdWx0KSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdl
dFByb3BlcnR5RW51bWVyYXRvcigpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKSwgbV9j
YWxsRnJhbWUsIGJhc2UpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGluIGJvdW5kcyIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSBvdXQgb2YgYm91bmRzIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAot
ICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOwotCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91
dE9mQm91bmRzKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1l
cmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3IpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVh
cHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250
ZW50cywgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpKSk7Ci0gICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5k
cywgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludDY0LCBpbkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCkKLSAgICB7Ci0g
ICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUgaW4gYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRP
ZkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZSBvdXQgb2YgYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgY29udGludWF0
aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFy
ZWx5KG91dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGlu
ZGV4KSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZy
b21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0
KFZhbHVlTnVsbCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRP
ZkJvdW5kc1Jlc3VsdCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3Ry
aW5nKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlLCBub1ZhbHVl
KCksIEJhZENhY2hlLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgW3RoaXNd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKQotICAgIHsKLSAgICAgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpOwotICAgICAgICAKLSAgICAgICAgLy8gTG93ZXIgdGhlIHZhbHVlcyBmaXJzdCwgdG8gYXZv
aWQgY3JlYXRpbmcgdmFsdWVzIGluc2lkZSBhIGNvbnRyb2wgZmxvdyBkaWFtb25kLgotICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVzOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEg
KyBpKSkpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSBtX25v
ZGUtPnN0cnVjdHVyZVNldCgpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAxPiBibG9ja3Moc2V0LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspCi0gICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2UgIiwgaSkpOwotICAgICAgICBMQmFzaWNCbG9j
ayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGRlZmF1bHQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhz
ZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykK
LSAgICAgICAgICAgIGNhc2VzW2ldID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSks
IGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKTsKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24o
Ci0gICAgICAgICAgICBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNh
c2VzLCBkdW1teURlZmF1bHQsIFdlaWdodCgwKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7Ci0gICAgICAgIAotICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDE+IHJlc3VsdHM7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBk
dW1teURlZmF1bHQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHNldFtpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsK
LSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1
Y3RvcihhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXpl
TmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBl
bmRPZlN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUs
IHNsb3dQYXRoKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3Qg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwotCi0gICAgICAgICAgICAgICAgTFZhbHVlIHNsb3dPYmplY3RWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNo
b3Ioc2xvd09iamVjdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKHNsb3dPYmplY3RWYWx1ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb2JqZWN0
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRl
cmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2Nh
dGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQotICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0
byBkaXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KLSAgICAgICAgICAgICAgICBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5
IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBk
YXRhLm1fcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQp
ID8gb2JqZWN0IDogYnV0dGVyZmx5OwotICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5
KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihvYmplY3QpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24p
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1
bHQsIG91dGVyQ29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1
bHRzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0
aW9uKCkKLSAgICB7Ci0gICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBt
X25vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKLQotICAgICAgICBWZWN0b3I8TFZh
bHVlLCA4PiB2YWx1ZXM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1f
cHJvcGVydGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMiArIGkpKSk7Ci0KLSAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAg
ICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxl
Kj4oKTsKLSAgICAgICAgQVNTRVJUKHRhYmxlID09IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKS0+Y2FzdENvbnN0YW50PFN5bWJvbFRhYmxlKj4oKSk7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbiBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uIGNvbnRpbnVhdGlvbiIp
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nr
c0JlZm9yZShzbG93UGF0aCk7Ci0KLSAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0
ZU9iamVjdDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICBKU0xleGljYWxFbnZp
cm9ubWVudDo6YWxsb2NhdGlvblNpemUodGFibGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clpl
cm8sIHNsb3dQYXRoKTsKLQotICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVj
dCwgbV9oZWFwcy5KU1Njb3BlX25leHQpOwotICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9p
bnRlcih0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1i
b2xUYWJsZSk7Ci0KLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGZhc3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IC8vIFdlIGVuc3VyZSBhbGxvY2F0aW9uIHNpbmtpbmcgZXhwbGljdGx5IHNldHMgYm90dG9tIHZh
bHVlcyBmb3IgYWxsIGZpZWxkIG1lbWJlcnMuIAotICAgICAgICAvLyBUaGVyZWZvcmUsIGl0IGRv
ZXNuJ3QgbWF0dGVyIHdoYXQgSlNWYWx1ZSB3ZSBwYXNzIGluIGFzIHRoZSBpbml0aWFsaXphdGlv
biB2YWx1ZQotICAgICAgICAvLyBiZWNhdXNlIGFsbCBmaWVsZHMgd2lsbCBiZSBvdmVyd3JpdHRl
bi4KLSAgICAgICAgLy8gRklYTUU6IEl0IG1heSBiZSB3b3J0aCBjcmVhdGluZyBhbiBvcGVyYXRp
b24gdGhhdCBjYWxscyBhIGNvbnN0cnVjdG9yIG9uIEpTTGV4aWNhbEVudmlyb25tZW50IHRoYXQg
Ci0gICAgICAgIC8vIGRvZXNuJ3QgaW5pdGlhbGl6ZSBldmVyeSBzbG90IGJlY2F1c2Ugd2UgYXJl
IGd1YXJhbnRlZWQgdG8gZG8gdGhhdCBoZXJlLgotICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9
IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSk7Ci0gICAgICAgICAgICB9LCBzY29wZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSAgbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEu
bV9wcm9wZXJ0aWVzLnNpemUoKSA9PSB0YWJsZS0+c2NvcGVTaXplKCkpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWVzW2ldLAotICAgICAgICAgICAgICAgIGFjdGl2
YXRpb24sCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3Zhcmlh
Ymxlc1tkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXJdKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAvLyBW
YWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUgaGFzIG9uZSB2YWx1
ZS4KLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2sp
OwotICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5k
ID0gdGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA9PSBkYXRhLm1f
cHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHNldEpTVmFsdWUoYWN0aXZhdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hl
Y2tXYXRjaGRvZ1RpbWVyKCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHRpbWVyRGlkRmly
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIHRpbWVyIGRpZCBm
aXJlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrV2F0Y2hkb2dUaW1lciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0
ZSh2bSgpLndhdGNoZG9nKCktPnRpbWVyRGlkRmlyZUFkZHJlc3MoKSkpOwotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuaXNaZXJvMzIoc3RhdGUpLAotICAgICAgICAgICAgdXN1YWxseShjb250
aW51YXRpb24pLCByYXJlbHkodGltZXJEaWRGaXJlKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh0aW1lckRpZEZpcmUsIGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9j
YXRpb24+JikgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKG9wZXJhdGlvbkhhbmRsZVdhdGNo
ZG9nVGltZXIsIEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLQotICAgIExWYWx1ZSBkaWRPdmVyZmxvd1N0
YWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIGxlYWYgZnVu
Y3Rpb24gYW5hbHlzaXMuIFRoZSBpbnZhcmlhbnQgb2YgRlRMIGNhbGwKLSAgICAgICAgLy8gZnJh
bWVzIGlzIHRoYXQgdGhlIGNhbGxlciBoYWQgYWxyZWFkeSBkb25lIGVub3VnaCBvZiBhIHN0YWNr
IGNoZWNrIHRvCi0gICAgICAgIC8vIHByb3ZlIHRoYXQgdGhpcyBjYWxsIGZyYW1lIGhhcyBlbm91
Z2ggc3RhY2sgdG8gcnVuLCBhbmQgYWxzbyBlbm91Z2ggc3RhY2sKLSAgICAgICAgLy8gdG8gbWFr
ZSBydW50aW1lIGNhbGxzLiBTbywgd2Ugb25seSBuZWVkIHRvIHN0YWNrIGNoZWNrIHdoZW4gbWFr
aW5nIGNhbGxzCi0gICAgICAgIC8vIHRvIG90aGVyIEpTIGZ1bmN0aW9ucy4gSWYgd2UgZG9uJ3Qg
ZmluZCBzdWNoIGNhbGxzIHRoZW4gd2UgZG9uJ3QgbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnkg
c3RhY2sgY2hlY2tzLgotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoK
LSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDYWxs
OgotICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuYmVsb3coCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZGVExTdGFja0xpbWl0KCkp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgc3RydWN0IEFyZ3VtZW50c0xlbmd0aCB7Ci0gICAgICAgIEFyZ3Vt
ZW50c0xlbmd0aCgpCi0gICAgICAgICAgICA6IGlzS25vd24oZmFsc2UpCi0gICAgICAgICAgICAs
IGtub3duKFVJTlRfTUFYKQotICAgICAgICAgICAgLCB2YWx1ZShudWxscHRyKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNLbm93bjsKLSAgICAgICAgdW5z
aWduZWQga25vd247Ci0gICAgICAgIExWYWx1ZSB2YWx1ZTsKLSAgICB9OwotICAgIEFyZ3VtZW50
c0xlbmd0aCBnZXRBcmd1bWVudHNMZW5ndGgoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCi0gICAgewotICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoOwotCi0gICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAg
ICAgICAgICAgIGxlbmd0aC5rbm93biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDE7Ci0gICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IHRydWU7Ci0gICAgICAgICAgICBs
ZW5ndGgudmFsdWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0aC5rbm93bik7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24gPSBVSU5UX01BWDsKLSAgICAgICAgICAg
IGxlbmd0aC5pc0tub3duID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7Ci0gICAgICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXI7Ci0gICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5z
dWIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0
LmludDMyT25lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsK
LSAgICB9Ci0gICAgCi0gICAgQXJndW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRzTGVuZ3RoKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBnZXRDdXJy
ZW50Q2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGZyYW1lID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBp
ZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
KTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
Y29uc3RhbnQoKS5hc0NlbGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQot
ICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjph
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihzdGFydCkudmFsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0
YXJ0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRBcmd1bWVudHNTdGFydChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgIExW
YWx1ZSBzdHJ1Y3R1cmVEaXNjcmltaW5hbnQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0
ZWRWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQsCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0LCBjb25zdCBGdW5jdG9yJiB3ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KQotICAgIHsKLSAg
ICAgICAgaWYgKHNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZShleGl0S2lu
ZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2V0LnNp
emUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhp
dEtpbmQsIGZvcm1hdHRlZFZhbHVlLCAwLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbMF0p
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1
Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUiKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3
ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KHNldFtpXSkpLAotICAgICAgICAgICAgICAgIHVuc3Vy
ZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOwotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKLSAg
ICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVj
dHVyZURpc2NyaW1pbmFudChzZXQubGFzdCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50
MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBp
bnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlZhbHVlVG9JbnQzMiBub3QgaW50IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRvdWJs
ZUNhc2UgPSAwOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gMDsKLSAgICAg
ICAgaWYgKGVkZ2UudXNlS2luZCgpID09IE5vdENlbGxVc2UpIHsKLSAgICAgICAgICAgIGRvdWJs
ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBkb3VibGUgY2FzZSIp
KTsKLSAgICAgICAgICAgIG5vdE51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZh
bHVlVG9JbnQzMiBub3QgbnVtYmVyIGNhc2UiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
PiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIodmFs
dWUpLCB1bnN1cmUobm90SW50Q2FzZSksIHVuc3VyZShpbnRDYXNlKSk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIG5vdElu
dENhc2UpOwotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMih2
YWx1ZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGVkZ2UudXNlS2luZCgpID09IE51bWJlclVzZSkgewotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90SW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwg
aXNDZWxsT3JNaXNjKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3IoZG91YmxlVG9JbnQzMih1bmJveERvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhub3RJbnRDYXNlLCBkb3VibGVDYXNlKTsKLSAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBpc0NlbGxPck1pc2ModmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpLCB1bnN1cmUobm90TnVtYmVyQ2FzZSksIHVuc3VyZShkb3VibGVDYXNlKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdE51bWJl
ckNhc2UpOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRv
SW50MzIodW5ib3hEb3VibGUodmFsdWUpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RO
dW1iZXJDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2
YWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3BlY2lhbFJlc3VsdCA9
IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmludDMyT25lLCBtX291dC5pbnQzMlplcm8pOwotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHNwZWNpYWxSZXN1bHQpKTsKLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291
dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tJbmZl
cnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQ
RV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFz
IGluIGEgbm9kZSBsaWtlOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9m
ZnNldCguLi4pCi0gICAgICAgIC8vCi0gICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgotICAg
ICAgICAvLwotICAgICAgICAvLyAgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgewotICAg
ICAgICAvLyAgICAgY2FzZSA0MjoKLSAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlw
ZSguLi4sIHR5cGUxKTsKLSAgICAgICAgLy8gICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAg
ICBicmVhazsKLSAgICAgICAgLy8gICAgIGNhc2UgNDM6Ci0gICAgICAgIC8vICAgICAgICAgY2hl
Y2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7Ci0gICAgICAgIC8vICAgICAgICAgLi4uCi0gICAg
ICAgIC8vICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vICAgICB9Ci0gICAgICAgIC8vCi0gICAg
ICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hl
Y2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQgYmUKLSAgICAgICAgLy8gZmlsdGVy
ZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgotICAgICAgICAK
LSAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm90dG9tOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90
Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJv
dmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OlN0cmluZzoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3lt
Ym9sKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgaWYgKCFhYnN0
cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUu
c3RydWN0dXJlKCkpKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJl
ZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9u
IikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5v
dENlbGxDYXNlKTsKLQotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgewotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkg
JiB+U3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hl
Y2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShj
ZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENh
c2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAg
ICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7
Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb2Fk
UHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRk
cmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3RvcmVQcm9wZXJ0eSgKLSAgICAgICAgTFZhbHVlIHZhbHVlLCBM
VmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc09mUHJv
cGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7Ci0gICAgfQotICAgIAot
ICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzT2ZQcm9wZXJ0eSgKLSAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKAotICAgICAgICAgICAgbV9oZWFwcy5w
cm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShvZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9u
KAotICAgICAgICBMVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgICAg
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkK
LSAgICB7Ci0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KQotICAgICAgICAgICAgcmV0dXJuIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFwcmV2aW91c1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0g
ICAgICAgICAgICAgICAgb2JqZWN0LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KSwK
LSAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3Ry
dWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdm1DYWxsKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmludFB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKLSAgICAgICAgICAgICAgICBtX2NhbGxG
cmFtZSwgb2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAotICAgICAgICBMVmFsdWUg
b2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJl
KiBuZXh0KQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZM
aW5lR3Jvd3RoRmFjdG9yOyAKLQotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUg
PT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBu
ZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwg
bV9jYWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJ
bXBsKG5ld1NpemUpOwotCi0gICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJ
bmRleGluZ0hlYWRlcikgLSBzaXplb2Yodm9pZCopOwotICAgICAgICBwdHJkaWZmX3QgZW5kU3Rv
cmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXpl
b2YoSlNWYWx1ZSkpOwotCi0gICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNp
emU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgbG9hZGVkID0gCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0ciht
X291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdl
LCBvZmZzZXQpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRk
cmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291
dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQotICAgIHsK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxs
b2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7Ci0gICAgICAgIAot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHNsb3dCdXR0ZXJmbHlWYWx1ZTsK
LSAgICAgICAgaWYgKHNpemVJblZhbHVlcyA9PSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpIHsK
LSAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAg
ICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBs
YXp5U2xvd1BhdGgoCi0gICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHNpemVJblZhbHVlcykpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
c2xvd0J1dHRlcmZseVZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBMVmFs
dWUgZ2V0QnlJZChMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25v
ZGU7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0gICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYg
dGhpcyBpcyBhIEdldEJ5SWRGbHVzaCwgd2UgbWlnaHQgZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYm9v
c3QgaWYgd2UgY2xhaW0gdGhhdCBpdAotICAgICAgICAvLyBjbG9iYmVycyB2b2xhdGlsZSByZWdp
c3RlcnMgbGF0ZS4gSXQncyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgdGhvdWdoLCBz
aW5jZSB0aGUKLSAgICAgICAgLy8gSUMgY29kZSBpcyBzdXBlciBzbWFydCBhYm91dCBzYXZpbmcg
cmVnaXN0ZXJzLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyODQ4Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0KLSAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
LSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENv
ZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJnZXQgZm9y
IG9wZXJhdGlvbiBjYWxscy4KLSAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1w
TGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+
c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGV4aXQgZm9yIGNhbGwgSUMncyBjcmVhdGVkIGJ5IHRoZSBnZXRC
eUlkIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8g
YW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwgYXNzb2Np
YXRlIHRoZSBleGl0IHdpdGgKLSAgICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW5kZXgu
Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZv
clVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBn
ZW5lcmF0b3IgPSBCb3g8SklUR2V0QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxTaXRl
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQ
YXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1Bh
dGhKdW1wKCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBwYXJh
bXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlk
KSkuY2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9u
ZSwgJmppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0U2xv
d1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsK
LQotICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZEJ1
dHRlcmZseVdpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29weUJhcnJpZXIoCi0gICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7Ci0gICAg
fQotICAgIAotICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9i
amVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICByZXR1cm4g
Y29weUJhcnJpZXIoCi0gICAgICAgICAgICBmYXN0UmVzdWx0VmFsdWUsCi0gICAgICAgICAgICBb
Jl0gKCkgLT4gTFZhbHVlIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIHNsb3cgcGF0aCIp
KTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImxvYWRWZWN0b3JXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVk
QXJyYXkob2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsK
LQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jl
c3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlC
dWZmZXJWZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9LCBvYmplY3QpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50
ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBwb2ludGVyLAotICAgICAgICAgICAgWyZd
ICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsK
LSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNvcHlCYXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBjb250
aW51YXRpb24iKSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihwb2ludGVyKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50
ZXIpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwotCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihmdW5jdG9yKCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVy
biBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgaXNJblRvU3BhY2UoTFZhbHVlIHBvaW50ZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQudGVzdElzWmVyb1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihD
b3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOwotICAgIH0KLQotICAgIExWYWx1ZSBsb2FkQnV0
dGVyZmx5UmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZW1v
dmVTcGFjZUJpdHMobV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQ
dHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0KLSAgICAgICAg
TEJhc2ljQmxvY2sgcG9zc2libHlGcm9tU3BhY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxv
YWRWZWN0b3JSZWFkT25seSBwb3NzaWJseSBmcm9tIHNwYWNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFk
T25seSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotCi0gICAgICAgIG1fb3V0LmJyYW5j
aChpc0luVG9TcGFjZShmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShwb3NzaWJseUZyb21TcGFjZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8ocG9zc2libHlGcm9tU3BhY2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAg
IGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1bHRWYWx1
ZSksIGZhc3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIExWYWx1ZSByZW1vdmVTcGFjZUJp
dHMoTFZhbHVlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5kKAot
ICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0
cl90PihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
aXNGYXN0VHlwZWRBcnJheShMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFwcy5KU0Fy
cmF5QnVmZmVyVmlld19tb2RlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5
cGVkQXJyYXkpKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRl
eGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBFZGdl
IGVkZ2UsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmJhc2VJbmRleCgKLSAgICAgICAgICAgIGhlYXAsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpLCBwcm92ZW5WYWx1ZShlZGdlKSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRGdW5jdG9yLCB0eXBlbmFtZSBEb3VibGVGdW5jdG9yPgotICAgIHZvaWQg
Y29tcGFyZSgKLSAgICAgICAgY29uc3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgY29uc3QgRG91
YmxlRnVuY3RvciYgZG91YmxlRnVuY3RvciwKLSAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KEludDMyVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkpIHsKLSAgICAgICAgICAgIElu
dDUyS2luZCBraW5kOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1
MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxv
d0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihp
bnRGdW5jdG9yKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBV
c2UpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oZG91YmxlRnVuY3RvcihsZWZ0LCByaWdodCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIG5vblNw
ZWN1bGF0aXZlQ29tcGFyZShpbnRGdW5jdG9yLCBoZWxwZXJGdW5jdGlvbik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGFy
ZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQp
Ci0gICAgewotICAgICAgICBMVmFsdWUgcmlnaHRDZWxsID0gbG93Q2VsbChyaWdodENoaWxkKTsK
LSAgICAgICAgTFZhbHVlIGxlZnRWYWx1ZSA9IGxvd0pTVmFsdWUobGVmdENoaWxkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2Jq
ZWN0KHJpZ2h0Q2hpbGQsIHJpZ2h0Q2VsbCwgU3BlY09iamVjdCk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsZWZ0Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBh
cmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCBsZWZ0IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGVmdE5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJl
RXFPYmplY3RPck90aGVyVG9PYmplY3QgbGVmdCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVF
cU9iamVjdE9yT3RoZXJUb09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwobGVmdFZhbHVlLCBwcm92ZW5UeXBl
KGxlZnRDaGlsZCkpLAotICAgICAgICAgICAgdW5zdXJlKGxlZnRDZWxsQ2FzZSksIHVuc3VyZShs
ZWZ0Tm90Q2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obGVmdENlbGxDYXNlLCBsZWZ0Tm90Q2VsbENhc2UpOwotICAgICAg
ICBzcGVjdWxhdGVUcnV0aHlPYmplY3QobGVmdENoaWxkLCBsZWZ0VmFsdWUsIFNwZWNPYmplY3Qg
fCAoflNwZWNDZWxsKSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuZXF1YWwocmlnaHRDZWxsLCBsZWZ0VmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bGVmdE5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBGVExfVFlQRV9DSEVDSygK
LSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShsZWZ0VmFsdWUpLCBsZWZ0Q2hpbGQsIFNwZWNPdGhl
ciB8IFNwZWNDZWxsLCBpc05vdE90aGVyKGxlZnRWYWx1ZSkpOwotICAgICAgICBWYWx1ZUZyb21C
bG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShtX291dC5ib29sZWFuLCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVl
IGNlbGwsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKLSAgICB7Ci0gICAgICAgIGlmIChtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBG
VExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmpl
Y3QoY2VsbCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNO
b3RPYmplY3QoY2VsbCkpOwotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgbV9vdXQudGVz
dE5vblplcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBt
X2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW50RnVuY3Rvcj4KLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlQ29tcGFyZShjb25z
dCBJbnRGdW5jdG9yJiBpbnRGdW5jdG9yLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pCi0gICAgewotICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsZWZ0SXNJbnQgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGxlZnQgaXMgaW50IikpOwotICAgICAgICBM
QmFzaWNCbG9jayBmYXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVu
dHlwZWQgZmFzdCBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgc2xvdyBwYXRoIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBh
cmVFcSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdEludDMyKGxlZnQpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGxlZnRJc0lu
dCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhsZWZ0SXNJbnQsIGZhc3RQYXRoKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50
MzIocmlnaHQpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludEZ1bmN0b3IodW5ib3hJ
bnQzMihsZWZ0KSwgdW5ib3hJbnQzMihyaWdodCkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQubm90TnVsbCh2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnRQdHIsIG1f
b3V0Lm9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgc3RyaW5nc0VxdWFsKExWYWx1ZSBsZWZ0SlNTdHJpbmcsIExWYWx1
ZSByaWdodEpTU3RyaW5nKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5
VW5lcXVhbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBub3QgdHJp
dmlhbGx5IHVuZXF1YWwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbm90IGVtcHR5IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoInN0cmluZ3NFcXVhbCBsZWZ0IHJlYWR5IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IHJpZ2h0UmVhZHlDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmln
aHQgcmVhZHkgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGVmdDhCaXRDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbGVmdCA4LWJpdCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayByaWdodDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgcmlnaHQgOC1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbG9v
cCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxvb3AiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGJ5dGVzRXF1YWwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NF
cXVhbCBieXRlcyBlcXVhbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCB0cnVlIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGZhbHNlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFs
IGZhbHNlIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgc2xvdyBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihs
ZWZ0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKLQotICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmxvYWQzMihy
aWdodEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpLAotICAgICAgICAgICAgdW5z
dXJlKGZhbHNlQ2FzZSksIHVuc3VyZShub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSkpOwotCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5VW5l
cXVhbENhc2UsIG5vdEVtcHR5Q2FzZSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmlz
WmVybzMyKGxlbmd0aCksIHVuc3VyZSh0cnVlQ2FzZSksIHVuc3VyZShub3RFbXB0eUNhc2UpKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RFbXB0eUNhc2UsIGxlZnRSZWFkeUNhc2UpOwot
Ci0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbV9vdXQubG9hZFB0cihsZWZ0SlNTdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291dC5sb2FkUHRy
KHJpZ2h0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotCi0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3ROdWxsKGxlZnQpLCB1c3VhbGx5KGxlZnRSZWFkeUNhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhsZWZ0UmVhZHlDYXNlLCBy
aWdodFJlYWR5Q2FzZSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90
TnVsbChyaWdodCksIHVzdWFsbHkocmlnaHRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhyaWdodFJlYWR5Q2FzZSwgbGVmdDhCaXRDYXNlKTsK
LQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9o
YXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1w
bDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAgICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUo
bGVmdDhCaXRDYXNlKSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdDhCaXRDYXNlLCBy
aWdodDhCaXRDYXNlKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHJpZ2h0LCBtX2hl
YXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAgICAgICAgdW5zdXJlKHNs
b3dDYXNlKSwgdW5zdXJlKHJpZ2h0OEJpdENhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhyaWdodDhCaXRDYXNlLCBsb29wKTsKLQotICAgICAgICBMVmFsdWUgbGVmdERhdGEgPSBtX291
dC5sb2FkUHRyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKLSAgICAgICAgTFZhbHVl
IHJpZ2h0RGF0YSA9IG1fb3V0LmxvYWRQdHIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRh
KTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmRleEF0U3RhcnQgPSBtX291dC5hbmNob3Io
bGVuZ3RoKTsKLQotICAgICAgICBtX291dC5qdW1wKGxvb3ApOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3AsIGJ5dGVzRXF1YWwpOwotCi0gICAgICAgIExWYWx1ZSBpbmRleEF0TG9vcFRv
cCA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW5kZXhBdFN0YXJ0KTsKLSAgICAgICAgTFZhbHVl
IGluZGV4SW5Mb29wID0gbV9vdXQuc3ViKGluZGV4QXRMb29wVG9wLCBtX291dC5pbnQzMk9uZSk7
Ci0KLSAgICAgICAgTFZhbHVlIGxlZnRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCi0gICAg
ICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgbGVmdERhdGEsIG1f
b3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3ApKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodEJ5dGUg
PSBtX291dC5sb2FkOFplcm9FeHQzMigKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLmNoYXJhY3RlcnM4LCByaWdodERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3Ap
KSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGxlZnRCeXRlLCByaWdo
dEJ5dGUpLCB1bnN1cmUoZmFsc2VDYXNlKSwgdW5zdXJlKGJ5dGVzRXF1YWwpKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyhieXRlc0VxdWFsLCB0cnVlQ2FzZSk7Ci0KLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgaW5kZXhGb3JOZXh0SXRlcmF0aW9uID0gbV9vdXQuYW5jaG9yKGluZGV4SW5Mb29w
KTsKLSAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleEF0TG9vcFRvcCwgaW5kZXhG
b3JOZXh0SXRlcmF0aW9uKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihp
bmRleEluTG9vcCksIHVuc3VyZShsb29wKSwgdW5zdXJlKHRydWVDYXNlKSk7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8odHJ1ZUNhc2UsIGZhbHNlQ2FzZSk7Ci0gICAgICAgIAotICAgICAgICBW
YWx1ZUZyb21CbG9jayB0cnVlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVl
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGZhbHNlQ2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
bHNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2Fz
ZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gdm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaW5nRXEpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIGxlZnRKU1N0cmluZywg
cmlnaHRKU1N0cmluZyk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3IodW5ib3hCb29sZWFuKHNsb3dSZXN1bHRWYWx1ZSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1
ZVJlc3VsdCwgZmFsc2VSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIGVudW0gU2Ny
YXRjaEZQUlVzYWdlIHsKLSAgICAgICAgRG9udE5lZWRTY3JhdGNoRlBSLAotICAgICAgICBOZWVk
U2NyYXRjaEZQUgotICAgIH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdl
bmVyYXRvciwgU2NyYXRjaEZQUlVzYWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRj
aEZQUj4KLSAgICB2b2lkIGVtaXRCaW5hcnlTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93
UGF0aEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQp
OwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOwotICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVt
YmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
LSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
LSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMjsKLSAgICAgICAgaWYgKHNjcmF0
Y2hGUFJVc2FnZSA9PSBOZWVkU2NyYXRjaEZQUikKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPm51
bUZQU2NyYXRjaFJlZ2lzdGVycysrOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9
ICZtX2Z0bFN0YXRlOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8QmluYXJ5QXJpdGhPcEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
SlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmZwU2NyYXRjaCgx
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUlVz
YWdlID09IE5lZWRTY3JhdGNoRlBSID8gcGFyYW1zLmZwU2NyYXRjaCgyKSA6IEludmFsaWRGUFJS
ZWcpOwotCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLT5kaWRFbWl0RmFzdFBhdGgoKSkgewot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVs
KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgp
LmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdw
cigpLCBwYXJhbXNbMV0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0u
Z3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5Qml0T3BHZW5lcmF0b3I+Ci0gICAgdm9pZCBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0KEpfSklU
T3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IG1fbm9kZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhj
ZXB0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTY4NgotICAgICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1
ZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9k
ZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBl
dE9wZXJhbmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVz
dWx0VHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kU29tZVJlZ2lzdGVyKGxlZnQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIocmlnaHQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IEJveDxCaW5hcnlCaXRPcEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7Ci0KLSAgICAgICAg
ICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgICAg
IHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCku
bGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUs
ICZqaXQpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgdm9pZCBlbWl0UmlnaHRT
aGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNoaWZ0VHlwZSkK
LSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogTWFrZSB0aGlzIGRvIGV4Y2VwdGlvbnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE2ODYKLSAgICAgICAgICAgIAotICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3Vs
dFR5cGUoKSk7Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3VsdFR5cGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7
Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHJpZ2h0KTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgUmVmUHRy
PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAg
ICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0gICAgICAgIHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Ci0gICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFy
YW1zKS0+anVtcHMoaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
YXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUmlnaHRTaGlmdEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3Mo
cGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1z
WzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwgSW52YWxpZEZQ
UlJlZywgc2hpZnRUeXBlKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVG
YXN0UGF0aChqaXQpOwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5s
aW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGpp
dC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnNsb3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbiA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hpZnRUeXBlID09IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6
OlNpZ25lZFNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25WYWx1
ZUJpdFJTaGlmdCA6IG9wZXJhdGlvblZhbHVlQml0VVJTaGlmdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
c2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxs
KExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgib2JqZWN0IGFsbG9j
YXRpb24gc3VjY2VzcyIpKTsKLSAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAg
TFZhbHVlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMo
KSkgewotICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuaW50UHRyWmVybzsKLSAgICAgICAgICAg
IGNvbmRpdGlvbiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgYWxsb2NhdG9y
LCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwotICAgICAgICAgICAgY29u
ZGl0aW9uID0gbV9vdXQubm90TnVsbChyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChjb25kaXRpb24sIHVzdWFsbHkoc3VjY2VzcyksIHJhcmVseShzbG93UGF0aCkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3VjY2Vzcyk7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5zdG9yZVB0cigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBt
X2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAotICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hl
YXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwotCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0
LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBtX291dC5jb25z
dEludDMyKHN0cnVjdHVyZS0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAotICAgICAgICAg
ICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOwotICAgICAgICBzdG9yZVN0cnVjdHVyZShy
ZXN1bHQsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGFsbG9jYXRlT2JqZWN0KAotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3Ry
dWN0dXJlLCBzbG93UGF0aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgcmVz
dWx0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLSAgICBMVmFs
dWUgYWxsb2NhdGVPYmplY3QoCi0gICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oc2l6ZSk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZU9i
amVjdChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+
Ci0gICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUg
YnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
bGxvY2F0ZU9iamVjdDxDbGFzc1R5cGU+KAotICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0
aW9uU2l6ZSgwKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKLSAgICB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3QoCi0gICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNw
YWNlOjpwcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6
OmltcHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJr
ZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotCi0gICAg
ICAgIExWYWx1ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3Bh
Y2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNtYWxsQ2FzZUJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3Qgc21hbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFy
Z2VPck92ZXJzaXplQ2FzZUJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3QgbGFyZ2Ugb3Igb3ZlcnNpemUgY2FzZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRl
VmFyaWFibGVTaXplZE9iamVjdCBsYXJnZSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXpl
ZE9iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdXByb3Vu
ZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpw
cmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1
cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0b2Zm
KSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc1NtYWxsLCB1bnN1cmUoc21hbGxDYXNlQmxvY2sp
LCB1bnN1cmUobGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsQ2FzZUJsb2NrLCBsYXJn
ZU9yT3ZlcnNpemVDYXNlQmxvY2spOwotICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2Vf
cHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0
cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCkpKSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFs
bEFsbG9jYXRvciA9IG1fb3V0LmFuY2hvcihhZGRyZXNzLnZhbHVlKCkpOwotICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhs
YXJnZU9yT3ZlcnNpemVDYXNlQmxvY2ssIGxhcmdlQ2FzZUJsb2NrKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihNYXJrZWRTcGFjZTo6aW1wcmVjaXNlQ3V0b2ZmKSksCi0gICAgICAgICAgICB1c3Vh
bGx5KGxhcmdlQ2FzZUJsb2NrKSwgcmFyZWx5KHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2VCbG9jaywgY29udGludWF0aW9uKTsKLSAgICAgICAg
YWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3Bh
Y2VfU3Vic3BhY2VfaW1wcmVjaXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQz
MihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXApKSkpKTsKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VB
bGxvY2F0b3IpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9j
YXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi4KLSAgICBM
VmFsdWUgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSB2bSgpLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RvcmFnZSBhbGxvY2F0aW9u
IHN1Y2Nlc3MiKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVtYWluaW5nID0gbV9vdXQu
bG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFJlbWFpbmluZykpOwot
ICAgICAgICBMVmFsdWUgbmV3UmVtYWluaW5nID0gbV9vdXQuc3ViKHJlbWFpbmluZywgc2l6ZSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5sZXNz
VGhhbihuZXdSZW1haW5pbmcsIG1fb3V0LmludFB0clplcm8pLAotICAgICAgICAgICAgcmFyZWx5
KHNsb3dQYXRoKSwgdXN1YWxseShzdWNjZXNzKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhzdWNjZXNzKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG5ld1Jl
bWFpbmluZywgbV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRSZW1haW5pbmcpKTsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LnN1YigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9v
dXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmlu
Zyk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlKExWYWx1ZSBzaXpl
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5zdWIo
YWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoc2l6ZSwgc2xvd1BhdGgpLCBzaXplKTsKLSAg
ICB9Ci0gICAgCi0gICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJl
KQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdp
dGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgp
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RydWN0IEFycmF5VmFsdWVzIHsKLSAgICAgICAgQXJyYXlWYWx1ZXMoKQotICAgICAgICAg
ICAgOiBhcnJheSgwKQotICAgICAgICAgICAgLCBidXR0ZXJmbHkoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBBcnJheVZhbHVlcyhMVmFsdWUgYXJyYXksIExWYWx1
ZSBidXR0ZXJmbHkpCi0gICAgICAgICAgICA6IGFycmF5KGFycmF5KQotICAgICAgICAgICAgLCBi
dXR0ZXJmbHkoYnV0dGVyZmx5KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBhcnJheTsKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKLSAgICB9OwotICAg
IEFycmF5VmFsdWVzIGFsbG9jYXRlSlNBcnJheSgKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KQotICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChC
QVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBl
bmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVv
ZihJbmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAgICAgICAgICAgIGVuZE9mU3Rv
cmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKSk7
Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJh
eT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwg
YnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICBtX291
dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hl
YXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVj
dCwgYnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgCi0gICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0Fy
cmF5KFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICB7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0Fy
cmF5IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBBcnJh
eVZhbHVlcyBmYXN0VmFsdWVzID0gYWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVu
dHMsIHNsb3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEFycmF5ID0gbV9vdXQu
YW5jaG9yKGZhc3RWYWx1ZXMuYXJyYXkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RWYWx1ZXMuYnV0dGVyZmx5KTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIExWYWx1ZSBzbG93
QXJyYXlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9v
dXQuYW5jaG9yKHNsb3dBcnJheVZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1
dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd0Fy
cmF5VmFsdWUsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0KLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gQXJyYXlWYWx1
ZXMoCi0gICAgICAgICAgICBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QXJyYXksIHNsb3dB
cnJheSksCi0gICAgICAgICAgICBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5
LCBzbG93QnV0dGVyZmx5KSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBib29saWZ5KEVkZ2Ug
ZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAg
Y2FzZSBCb29sZWFuVXNlOgotICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKLSAgICAgICAg
ICAgIHJldHVybiBsb3dCb29sZWFuKGVkZ2UpOwotICAgICAgICBjYXNlIEludDMyVXNlOgotICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm8zMihsb3dJbnQzMihlZGdlKSk7Ci0gICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZU5vdEVx
dWFsQW5kT3JkZXJlZChsb3dEb3VibGUoZWRnZSksIG1fb3V0LmRvdWJsZVplcm8pOwotICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubG9naWNh
bE5vdCgKLSAgICAgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKLSAgICAgICAgICAg
ICAgICAgICAgZWRnZSwgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0LCBTcGVjdWxhdGVOdWxsT3JV
bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgICAgIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikp
OwotICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ1Zh
bHVlID0gbG93U3RyaW5nKGVkZ2UpOwotICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0
LmxvYWQzMk5vbk5lZ2F0aXZlKHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291dC5pbnQzMlpl
cm8pOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICAvLyBpZiAodmFsdWUgaXMgY2VsbCkgewotICAgICAgICAgICAgLy8gICAgIGlm
ICh2YWx1ZSBpcyBzdHJpbmcpCi0gICAgICAgICAgICAvLyAgICAgICAgIHJlc3VsdCA9ICEhdmFs
dWUtPmxlbmd0aAotICAgICAgICAgICAgLy8gICAgIGVsc2UgewotICAgICAgICAgICAgLy8gICAg
ICAgICBkbyBldmlsIHRoaW5ncyBmb3IgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkCi0gICAgICAg
ICAgICAvLyAgICAgICAgIHJlc3VsdCA9IHRydWUKLSAgICAgICAgICAgIC8vICAgICB9Ci0gICAg
ICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIGludDMyKSB7Ci0gICAgICAgICAgICAvLyAg
ICAgcmVzdWx0ID0gISF1bmJveEludDMyKHZhbHVlKQotICAgICAgICAgICAgLy8gfSBlbHNlIGlm
ICh2YWx1ZSBpcyBudW1iZXIpIHsKLSAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94
RG91YmxlKHZhbHVlKQotICAgICAgICAgICAgLy8gfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICAg
ICByZXN1bHQgPSB2YWx1ZSA9PSBqc1RydWUKLSAgICAgICAgICAgIC8vIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBzdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgc3Ry
aW5nIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmdDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90IHN0cmluZyBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaW50MzJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQg
aW50MzIgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEludDMyQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBpbnQzMiBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQm9vbGlmeSB1bnR5cGVkIGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbm90RG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVk
IG5vdCBkb3VibGUgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1
bHRzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oY2VsbENhc2UsIHN0cmluZ0Nhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKG5v
dFN0cmluZ0Nhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c3RyaW5nQ2FzZSwgbm90U3RyaW5nQ2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgbm9uRW1wdHlT
dHJpbmcgPSBtX291dC5ub3RaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7Ci0gICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iobm9uRW1wdHlTdHJpbmcpKTsKLSAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90U3RyaW5nQ2FzZSwgbm90Q2VsbENhc2UpOwotICAgICAgICAgICAgTFZh
bHVlIGlzVHJ1dGh5T2JqZWN0OwotICAgICAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgaXNUcnV0aHlPYmpl
Y3QgPSBtX291dC5ib29sZWFuVHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG1hc3F1ZXJhZGVzQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIG1hc3F1ZXJhZGVzIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5U
cnVlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUlu
Zm9GbGFncyksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51
YXRpb24pLCByYXJlbHkobWFzcXVlcmFkZXNDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFzcXVlcmFkZXNDYXNlKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpc1RydXRoeU9iamVjdCA9IG1fb3V0Lm5vdEVxdWFsKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5sb2FkUHRyKGxvYWRTdHJ1Y3R1cmUodmFsdWUpLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxP
YmplY3QpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihpc1RydXRoeU9iamVjdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxs
Q2FzZSwgaW50MzJDYXNlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICBpc0ludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKLSAgICAg
ICAgICAgICAgICB1bnN1cmUoaW50MzJDYXNlKSwgdW5zdXJlKG5vdEludDMyQ2FzZSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbnQzMkNhc2UsIG5vdEludDMy
Q2FzZSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90
WmVybzMyKHVuYm94SW50MzIodmFsdWUpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJ
bnQzMkNhc2UsIGRvdWJsZUNhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoZG91YmxlQ2FzZSksIHVuc3VyZShub3REb3VibGVDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2Us
IG5vdERvdWJsZUNhc2UpOwotICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUlzVHJ1dGh5ID0gbV9v
dXQuZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKAotICAgICAgICAgICAgICAgIHVuYm94RG91Ymxl
KHZhbHVlKSwgbV9vdXQuY29uc3REb3VibGUoMCkpOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQobV9vdXQuYW5jaG9yKGRvdWJsZUlzVHJ1dGh5KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vdERvdWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgbWlzY0lz
VHJ1dGh5ID0gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKTsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtaXNjSXNUcnV0aHkpKTsKLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmJvb2xlYW4sIHJlc3VsdHMpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBl
bnVtIFN0cmluZ09yT2JqZWN0TW9kZSB7Ci0gICAgICAgIEFsbENlbGxzQXJlRmFsc2UsCi0gICAg
ICAgIENlbGxDYXNlU3BlY3VsYXRlc09iamVjdAotICAgIH07Ci0gICAgZW51bSBFcXVhbE51bGxP
clVuZGVmaW5lZE1vZGUgewotICAgICAgICBFcXVhbE51bGwsCi0gICAgICAgIEVxdWFsVW5kZWZp
bmVkLAotICAgICAgICBFcXVhbE51bGxPclVuZGVmaW5lZCwKLSAgICAgICAgU3BlY3VsYXRlTnVs
bE9yVW5kZWZpbmVkCi0gICAgfTsKLSAgICBMVmFsdWUgZXF1YWxOdWxsT3JVbmRlZmluZWQoCi0g
ICAgICAgIEVkZ2UgZWRnZSwgU3RyaW5nT3JPYmplY3RNb2RlIGNlbGxNb2RlLCBFcXVhbE51bGxP
clVuZGVmaW5lZE1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBvcGVyYW5kTW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0g
ICAgICAgIGJvb2wgdmFsaWRXYXRjaHBvaW50ID0gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgb3BlcmFuZE1vZGUpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVk
IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQgcHJpbWl0aXZlIGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiRXF1YWxOdWxsT3JVbmRlZmluZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3Vy
ZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmltaXRpdmVD
YXNlKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoY2VsbE1vZGUpIHsKLSAgICAgICAgY2FzZSBB
bGxDZWxsc0FyZUZhbHNlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbENh
c2VTcGVjdWxhdGVzT2JqZWN0OgotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBpc05vdE9iamVjdCh2YWx1ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICh2YWxpZFdhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKLSAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG1hc3F1ZXJhZGVzQ2FzZSA9Ci0gICAgICAgICAgICAgICAgRlRMX05F
V19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBtYXNxdWVyYWRlcyBjYXNlIikp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5
cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkobWFzcXVlcmFkZXND
YXNlKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obWFzcXVlcmFkZXNDYXNlLCBwcmltaXRpdmVDYXNlKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hl
YXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVl
IHByaW1pdGl2ZVJlc3VsdDsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVNb2RlKSB7Ci0gICAg
ICAgIGNhc2UgRXF1YWxOdWxsOgotICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQu
ZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFcXVhbFVuZGVmaW5lZDoKLSAgICAgICAgICAgIHByaW1pdGl2
ZVJlc3VsdCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZp
bmVkKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFcXVhbE51bGxPclVuZGVm
aW5lZDoKLSAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IGlzT3RoZXIodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRl
TnVsbE9yVW5kZWZpbmVkOgotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAg
ICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKLSAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmJv
b2xlYW5UcnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKHByaW1pdGl2ZVJlc3VsdCkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5waGko
bV9vdXQuYm9vbGVhbiwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZT4KLSAgICB2b2lkIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRz
KAotICAgICAgICBGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbiwgTFZhbHVlIGJhc2UsIExW
YWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIExWYWx1ZSB2YWx1ZSwKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGlzTm90SW5Cb3VuZHMg
PSBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7Ci0gICAg
ICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIG5vdEluQm91bmRzQ2FzZSA9Ci0gICAgICAgICAgICAgICAgRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCBub3QgaW4gYm91bmRzIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgcGVyZm9ybVN0b3JlID0KLSAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlB1dEJ5VmFsIHBlcmZvcm0gc3RvcmUiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbkJvdW5kcywgdW5zdXJlKG5vdEluQm91bmRzQ2Fz
ZSksIHVuc3VyZShwZXJmb3JtU3RvcmUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90SW5Cb3VuZHNDYXNlLCBw
ZXJmb3JtU3RvcmUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGlzT3V0
T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgaW5kZXgsIG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgMCwgaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kc0Nhc2UgPQotICAgICAgICAg
ICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG91dCBvZiBib3VuZHMi
KSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaG9sZUNhc2UgPQotICAgICAgICAgICAg
ICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGhvbGUgY2FzZSIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT3V0T2ZC
b3VuZHMsIHJhcmVseShvdXRPZkJvdW5kc0Nhc2UpLCB1c3VhbGx5KGhvbGVDYXNlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kc0Nhc2UsIGhvbGVDYXNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyho
b2xlQ2FzZSwgaW5uZXJMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQuYWRkKGluZGV4
LCBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9oZWFwcy5CdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAocGVyZm9ybVN0b3JlKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBlcmZvcm1T
dG9yZSwgbGFzdE5leHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgYnVpbGRT
d2l0Y2goU3dpdGNoRGF0YSogZGF0YSwgTFR5cGUgdHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gbV9vdXQuaW50UHRyIHx8IHR5cGUgPT0gbV9v
dXQuaW50MzIpOwotCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBTd2l0Y2hDYXNlIG5ld0Nhc2U7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IG1f
b3V0LmludFB0cikgewotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0
LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEt
PmtpbmQpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFy
Z2V0LmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlID09IG1fb3V0LmludDMyKSB7Ci0gICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihkYXRhLT5jYXNlc1tpXS52YWx1
ZS5zd2l0Y2hMb29rdXBWYWx1ZShkYXRhLT5raW5kKSksCi0gICAgICAgICAgICAgICAgICAgIGxv
d0Jsb2NrKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tp
XS50YXJnZXQuY291bnQpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIENS
QVNIKCk7Ci0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZChuZXdDYXNlKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCi0gICAgICAgICAgICBz
d2l0Y2hWYWx1ZSwgY2FzZXMsCi0gICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayksIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5jb3VudCkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHN3aXRjaFN0cmluZyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQot
ICAgIHsKLSAgICAgICAgYm9vbCBjYW5Eb0JpbmFyeVN3aXRjaCA9IHRydWU7Ci0gICAgICAgIHVu
c2lnbmVkIHRvdGFsTGVuZ3RoID0gMDsKLSAgICAgICAgCi0gICAgICAgIGZvciAoREZHOjpTd2l0
Y2hDYXNlIG15Q2FzZSA6IGRhdGEtPmNhc2VzKSB7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmcgPSBteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpOwotICAgICAgICAgICAgaWYgKCFzdHJp
bmctPmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FuRG9CaW5hcnlTd2l0Y2ggPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChzdHJpbmctPmxlbmd0aCgpID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENh
c2VMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGNhbkRvQmluYXJ5U3dpdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b3Rh
bExlbmd0aCArPSBzdHJpbmctPmxlbmd0aCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11
bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaFN0
cmluZ1Nsb3coZGF0YSwgc3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmlu
ZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291
dC5sb2FkMzIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBoYXNJbXBsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3
aXRjaC9Td2l0Y2hTdHJpbmcgaGFzIGltcGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
aXM4Qml0QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcg
aXMgOCBiaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Jsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIHNsb3cgY2FzZSIpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwoc3RyaW5nSW1wbCksIHVuc3Vy
ZShzbG93QmxvY2spLCB1bnN1cmUoaGFzSW1wbEJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0ltcGxCbG9jaywgaXM4Qml0
QmxvY2spOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9v
dXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJbXBs
LCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAgICAgICAgdW5z
dXJlKHNsb3dCbG9jayksIHVuc3VyZShpczhCaXRCbG9jaykpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXM4Qml0QmxvY2ssIHNsb3dCbG9jayk7Ci0gICAgICAgIAotICAgICAg
ICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmlu
Z0ltcGxfZGF0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3Bh
Z2F0ZSBicmFuY2ggd2VpZ2h0IGRhdGEgdG8gdGhlIGNhc2VzIG9mIHRoaXMgc3dpdGNoLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY4Ci0g
ICAgICAgIAotICAgICAgICBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAg
IGZvciAoREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA6IGRhdGEtPmNhc2VzKQotICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKFN0cmluZ1N3aXRjaENhc2UobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSwg
bG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jaykpKTsKLSAgICAgICAgc3RkOjpzb3J0KGNhc2Vz
LmJlZ2luKCksIGNhc2VzLmVuZCgpKTsKLSAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZShkYXRh
LCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgMCwgZmFsc2UpOwot
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dCbG9jaywgbGFzdE5leHQpOwotICAgICAgICBz
d2l0Y2hTdHJpbmdTbG93KGRhdGEsIHN0cmluZyk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBj
b2RlIGZvciBzdHJpbmcgc3dpdGNoaW5nIGlzIGJhc2VkIGNsb3NlbHkgb24gdGhlIHNhbWUgY29k
ZSBpbiB0aGUgREZHIGJhY2tlbmQuIFdoaWxlIGl0Ci0gICAgLy8gd291bGQgYmUgbmljZSB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiBzaW1pbGFyLWxvb2tpbmcgY29kZSwgaXQgc2VlbXMgbGlrZSB0
aGlzIGlzIG9uZSBvZgotICAgIC8vIHRob3NlIGFsZ29yaXRobXMgd2hlcmUgZmFjdG9yaW5nIG91
dCB0aGUgY29tbW9uIGJpdHMgd291bGQgcmVzdWx0IGluIG1vcmUgY29kZSB0aGFuIGp1c3QKLSAg
ICAvLyBkdXBsaWNhdGluZy4KLSAgICAKLSAgICBzdHJ1Y3QgU3RyaW5nU3dpdGNoQ2FzZSB7Ci0g
ICAgICAgIFN0cmluZ1N3aXRjaENhc2UoKSB7IH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZ1N3
aXRjaENhc2UoU3RyaW5nSW1wbCogc3RyaW5nLCBMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgICAg
ICAgICA6IHN0cmluZyhzdHJpbmcpCi0gICAgICAgICAgICAsIHRhcmdldCh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZ1N3
aXRjaENhc2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3Ry
aW5nTGVzc1RoYW4oKnN0cmluZywgKm90aGVyLnN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgTEJhc2ljQmxvY2sgdGFyZ2V0
OwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IENoYXJhY3RlckNhc2UgewotICAgICAgICBDaGFy
YWN0ZXJDYXNlKCkKLSAgICAgICAgICAgIDogY2hhcmFjdGVyKDApCi0gICAgICAgICAgICAsIGJl
Z2luKDApCi0gICAgICAgICAgICAsIGVuZCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIENoYXJhY3RlckNhc2UoTENoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICAgICAgOiBjaGFyYWN0ZXIoY2hhcmFjdGVyKQotICAg
ICAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAgICAgICAgICwgZW5kKGVuZCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBDaGFy
YWN0ZXJDYXNlJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNo
YXJhY3RlciA8IG90aGVyLmNoYXJhY3RlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
TENoYXIgY2hhcmFjdGVyOwotICAgICAgICB1bnNpZ25lZCBiZWdpbjsKLSAgICAgICAgdW5zaWdu
ZWQgZW5kOwotICAgIH07Ci0gICAgCi0gICAgdm9pZCBzd2l0Y2hTdHJpbmdSZWN1cnNlKAotICAg
ICAgICBTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgYnVmZmVyLCBMVmFsdWUgbGVuZ3RoLCBjb25z
dCBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4mIGNhc2VzLAotICAgICAgICB1bnNpZ25lZCBudW1D
aGVja2VkLCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCB1bnNpZ25lZCBhbHJlYWR5Q2hl
Y2tlZExlbmd0aCwKLSAgICAgICAgdW5zaWduZWQgY2hlY2tlZEV4YWN0TGVuZ3RoKQotICAgIHsK
LSAgICAgICAgTEJhc2ljQmxvY2sgZmFsbFRocm91Z2ggPSBsb3dCbG9jayhkYXRhLT5mYWxsVGhy
b3VnaC5ibG9jayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7Ci0gICAg
ICAgICAgICBtX291dC5qdW1wKGZhbGxUaHJvdWdoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbWluTGVuZ3RoID0gY2FzZXNbYmVn
aW5dLnN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbW1vbkNoYXJzID0gbWlu
TGVuZ3RoOwotICAgICAgICBib29sIGFsbExlbmd0aHNFcXVhbCA9IHRydWU7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBteUNvbW1vbkNoYXJzID0gbnVtQ2hlY2tlZDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxpbWl0ID0gc3RkOjptaW4oY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCksIGNhc2VzW2ld
LnN0cmluZy0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbnVtQ2hl
Y2tlZDsgaiA8IGxpbWl0OyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FzZXNbYmVnaW5d
LnN0cmluZy0+YXQoaikgIT0gY2FzZXNbaV0uc3RyaW5nLT5hdChqKSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbXlDb21tb25DaGFycysrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY29tbW9uQ2hhcnMgPSBzdGQ6Om1pbihjb21tb25DaGFycywgbXlD
b21tb25DaGFycyk7Ci0gICAgICAgICAgICBpZiAobWluTGVuZ3RoICE9IGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYWxsTGVuZ3Roc0VxdWFsID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtaW5MZW5ndGggPSBzdGQ6Om1pbihtaW5MZW5ndGgsIGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hlY2tlZEV4
YWN0TGVuZ3RoKSB7Ci0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxy
ZWFkeUNoZWNrZWRMZW5ndGggPT0gbWluTGVuZ3RoKTsKLSAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCBhbGxMZW5ndGhzRXF1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbWluTGVuZ3RoID49IGNvbW1vbkNo
YXJzKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYWxsTGVuZ3Roc0VxdWFsICYmIGFscmVhZHlD
aGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoKQotICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQu
YmVsb3cobGVuZ3RoLCBtX291dC5jb25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRo
cm91Z2gpKTsKLSAgICAgICAgaWYgKGFsbExlbmd0aHNFcXVhbCAmJiAoYWxyZWFkeUNoZWNrZWRM
ZW5ndGggPCBtaW5MZW5ndGggfHwgIWNoZWNrZWRFeGFjdExlbmd0aCkpCi0gICAgICAgICAgICBt
X291dC5jaGVjayhtX291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVu
Z3RoKSksIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtQ2hlY2tlZDsgaSA8IGNvbW1vbkNoYXJzOyArK2kpIHsKLSAgICAgICAgICAg
IG1fb3V0LmNoZWNrKAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVy
czhbaV0pLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0
PHVpbnQxNl90PihjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChpKSkpKSwKLSAgICAgICAgICAgICAg
ICB1bnN1cmUoZmFsbFRocm91Z2gpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1pbkxlbmd0aCA9PSBjb21tb25DaGFycykgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
Y2FzZSB3aGVyZSBvbmUgb2YgdGhlIGNhc2VzIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgb3Ro
ZXIgY2FzZXMuCi0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUg
aW5wdXQgc3RyaW5nIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgY2FzZXMsCi0gICAgICAgICAg
ICAvLyBzbyB3ZSBqdXN0IGNoZWNrIGxlbmd0aCB0byBqdW1wIHRvIHRoYXQgY2FzZS4KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2Jl
Z2luXS5zdHJpbmctPmxlbmd0aCgpID09IGNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKQotICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpID4gY29t
bW9uQ2hhcnMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFs
KSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA9PSBi
ZWdpbiArIDEpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2FzZXNbYmVnaW5dLnRhcmdl
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5jaGVjaygKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoY29tbW9uQ2hhcnMpKSwKLSAgICAgICAgICAgICAgICB1
bnN1cmUoY2FzZXNbYmVnaW5dLnRhcmdldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBXZSd2ZSBjaGVja2VkIGlmIHRoZSBsZW5ndGggaXMgPj0gbWluTGVuZ3RoLCBhbmQgdGhlbiB3
ZSBjaGVja2VkIGlmIHRoZSBsZW5ndGggaXMKLSAgICAgICAgICAgIC8vID09IGNvbW1vbkNoYXJz
LiBXZSBnZXQgdG8gdGhpcyBwb2ludCBpZiBpdCBpcyA+PSBtaW5MZW5ndGggYnV0IG5vdCA9PSBj
b21tb25DaGFycy4KLSAgICAgICAgICAgIC8vIEhlbmNlIHdlIGtub3cgdGhhdCBpdCBub3cgbXVz
dCBiZSA+IG1pbkxlbmd0aCwgaS5lLiB0aGF0IGl0J3MgPj0gbWluTGVuZ3RoICsgMS4KLSAgICAg
ICAgICAgIHN3aXRjaFN0cmluZ1JlY3Vyc2UoCi0gICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVy
LCBsZW5ndGgsIGNhc2VzLCBjb21tb25DaGFycywgYmVnaW4gKyAxLCBlbmQsIG1pbkxlbmd0aCAr
IDEsIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlIHN0cmluZyBpcyBsb25nZXIg
dGhhbiBjb21tb25DaGFycywgYW5kIHdlJ3ZlIG9ubHkgdmVyaWZpZWQKLSAgICAgICAgLy8gY29t
bW9uQ2hhcnMuIFVzZSBhIGJpbmFyeSBzd2l0Y2ggb24gdGhlIG5leHQgdW5jaGVja2VkIGNoYXJh
Y3RlciwgaS5lLgotICAgICAgICAvLyBzdHJpbmdbY29tbW9uQ2hhcnNdLgotICAgICAgICAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA+PSBiZWdpbiArIDIpOwotICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHVuY2hlY2tlZENoYXIgPSBtX291dC5sb2FkOFplcm9FeHQz
MihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVyczhbY29tbW9uQ2hhcnNdKTsKLSAgICAgICAgCi0g
ICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJDYXNlPiBjaGFyYWN0ZXJDYXNlczsKLSAgICAgICAgQ2hh
cmFjdGVyQ2FzZSBjdXJyZW50Q2FzZShjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChjb21tb25DaGFy
cyksIGJlZ2luLCBiZWdpbiArIDEpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiAr
IDE7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAgTENoYXIgY3VycmVudENoYXIgPSBjYXNl
c1tpXS5zdHJpbmctPmF0KGNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hh
ciAhPSBjdXJyZW50Q2FzZS5jaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2Fz
ZS5lbmQgPSBpOwotICAgICAgICAgICAgICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50
Q2FzZSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudENhc2UgPSBDaGFyYWN0ZXJDYXNlKGN1cnJl
bnRDaGFyLCBpLCBpICsgMSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBj
dXJyZW50Q2FzZS5lbmQgPSBpICsgMTsKLSAgICAgICAgfQotICAgICAgICBjaGFyYWN0ZXJDYXNl
cy5hcHBlbmQoY3VycmVudENhc2UpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Js
b2NrPiBjaGFyYWN0ZXJCbG9ja3M7Ci0gICAgICAgIGZvciAoQ2hhcmFjdGVyQ2FzZSYgbXlDYXNl
IDogY2hhcmFjdGVyQ2FzZXMpCi0gICAgICAgICAgICBjaGFyYWN0ZXJCbG9ja3MuYXBwZW5kKEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBjYXNlIGZvciAiLCBteUNh
c2UuY2hhcmFjdGVyLCAiIGF0IGluZGV4ICIsIGNvbW1vbkNoYXJzKSkpOwotICAgICAgICAKLSAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IHN3aXRjaENhc2VzOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2hhcmFjdGVyQ2FzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpKQotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjaGFy
YWN0ZXJDYXNlc1tpIC0gMV0uY2hhcmFjdGVyIDwgY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVy
KTsKLSAgICAgICAgICAgIHN3aXRjaENhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKSwgY2hh
cmFjdGVyQmxvY2tzW2ldLCBXZWlnaHQoKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN3
aXRjaEluc3RydWN0aW9uKHVuY2hlY2tlZENoYXIsIHN3aXRjaENhc2VzLCBmYWxsVGhyb3VnaCwg
V2VpZ2h0KCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5tX25leHRCbG9jazsKLSAgICAgICAgY2hhcmFjdGVyQmxvY2tzLmFwcGVuZChsYXN0TmV4dCk7
IC8vIE1ha2VzIGl0IGNvbnZlbmllbnQgdG8gc2V0IG5leHRCbG9jay4KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlckNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGFyYWN0ZXJCbG9ja3NbaV0sIGNoYXJhY3RlckJsb2Nrc1tp
ICsgMV0pOwotICAgICAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZSgKLSAgICAgICAgICAgICAg
ICBkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIGNvbW1vbkNoYXJzICsgMSwKLSAgICAgICAg
ICAgICAgICBjaGFyYWN0ZXJDYXNlc1tpXS5iZWdpbiwgY2hhcmFjdGVyQ2FzZXNbaV0uZW5kLCBt
aW5MZW5ndGgsIGFsbExlbmd0aHNFcXVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX291dC5tX25leHRCbG9jayA9PSBsYXN0TmV4
dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3dpdGNoU3RyaW5nU2xvdyhTd2l0Y2hEYXRhKiBk
YXRhLCBMVmFsdWUgc3RyaW5nKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG91Z2h0IHRv
IGJlIGFibGUgdG8gdXNlIGNvbXB1dGVkIGdvdG9zIGhlcmUuIFdlIHdvdWxkIHNhdmUgdGhlIGxh
YmVscyBvZiB0aGUKLSAgICAgICAgLy8gYmxvY2tzIHdlIHdhbnQgdG8ganVtcCB0bywgYW5kIHRo
ZW4gcmVxdWVzdCB0aGVpciBhZGRyZXNzZXMgYWZ0ZXIgY29tcGlsYXRpb24gY29tcGxldGVzLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY5
Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgYnJhbmNoT2Zmc2V0ID0gdm1DYWxsKAotICAgICAg
ICAgICAgbV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdB
bmRHZXRCcmFuY2hPZmZzZXQpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0
SW50UHRyKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwotICAgICAgICAKLSAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8
U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxpbnQzMl90PiBh
bHJlYWR5SGFuZGxlZDsgLy8gVGhlc2UgbWF5IGJlIG5lZ2F0aXZlLCBvciB6ZXJvLCBvciBwcm9i
YWJseSBvdGhlciBzdHVmZiwgdG9vLiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBIYXNoU2V0
J3MgY29ybmVyIGNhc2VzIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aHJvdWdocHV0
IGhlcmUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmYWN0IHRoYXQgd2UncmUgdXNp
bmcgdGhlIGJ5dGVjb2RlJ3Mgc3dpdGNoIHRhYmxlIG1lYW5zIHRoYXQgdGhlCi0gICAgICAgICAg
ICAvLyBmb2xsb3dpbmcgREZHIElSIHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIGludmFsaWQuCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gT3JpZ2luYWwgY29kZToKLSAgICAgICAgICAg
IC8vICAgICBzd2l0Y2ggKHYpIHsKLSAgICAgICAgICAgIC8vICAgICBjYXNlICJmb28iOgotICAg
ICAgICAgICAgLy8gICAgIGNhc2UgImJhciI6Ci0gICAgICAgICAgICAvLyAgICAgICAgIHRoaW5n
cygpOwotICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAg
ICB9Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTmV3IGNvZGU6Ci0gICAgICAgICAg
ICAvLyAgICAgc3dpdGNoICh2KSB7Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiZm9vIjoKLSAg
ICAgICAgICAgIC8vICAgICAgICAgaW5zdHJ1bWVudEZvbygpOwotICAgICAgICAgICAgLy8gICAg
ICAgICBnb3RvIF90aGluZ3M7Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKLSAgICAg
ICAgICAgIC8vICAgICAgICAgaW5zdHJ1bWVudEJhcigpOwotICAgICAgICAgICAgLy8gICAgIF90
aGluZ3M6Ci0gICAgICAgICAgICAvLyAgICAgICAgIHRoaW5ncygpOwotICAgICAgICAgICAgLy8g
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Ly8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICB9Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gTHVja2lseSwgd2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueSBzdWNoIHRy
YW5zZm9ybWF0aW9uLiBCdXQgaXQncyBraW5kIG9mIHNpbGx5IHRoYXQKLSAgICAgICAgICAgIC8v
IHRoaXMgaXMgYW4gaXNzdWUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjM1Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGRzo6
U3dpdGNoQ2FzZSBteUNhc2UgPSBkYXRhLT5jYXNlc1tpXTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICAg
ICAgIHRhYmxlLm9mZnNldFRhYmxlLmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7Ci0g
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXRlciAhPSB0YWJsZS5vZmZz
ZXRUYWJsZS5lbmQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYWxyZWFkeUhh
bmRsZWQuaW5zZXJ0KGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCkuc2Vjb25kKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgK
LSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNl
dCksCi0gICAgICAgICAgICAgICAgbG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jayksIFdlaWdo
dChteUNhc2UudGFyZ2V0LmNvdW50KSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBt
X291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIGJyYW5jaE9mZnNldCwgY2FzZXMs
IGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKLSAgICAgICAgICAgIFdlaWdodChk
YXRhLT5mYWxsVGhyb3VnaC5jb3VudCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBDYWxscyB0aGUg
ZnVuY3RvciBhdCB0aGUgcG9pbnQgb2YgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIGtub3cgd2hh
dCB0aGUgcmVzdWx0IHR5cGUgaXMuCi0gICAgLy8gWW91IGNhbiBlbWl0IHdoYXRldmVyIGNvZGUg
eW91IGxpa2UgYXQgdGhhdCBwb2ludC4gRXhwZWN0cyB5b3UgdG8gdGVybWluYXRlIHRoZSBiYXNp
YyBibG9jay4KLSAgICAvLyBXaGVuIGJ1aWxkVHlwZU9mKCkgcmV0dXJucywgaXQgd2lsbCBoYXZl
IHRlcm1pbmF0ZWQgYWxsIGJhc2ljIGJsb2NrcyB0aGF0IGl0IGNyZWF0ZWQuIFNvLCBpZgotICAg
IC8vIHlvdSBhcmVuJ3QgdXNpbmcgdGhpcyBhcyB0aGUgdGVybWluYXRvciBvZiBhIGhpZ2gtbGV2
ZWwgYmxvY2ssIHlvdSBzaG91bGQgY3JlYXRlIHlvdXIgb3duCi0gICAgLy8gY29udGluYXRpb24g
YW5kIHNldCBpdCBhcyB0aGUgbmV4dEJsb2NrIChtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
Y29udGludWF0aW9uKSkgYmVmb3JlCi0gICAgLy8gY2FsbGluZyB0aGlzLiBGb3IgZXhhbXBsZToK
LSAgICAvLwotICAgIC8vIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTXkgY29udGludWF0aW9uIikpOwotICAgIC8vIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgLy8gYnVp
bGRUeXBlT2YoCi0gICAgLy8gICAgIGNoaWxkLCB2YWx1ZSwKLSAgICAvLyAgICAgWyZdIChUeXBl
b2ZUeXBlIHR5cGUpIHsKLSAgICAvLyAgICAgICAgICBkbyB0aGluZ3M7Ci0gICAgLy8gICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgIC8vICAgICB9KTsKLSAgICAvLyBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIHZvaWQgYnVpbGRUeXBlT2YoRWRnZSBjaGlsZCwgTFZhbHVlIHZhbHVl
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBi
cmFuY2hpbmcgc3RydWN0dXJlOgotICAgICAgICAvLwotICAgICAgICAvLyBpZiAoaXMgY2VsbCkg
ewotICAgICAgICAvLyAgICAgaWYgKGlzIG9iamVjdCkgewotICAgICAgICAvLyAgICAgICAgIGlm
IChpcyBmdW5jdGlvbikgewotICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247
Ci0gICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwIGFu
ZCBkb2Vzbid0IG1hc3F1ZXJhZGUgYXMgdW5kZWZpbmVkKSB7Ci0gICAgICAgIC8vICAgICAgICAg
ICAgIHJldHVybiBvYmplY3QKLSAgICAgICAgLy8gICAgICAgICB9IGVsc2UgewotICAgICAgICAv
LyAgICAgICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKLSAgICAgICAgLy8gICAgICAgICB9Ci0g
ICAgICAgIC8vICAgICB9IGVsc2UgaWYgKGlzIHN0cmluZykgewotICAgICAgICAvLyAgICAgICAg
IHJldHVybiBzdHJpbmcKLSAgICAgICAgLy8gICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICAgICAg
ICAgcmV0dXJuIHN5bWJvbAotICAgICAgICAvLyAgICAgfQotICAgICAgICAvLyB9IGVsc2UgaWYg
KGlzIG51bWJlcikgewotICAgICAgICAvLyAgICAgcmV0dXJuIG51bWJlcgotICAgICAgICAvLyB9
IGVsc2UgaWYgKGlzIG51bGwpIHsKLSAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKLSAgICAg
ICAgLy8gfSBlbHNlIGlmIChpcyBib29sZWFuKSB7Ci0gICAgICAgIC8vICAgICByZXR1cm4gYm9v
bGVhbgotICAgICAgICAvLyB9IGVsc2UgewotICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5l
ZAotICAgICAgICAvLyB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgY2VsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBvYmplY3QgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZnVuY3Rpb25DYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBmdW5jdGlvbiBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIG5vdCBmdW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBy
ZWFsbHlPYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiByZWFs
bHkgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIHVucmVhY2hhYmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiB1
bnJlYWNoYWJsZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90T2JqZWN0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG9iamVjdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBzdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc3ltYm9sQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc3ltYm9sIGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBudW1iZXJDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBudW1iZXIgY2FzZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbm90TnVtYmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygbm90IG51bWJlciBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bGwgY2FzZSIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImJ1aWxkVHlwZU9mIGJvb2xlYW4gY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdW5k
ZWZpbmVkQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgdW5kZWZpbmVk
IGNhc2UiKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkp
OwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhjZWxsQ2FzZSwgb2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUob2JqZWN0Q2FzZSksIHVuc3VyZShub3RP
YmplY3RDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNl
LCBmdW5jdGlvbkNhc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0Z1
bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPYmplY3QpLAotICAgICAgICAg
ICAgdW5zdXJlKGZ1bmN0aW9uQ2FzZSksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGZ1bmN0aW9uQ2FzZSwgbm90RnVuY3Rpb25DYXNl
KTsKLSAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpGdW5jdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIHJlYWxseU9iamVjdENhc2UpOwot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1
ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikpLAotICAg
ICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShyZWFsbHlPYmplY3RDYXNlKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhyZWFsbHlPYmplY3RDYXNlLCBzbG93UGF0
aCk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6T2JqZWN0KTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUsIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAg
ICAgICAgICB9LCB2YWx1ZSk7Ci0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAzPiBjYXNlczsK
LSAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpVbmRlZmluZWQpKSwgdW5kZWZpbmVkQ2FzZSkpOwot
ICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6Ok9iamVjdCkpLCByZWFsbHlPYmplY3RDYXNlKSk7Ci0g
ICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6RnVuY3Rpb24pKSwgZnVuY3Rpb25DYXNlKSk7Ci0gICAg
ICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKG1fb3V0LmNhc3RUb0ludDMyKHJlc3VsdCksIGNh
c2VzLCB1bnJlYWNoYWJsZSwgV2VpZ2h0KCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8odW5yZWFjaGFibGUsIG5vdE9iamVjdENhc2UpOwotICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90T2JqZWN0Q2FzZSwg
c3RyaW5nQ2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzU3RyaW5n
KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjQ2VsbCAtIFNwZWNPYmplY3QpKSwKLSAg
ICAgICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKHN5bWJvbENhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIHN5bWJvbENhc2UpOwotICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhzeW1ib2xDYXNlLCBub3RDZWxsQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlw
ZW9mVHlwZTo6U3ltYm9sKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBudW1iZXJDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAg
aXNOdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgflNwZWNDZWxsKSwKLSAgICAgICAg
ICAgIHVuc3VyZShudW1iZXJDYXNlKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWJlckNhc2UsIG5vdE51bWJlckNhc2UpOwotICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok51bWJlcik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhub3ROdW1iZXJDYXNlLCBub3ROdWxsQ2FzZSk7Ci0gICAgICAgIExWYWx1ZSBp
c051bGw7Ci0gICAgICAgIGlmIChwcm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPdGhlcikKLSAgICAg
ICAgICAgIGlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVl
TnVsbCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpc051bGwgPSBtX291dC5ib29sZWFu
RmFsc2U7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc051bGwsIHVuc3VyZShyZWFsbHlPYmplY3RD
YXNlKSwgdW5zdXJlKG5vdE51bGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhub3ROdWxsQ2FzZSwgYm9vbGVhbkNhc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBpc0Jvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgfihTcGVjQ2Vs
bCB8IFNwZWNGdWxsTnVtYmVyKSksCi0gICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1
bnN1cmUodW5kZWZpbmVkQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Ym9vbGVhbkNhc2UsIHVuZGVmaW5lZENhc2UpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6
OkJvb2xlYW4pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2Fz
ZSwgbGFzdE5leHQpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSwg
ZG91YmxlIGxvdywgZG91YmxlIGhpZ2gsIGJvb2wgaXNTaWduZWQgPSB0cnVlKQotICAgIHsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgZ3JlYXRFbm91Z2ggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRv
dWJsZVRvSW50MzIgZ3JlYXRFbm91Z2giKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJh
bmdlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIHdpdGhpblJhbmdlIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
ZG91YmxlVG9JbnQzMiBzbG93UGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbChkb3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUobG93KSks
Ci0gICAgICAgICAgICB1bnN1cmUoZ3JlYXRFbm91Z2gpLCB1bnN1cmUoc2xvd1BhdGgpKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZ3Jl
YXRFbm91Z2gsIHdpdGhpblJhbmdlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERv
dWJsZShoaWdoKSksCi0gICAgICAgICAgICB1bnN1cmUod2l0aGluUmFuZ2UpLCB1bnN1cmUoc2xv
d1BhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBz
bG93UGF0aCk7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0OwotICAgICAgICBpZiAoaXNTaWdu
ZWQpCi0gICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFs
dWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91Ymxl
VG9VSW50KGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KGZhc3RSZXN1bHQpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jYWxsKG1fb3V0LmludDMyLCBt
X291dC5vcGVyYXRpb24odG9JbnQzMiksIGRvdWJsZVZhbHVlKSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQz
MiwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1
ZSBkb3VibGVWYWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChPdXRwdXQ6Omhhc1NlbnNpYmxlRG91
YmxlVG9JbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzZW5zaWJsZURvdWJsZVRvSW50MzIoZG91
YmxlVmFsdWUpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGxpbWl0ID0gcG93KDIsIDMxKSAt
IDE7Ci0gICAgICAgIHJldHVybiBkb3VibGVUb0ludDMyKGRvdWJsZVZhbHVlLCAtbGltaXQsIGxp
bWl0KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHNlbnNpYmxlRG91YmxlVG9JbnQzMihMVmFs
dWUgZG91YmxlVmFsdWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgic2Vuc2libGUgZG91YmxlVG9JbnQzMiBzbG93IHBhdGgiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic2Vuc2libGUgZG91YmxlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZh
bHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0
VmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbChm
YXN0UmVzdWx0VmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHg4MDAwMDAwMCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRp
b24odG9JbnQzMiksIGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBj
cmVhdGluZyBhIGNvZGUgZ2VuZXJhdG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUg
dXNpbmcgb3VyCi0gICAgLy8gb3duIE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Ig
c2xvdyBwYXRocyB0aGF0IGludm9sdmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAot
ICAgIC8vIHRvIHBheSB0aGUgcHJpY2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xv
dyBwYXRoIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKLSAgICAvLyBleGVj
dXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGEgbGF6eSBzbG93IHBhdGggYWx3YXlzIGluY3VycyB0
aGUgY29zdCBvZiB0d28gYWRkaXRpb25hbCBqdW1wcy4KLSAgICAvLyBBbHNvLCB0aGUgbGF6eSBz
bG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZl
ciBMTFZNIGRpZCwgc28geW91Ci0gICAgLy8gaGF2ZSB0byB1c2UgYSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgdG8gdHJ5IHRvIHVzZSBzb21lIHVudXNlZCByZWdpc3RlcnMgYW5kIHlvdSBtYXkg
aGF2ZQotICAgIC8vIHRvIHNwaWxsIHRvIHRvcCBvZiBzdGFjayBpZiB0aGVyZSBhcmVuJ3QgZW5v
dWdoIHJlZ2lzdGVycyBhdmFpbGFibGUuCi0gICAgLy8KLSAgICAvLyBMYXp5IHNsb3cgcGF0aHMg
aW52b2x2ZSB0aHJlZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIGV4ZWN1dGlvbi4gRWFjaCBzdGFnZSBo
YXMgdW5pcXVlCi0gICAgLy8gY2FwYWJpbGl0aWVzIGFuZCBrbm93bGVkZ2UuIFRoZSBzdGFnZXMg
YXJlOgotICAgIC8vCi0gICAgLy8gMSkgREZHLT5MTFZNIGxvd2VyaW5nLCBpLmUuIGNvZGUgdGhh
dCBydW5zIGluIHRoaXMgcGhhc2UuIExvd2VyaW5nIGlzIHRoZSBsYXN0IHRpbWUgeW91IHdpbGwK
LSAgICAvLyAgICBoYXZlIGFjY2VzcyB0byBMVmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBMVmFsdWUg
dGhhdCBuZWVkcyB0byBiZSBmZWQgYXMgaW5wdXQgdG8gYSBsYXp5IHNsb3cKLSAgICAvLyAgICBw
YXRoLCB0aGVuIHlvdSBtdXN0IHBhc3MgaXQgYXMgYW4gYXJndW1lbnQgaGVyZSAoYXMgb25lIG9m
IHRoZSB2YXJhcmdzIGFyZ3VtZW50cyBhZnRlciB0aGUKLSAgICAvLyAgICBmdW5jdG9yKS4gQnV0
LCBsb3dlcmluZyBkb2Vzbid0IGtub3cgd2hpY2ggcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3Ig
dGhvc2UgTFZhbHVlcy4gSGVuY2UKLSAgICAvLyAgICB5b3UgcGFzcyBhIGxhbWJkYSB0byBsYXp5
U2xvd1BhdGgoKSBhbmQgdGhhdCBsYW1iZGEgd2lsbCBydW4gZHVyaW5nIHN0YWdlICgyKToKLSAg
ICAvLwotICAgIC8vIDIpIEZUTENvbXBpbGUuY3BwJ3MgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzLiBUaGlzIGNvZGUgaXMgdGhlIG9ubHkgc3RhZ2UgYXQgd2hpY2ggd2Uga25vdwotICAgIC8v
ICAgIHRoZSBtYXBwaW5nIGZyb20gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAo
MSkgYW5kIHRoZSByZWdpc3RlcnMgdGhhdCBMTFZNCi0gICAgLy8gICAgc2VsZWN0ZWQgZm9yIHRo
b3NlIGFyZ3VtZW50cy4gWW91IGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGNv
ZGUgaGVyZSwgc2luY2UgdGhlbgotICAgIC8vICAgIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0
dWFsbHkgYmUgbGF6aWx5IGdlbmVyYXRlZC4gSW5zdGVhZCwgeW91IHdhbnQgdG8gc2F2ZSB0aGUK
LSAgICAvLyAgICByZWdpc3RlcnMgYmVpbmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVm
ZXIgY29kZSBnZW5lcmF0aW9uIHRvIHN0YWdlICgzKSBieSBjcmVhdGluZwotICAgIC8vICAgIGFu
ZCByZXR1cm5pbmcgYSBMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcjoKLSAgICAvLwotICAgIC8vIDMp
IExhenlTbG93UGF0aCdzIGdlbmVyYXRlKCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNw
b25zZSB0byB0aGUgbGF6eSBzbG93IHBhdGgKLSAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBm
aXJzdCB0aW1lLiBJdCB3aWxsIGNhbGwgdGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFn
ZSAoMikuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgZWFjaCB0aW1lIHlvdSBpbnZva2Ugc3Rh
Z2UgKDEpLCBzdGFnZSAoMikgbWF5IGJlIGludm9rZWQgemVybywgb25lLCBvciBtYW55IHRpbWVz
LgotICAgIC8vIFN0YWdlICgyKSB3aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFn
ZSAoMSkuIEJ1dCwgTExWTSBtYXkga2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKLSAgICAvLyBjYXNl
IHN0YWdlICgyKSB3b24ndCBydW4uIExMVk0gbWF5IGR1cGxpY2F0ZSB0aGUgY29kZSAoZm9yIGV4
YW1wbGUgdmlhIGp1bXAgdGhyZWFkaW5nKSwKLSAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMg
dG8geW91ciBzdGFnZSAoMikgbGFtYmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9y
IG9uY2UgZm9yIGVhY2gKLSAgICAvLyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8g
dGltZXMgaWYgdGhlIHNsb3cgcGF0aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUg
Zm9yCi0gICAgLy8gd2hlbmV2ZXIgeW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNt
LgotICAgIC8vCi0gICAgLy8gQSB0eXBpY2FsIHVzZSBvZiBsYXp5U2xvd1BhdGgoKSB3aWxsIGxv
b2sgbGlrZSB0aGUgZXhhbXBsZSBiZWxvdywgd2hpY2gganVzdCBjcmVhdGVzIGEgc2xvdwotICAg
IC8vIHBhdGggdGhhdCBhZGRzIHNvbWUgdmFsdWUgdG8gdGhlIGlucHV0IGFuZCByZXR1cm5zIGl0
LgotICAgIC8vCi0gICAgLy8gLy8gU3RhZ2UgKDEpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0
IGNoYW5jZSB0byBmaWd1cmUgb3V0IHdoaWNoIExWYWx1ZXMgdG8gdXNlIGFzIGlucHV0cy4KLSAg
ICAvLyAvLyBOb3RpY2UgaG93IHdlIHBhc3MgImlucHV0IiBhcyBhbiBhcmd1bWVudCB0byBsYXp5
U2xvd1BhdGgoKS4KLSAgICAvLyBMVmFsdWUgaW5wdXQgPSAuLi47Ci0gICAgLy8gaW50IGFkZGVu
ZCA9IC4uLjsKLSAgICAvLyBMVmFsdWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAotICAgIC8vICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgLy8gICAgICAgICAvLyBTdGFnZSAoMikgaXMgaGVy
ZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcmVnaXN0ZXJz
IGFyZSB1c2VkCi0gICAgLy8gICAgICAgICAvLyBmb3Igd2hpY2ggdmFsdWVzLiBMb2NhdGlvbiB6
ZXJvIGlzIGFsd2F5cyB0aGUgcmV0dXJuIHZhbHVlLiBZb3UgY2FuIGlnbm9yZSBpdCBpZgotICAg
IC8vICAgICAgICAgLy8geW91IGRvbid0IHdhbnQgdG8gcmV0dXJuIGFueXRoaW5nLiBMb2NhdGlv
biAxIGlzIHRoZSByZWdpc3RlciBmb3IgdGhlIGZpcnN0Ci0gICAgLy8gICAgICAgICAvLyBhcmd1
bWVudCB0byB0aGUgbGF6eVNsb3dQYXRoKCksIGkuZS4gImlucHV0Ii4gTm90ZSB0aGF0IHRoZSBM
b2NhdGlvbiBvYmplY3QgY291bGQKLSAgICAvLyAgICAgICAgIC8vIGFsc28gaG9sZCBhbiBGUFIs
IGlmIHlvdSBhcmUgcGFzc2luZyBhIGRvdWJsZS4KLSAgICAvLyAgICAgICAgIEdQUlJlZyBvdXRw
dXRHUFIgPSBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgLy8gICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgLy8gICAgICAgICByZXR1
cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCi0gICAgLy8gICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAvLyAgICAgICAgICAgICAgICAgLy8gU3RhZ2UgKDMpIGlzIGhlcmUuIFRoaXMg
aXMgd2hlbiB5b3UgZ2VuZXJhdGUgY29kZS4gWW91IGhhdmUgYWNjZXNzIHRvIHRoZQotICAgIC8v
ICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcnMgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMikg
YmVjYXVzZSB0aGlzIGxhbWJkYSBjbG9zZXMgb3ZlciB0aG9zZQotICAgIC8vICAgICAgICAgICAg
ICAgICAvLyB2YXJpYWJsZXMgKG91dHB1dEdQUiBhbmQgaW5wdXRHUFIpLiBZb3UgYWxzbyBoYXZl
IGFjY2VzcyB0byB3aGF0ZXZlciBleHRyYQotICAgIC8vICAgICAgICAgICAgICAgICAvLyBkYXRh
IHlvdSBjb2xsZWN0ZWQgaW4gc3RhZ2UgKDEpLCBzdWNoIGFzIHRoZSBhZGRlbmQgaW4gdGhpcyBj
YXNlLgotICAgIC8vICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGFkZGVu
ZCksIGlucHV0R1BSLCBvdXRwdXRHUFIpOwotICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3Ug
aGF2ZSB0byBlbmQgYnkganVtcGluZyB0byBkb25lLiBUaGVyZSBpcyBub3RoaW5nIHRvIGZhbGwg
dGhyb3VnaCB0by4KLSAgICAvLyAgICAgICAgICAgICAgICAgLy8gWW91IGNhbiBhbHNvIGp1bXAg
dG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIChzZWUgTGF6eVNsb3dQYXRoLmggZm9yIG1vcmUKLSAg
ICAvLyAgICAgICAgICAgICAgICAgLy8gaW5mbykuIE5vdGUgdGhhdCBjdXJyZW50bHkgeW91IGNh
bm5vdCBPU1IgZXhpdC4KLSAgICAvLyAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5h
cHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgLy8gICAgICAgICAgICAgfSk7Ci0gICAgLy8gICAgIH0s
Ci0gICAgLy8gICAgIGlucHV0KTsKLSAgICAvLwotICAgIC8vIFlvdSBjYW4gYmFzaWNhbGx5IHBh
c3MgYXMgbWFueSBpbnB1dHMgYXMgeW91IGxpa2UsIGVpdGhlciB1c2luZyB0aGlzIHZhcmFyZ3Mg
Zm9ybSwgb3IgYnkKLSAgICAvLyBwYXNzaW5nIGEgVmVjdG9yIG9mIExWYWx1ZXMuCi0gICAgLy8K
LSAgICAvLyBOb3RlIHRoYXQgaWYgeW91ciBzbG93IHBhdGggaXMgb25seSBkb2luZyBhIGNhbGws
IHlvdSBjYW4gdXNlIHRoZSBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigpCi0gICAgLy8gaGVscGVy
LiBGb3IgZXhhbXBsZToKLSAgICAvLwotICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKLSAgICAv
LyBMVmFsdWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAotICAgIC8vICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7Ci0gICAgLy8gICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0g
ICAgLy8gICAgICAgICAgICAgb3BlcmF0aW9uRG9UaGluZ3MsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAvLyAgICAgfSwgaW5wdXQpOwot
ICAgIC8vCi0gICAgLy8gRmluYWxseSwgbm90ZSB0aGF0IGFsbCBvZiB0aGUgbGFtYmRhcyAtIGJv
dGggdGhlIHN0YWdlICgyKSBsYW1iZGEgYW5kIHRoZSBzdGFnZSAoMykgbGFtYmRhIC0KLSAgICAv
LyBydW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNl
LCB5b3Ugc2hvdWxkIG5vdCB1c2UgYnktcmVmZXJlbmNlCi0gICAgLy8gY2FwdHVyZSAoaS5lLiBb
Jl0pIGluIGFueSBvZiB0aGVzZSBsYW1iZGFzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBsYXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFy
Z3VtZW50cy4uLiB9KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVj
dG9yPExWYWx1ZT4mIHVzZXJBcmd1bWVudHMpCi0gICAgewotICAgICAgICBDb2RlT3JpZ2luIG9y
aWdpbiA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAKLSAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KEIzOjpJbnQ2NCk7Ci0gICAgICAg
IGZvciAoTFZhbHVlIGFyZyA6IHVzZXJBcmd1bWVudHMpCi0gICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsK
LQotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFu
ZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhyZXN1bHQp
OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwot
Ci0gICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IEIzOjpWYWx1ZVJlcCYgcmVwIDogcGFyYW1zKQotICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKLQotICAg
ICAgICAgICAgICAgIFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0g
ZnVuY3Rvcihsb2NhdGlvbnMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKLQotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJh
bXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNl
cHRpb25UYXJnZXQ+IGV4Y2VwdGlvblRhcmdldCA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBBcyBwYXJ0IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8g
Y3JlYXRlIGEgY29uY3JldGUgT1NSRXhpdCBoZXJlLgotICAgICAgICAgICAgICAgIC8vIERvaW5n
IHNvIHNob3VsZCBhdXRvbWFnaWNhbGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4
aXQgdGh1bmtzLgotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rKCZqaXQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS0+aml0Q29k
ZS0+bGF6eVNsb3dQYXRocy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+
aml0Q29kZS0+bGF6eVNsb3dQYXRocy5hcHBlbmQobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmRleCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRvckp1bXAgPSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgc28gbG9uZyBhcyB3ZSdyZSBoZXJlLCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBvdXIg
bGF0ZSBwYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBydW5zIGJlZm9yZSBvciBhZnRl
ciBhbnkgb3RoZXIgbGF0ZSBwYXRocyB0aGF0IHdlIG1pZ2h0IGRlcGVuZCBvbiwgbGlrZQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZzdGF0ZS0+Z3JhcGgubV92bTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
bGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsaW5r
ZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChvcmlnaW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1Bh
dGg+IGxhenlTbG93UGF0aCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aD4oCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua2VkUGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxp
bmtCdWZmZXIpLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxTaXRlSW5kZXgsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29k
ZS0+bGF6eVNsb3dQYXRoc1tpbmRleF0gPSBXVEZNb3ZlKGxhenlTbG93UGF0aCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlKAotICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1
ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKLSAgICB7Ci0gICAgICAg
IGFwcGVuZE9TUkV4aXQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwg
bV9vcmlnaW4pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5k
KQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQuYm9vbGVhblRydWUpOwotICAgICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZGlkQWxyZWFkeVRlcm1pbmF0ZSgpCi0gICAgewotICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHR5cGVDaGVjaygK
LSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCi0gICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9u
LCBFeGl0S2luZCBleGl0S2luZCA9IEJhZFR5cGUpCi0gICAgewotICAgICAgICBhcHBlbmRUeXBl
Q2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0
aW9uLCBleGl0S2luZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAot
ICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKLSAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24s
IEV4aXRLaW5kIGV4aXRLaW5kKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtp
bmQoKSkpOwotICAgICAgICBhcHBlbmRPU1JFeGl0KGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLm5vZGUoKSwgZmFpbENvbmRpdGlvbiwgbV9vcmlnaW4pOwotICAgICAgICBtX2ludGVycHJl
dGVyLmZpbHRlcihoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCk7Ci0gICAgfQotICAgIAot
ICAgIExWYWx1ZSBsb3dJbnQzMihFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNl
S2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludDMyWmVybzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHZhbHVlLmFzSW50MzIoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2lu
dDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgdmFs
dWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRn
ZSwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1faW50NTJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0cmljdEludDUyVG9JbnQzMihlZGdlLCBpbnQ1MlRvU3RyaWN0SW50NTIo
dmFsdWUudmFsdWUoKSkpOwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwotICAgICAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0
KSwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hJbnQzMihib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBz
ZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92
ZW5UeXBlKGVkZ2UpICYgU3BlY0ludDMyKSk7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJs
ZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87Ci0gICAgfQotICAgIAotICAgIGVu
dW0gSW50NTJLaW5kIHsgU3RyaWN0SW50NTIsIEludDUyIH07Ci0gICAgTFZhbHVlIGxvd0ludDUy
KEVkZ2UgZWRnZSwgSW50NTJLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpOwotICAgICAgICAK
LSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAoa2luZCkgewotICAgICAgICBjYXNlIEludDUyOgotICAgICAgICAgICAgdmFsdWUgPSBtX2lu
dDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
OwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdHJpY3RJbnQ1MlRvSW50NTIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cmljdEludDUyOgotICAgICAgICAgICAgdmFs
dWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpOwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpbnQ1MlRvU3RyaWN0SW50NTIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2Rl
LCAhcHJvdmVuVHlwZShlZGdlKSk7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0g
ICAgICAgIHJldHVybiBtX291dC5pbnQ2NFplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBs
b3dJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
SW50NTIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93U3RyaWN0SW50NTIoRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvd0ludDUyKGVkZ2UsIFN0cmljdEludDUyKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihOb2RlKiBub2RlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICFpc1ZhbGlkKG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpKTsKLSAg
ICB9Ci0gICAgYm9vbCBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYmV0dGVyVXNlU3RyaWN0SW50NTIoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludDUyS2luZCBiZXN0SW50NTJLaW5kKFQgbm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihub2RlKSA/IFN0
cmljdEludDUyIDogSW50NTI7Ci0gICAgfQotICAgIEludDUyS2luZCBvcHBvc2l0ZShJbnQ1Mktp
bmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIElu
dDUyOgotICAgICAgICAgICAgcmV0dXJuIFN0cmljdEludDUyOwotICAgICAgICBjYXNlIFN0cmlj
dEludDUyOgotICAgICAgICAgICAgcmV0dXJuIEludDUyOwotICAgICAgICB9Ci0gICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgcmV0dXJu
IEludDUyOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93V2hpY2hldmVySW50NTIoRWRnZSBl
ZGdlLCBJbnQ1MktpbmQmIGtpbmQpCi0gICAgewotICAgICAgICBraW5kID0gYmVzdEludDUyS2lu
ZChlZGdlKTsKLSAgICAgICAgcmV0dXJuIGxvd0ludDUyKGVkZ2UsIGtpbmQpOwotICAgIH0KLSAg
ICAKLSAgICBMVmFsdWUgbG93Q2VsbChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8
fCBERkc6OmlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGVk
Z2UtPm9wKCkgPT0gSlNDb25zdGFudCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVk
Z2UtPmFzSlNWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmludFB0clplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
bV9vdXQuY29uc3RJbnRQdHIodmFsdWUuYXNDZWxsKCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewotICAgICAgICAgICAgTFZh
bHVlIHVuY2hlY2tlZFZhbHVlID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKAotICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVk
Z2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkVmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybiB1bmNoZWNrZWRWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7Ci0g
ICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnRQ
dHJaZXJvOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93T2JqZWN0KEVkZ2UgZWRnZSwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1
bGF0ZU9iamVjdChlZGdlLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAKLSAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25TdHJp
bmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nSWRlbnRVc2UpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhlZGdlLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAKLSAgICBMVmFsdWUgbG93U3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3Vs
YXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAg
ICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ0lkZW50VXNlKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBzdHJpbmcgPSBsb3dTdHJpbmcoZWRnZSwgbW9kZSk7Ci0gICAgICAgIExWYWx1ZSBz
dHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUp
OwotICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCBzdHJpbmcsIHN0cmluZ0ltcGwp
OwotICAgICAgICByZXR1cm4gc3RyaW5nSW1wbDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG93U3lt
Ym9sKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpOwotCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwotICAg
ICAgICBzcGVjdWxhdGVTeW1ib2woZWRnZSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG93Tm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwotICAgICAgICBzcGVjdWxh
dGVOb25OdWxsT2JqZWN0KGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQm9vbGVhblVzZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICAgICAgICAgIHRlcm1p
bmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5G
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEJvb2wo
dmFsdWUuYXNCb29sZWFuKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVk
Tm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgp
OwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICBMVmFsdWUg
dW5ib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVD
SygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNw
ZWNCb29sZWFuLCBpc05vdEJvb2xlYW4odW5ib3hlZFJlc3VsdCkpOwotICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IHVuYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9k
ZSwgIShwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0Jvb2xlYW4pKTsKLSAgICAgICAgdGVybWluYXRl
KFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGxvd0RvdWJsZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsICFwcm92ZW5UeXBlKGVkZ2UpKTsKLSAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZVplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1
ZSBsb3dKU1ZhbHVlKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNl
S2luZCgpID09IFVudHlwZWRVc2UpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9k
ZSwgIWlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSAhPSBJbnQ1MlJlcFVzZSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOwotCi0gICAgICAg
IExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LnZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gYm94SW50MzIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiVmFsdWUgbm90IGRlZmluZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSBsb3dTdG9yYWdlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIExvd2Vy
ZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVl
KCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKLSAg
ICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVk
Z2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5j
YXN0VG9JbnQzMih2YWx1ZSk7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAg
bm9WYWx1ZSgpLCBlZGdlLCBTcGVjSW50MzIsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbCht
X291dC5zaWduRXh0MzJUbzY0KHJlc3VsdCksIHZhbHVlKSk7Ci0gICAgICAgIHNldEludDMyKGVk
Z2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0RvdWJsZShMVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuaW50VG9Eb3VibGUodmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBM
VmFsdWUgc3RyaWN0SW50NTJUb0pTVmFsdWUoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
TEJhc2ljQmxvY2sgaXNJbnQzMiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJU
b0pTVmFsdWUgaXNJbnQzMiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBpc0RvdWJsZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNEb3VibGUgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJzdHJpY3RJbnQ1MlRvSlNWYWx1ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGludDMyVmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKG1fb3V0LnNpZ25F
eHQzMlRvNjQoaW50MzJWYWx1ZSksIHZhbHVlKSwKLSAgICAgICAgICAgIHVuc3VyZShpc0ludDMy
KSwgdW5zdXJlKGlzRG91YmxlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW50MzIsIGlzRG91YmxlKTsKLSAgICAgICAgCi0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hJbnQzMihpbnQzMlZhbHVlKSkpOwot
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhpc0RvdWJsZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hEb3VibGUobV9vdXQuaW50VG9Eb3VibGUodmFs
dWUpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0
dXJuIG1fb3V0LnBoaShtX291dC5pbnQ2NCwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIExW
YWx1ZSBzdHJpY3RJbnQ1MlRvSW50NTIoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fb3V0LnNobCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0
QW1vdW50KSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpbnQ1MlRvU3RyaWN0SW50NTIoTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgIH0KLSAgICAKLSAg
ICBMVmFsdWUgaXNJbnQzMihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUsIFNwZWNJbnQzMikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAg
ICByZXR1cm4gbV9vdXQuYWJvdmVPckVxdWFsKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7Ci0g
ICAgfQotICAgIExWYWx1ZSBpc05vdEludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9
IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNJbnQzMikpCi0gICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVy
KTsKLSAgICB9Ci0gICAgTFZhbHVlIHVuYm94SW50MzIoTFZhbHVlIGpzVmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9vdXQuY2FzdFRvSW50MzIoanNWYWx1ZSk7Ci0gICAgfQotICAgIExW
YWx1ZSBib3hJbnQzMihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQu
YWRkKG1fb3V0Lnplcm9FeHQodmFsdWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsK
LSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGlzQ2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1
ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNDZWxsIHwgU3BlY01pc2MpKQotICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82
NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICBMVmFsdWUgaXNOb3RDZWxs
T3JNaXNjKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
fihTcGVjQ2VsbCB8IFNwZWNNaXNjKSkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIp
OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgdW5ib3hEb3VibGUoTFZhbHVlIGpzVmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9vdXQuYml0Q2FzdChtX291dC5hZGQoanNWYWx1ZSwgbV90
YWdUeXBlTnVtYmVyKSwgbV9vdXQuZG91YmxlVHlwZSk7Ci0gICAgfQotICAgIExWYWx1ZSBib3hE
b3VibGUoTFZhbHVlIGRvdWJsZVZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnN1
YihtX291dC5iaXRDYXN0KGRvdWJsZVZhbHVlLCBtX291dC5pbnQ2NCksIG1fdGFnVHlwZU51bWJl
cik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVk
Z2UsIExWYWx1ZSBib3hlZFZhbHVlKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgaW50IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImpzVmFsdWVUb0ludDUyIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOwotICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0ludDUyIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICBM
VmFsdWUgaXNOb3RJbnQzMjsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNo
ZWNrKGVkZ2UsIFNwZWNJbnQzMikpCi0gICAgICAgICAgICBpc05vdEludDMyID0gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgICAgICBlbHNlIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVj
ayhlZGdlLCB+U3BlY0ludDMyKSkKLSAgICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29s
ZWFuVHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlz
Tm90SW50MzIoYm94ZWRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1
bnN1cmUoZG91YmxlQ2FzZSksIHVuc3VyZShpbnRDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVD
YXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0ludDUyID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuc2lnbkV4dDMyVG82NCh1bmJveEludDMy
KGJveGVkVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgK
LSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVy
dEJveGVkRG91YmxlVG9JbnQ1MiksIGJveGVkVmFsdWUpOwotICAgICAgICBGVExfVFlQRV9DSEVD
SygKLSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0ludDMy
IHwgU3BlY0ludDUyQXNEb3VibGUsCi0gICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJl
c3VsdCwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKLSAgICAgICAgICAg
IAotICAgICAgICBWYWx1ZUZyb21CbG9jayBkb3VibGVUb0ludDUyID0gbV9vdXQuYW5jaG9yKHBv
c3NpYmxlUmVzdWx0KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIGludFRv
SW50NTIsIGRvdWJsZVRvSW50NTIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgZG91YmxlVG9T
dHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSBwb3NzaWJsZVJlc3VsdCA9IG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnREb3VibGVUb0ludDUyKSwgdmFsdWUpOwot
ICAgICAgICBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChJbnQ1Mk92ZXJmbG93LAotICAg
ICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjSW50NTJBc0RvdWJsZSwKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6Om5vdEludDUyKSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVz
dWx0OwotICAgIH0KLQotICAgIExWYWx1ZSBjb252ZXJ0RG91YmxlVG9JbnQzMihMVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8pCi0gICAgewotICAgICAgICBMVmFsdWUg
aW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlVG9JbnQodmFsdWUpOwotICAgICAgICBMVmFsdWUg
aW50ZWdlclZhbHVlQ29udmVydGVkVG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2Vy
VmFsdWUpOwotICAgICAgICBMVmFsdWUgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlciA9IG1f
b3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIGludGVnZXJWYWx1ZUNvbnZlcnRl
ZFRvRG91YmxlKTsKLSAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBGb3JtYXR0ZWRWYWx1ZShE
YXRhRm9ybWF0RG91YmxlLCB2YWx1ZSksIG1fbm9kZSwgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50
ZWdlcik7Ci0KLSAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKSB7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayB2YWx1ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29u
dmVydERvdWJsZVRvSW50MzIgb24gemVybyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMy
KGludGVnZXJWYWx1ZSksIHVuc3VyZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250aW51YXRpb24p
KTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh2
YWx1ZUlzWmVybywgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUJp
dGNhc3RUb0ludDY0ID0gbV9vdXQuYml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQpOwotICAgICAg
ICAgICAgTFZhbHVlIHNpZ25CaXRTZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVCaXRjYXN0VG9J
bnQ2NCwgbV9vdXQuY29uc3RJbnQ2NCgwKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIEZvcm1hdHRlZFZhbHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2Rl
LCBzaWduQml0U2V0KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBpbnRlZ2VyVmFsdWU7Ci0gICAgfQotCi0gICAgTFZhbHVlIGlz
TnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
U3BlY0Z1bGxOdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0
dXJuIGlzTm90Q2VsbE9yTWlzYyhqc1ZhbHVlKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzTm90TnVt
YmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNw
ZWNGdWxsTnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVy
biBpc0NlbGxPck1pc2MoanNWYWx1ZSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdENl
bGwoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAg
ICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3Bl
Y0NlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LnRlc3ROb25aZXJvNjQoanNWYWx1ZSwgbV90YWdNYXNrKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGlzQ2VsbChMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxs
VG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5
cGUsIFNwZWNDZWxsKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVy
biBtX291dC50ZXN0SXNaZXJvNjQoanNWYWx1ZSwgbV90YWdNYXNrKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90TWlzYyhMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBT
cGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5W
YWx1ZSh0eXBlLCB+U3BlY01pc2MpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LmFib3ZlKHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVP
dGhlciB8IFRhZ0JpdEJvb2wgfCBUYWdCaXRVbmRlZmluZWQpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzTWlzYyhMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVs
bFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0
eXBlLCBTcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1
cm4gbV9vdXQubG9naWNhbE5vdChpc05vdE1pc2ModmFsdWUpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzTm90Qm9vbGVhbihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUsIH5TcGVjQm9vbGVhbikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwot
ICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NCgKLSAgICAgICAgICAgIG1fb3V0LmJp
dFhvcihqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQofjEpKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzQm9vbGVhbihMVmFs
dWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAg
ICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNCb29sZWFu
KSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dp
Y2FsTm90KGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgfQotICAgIExWYWx1ZSB1bmJveEJv
b2xlYW4oTFZhbHVlIGpzVmFsdWUpCi0gICAgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBh
IGNhc3QgdGhhdCBndWFyYW50ZWVzIHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVn
ZXIKLSAgICAgICAgLy8gdmFsdWUgaXMganVzdCAwIG9yIDEuIEJ1dCBmb3Igbm93IHdlIGRvIGl0
IHRoZSBkdW1iIHdheS4KLSAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NChtX291dC5iaXRB
bmQoanNWYWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCgxKSkpOwotICAgIH0KLSAgICBMVmFsdWUgYm94
Qm9vbGVhbihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0
KAotICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVlKSwgbV9vdXQu
Y29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdE90
aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAg
IHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVj
T3RoZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdElu
dDY0KH5UYWdCaXRVbmRlZmluZWQpKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVOdWxsKSk7Ci0gICAgfQotICAgIExWYWx1ZSBpc090aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBw
cm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNPdGhlcikpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291
dC5iaXRBbmQodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzUHJvdmVuVmFsdWUoU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSwgU3BlY3VsYXRl
ZFR5cGUgd2FudGVkVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB+d2Fu
dGVkVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhblRydWU7Ci0gICAgICAg
IGlmICghKHByb3ZlblR5cGUgJiB3YW50ZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBtX291
dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHZv
aWQgc3BlY3VsYXRlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VL
aW5kKCkpIHsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKLSAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
LSAgICAgICAgY2FzZSBLbm93blByaW1pdGl2ZVVzZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXBV
c2U6Ci0gICAgICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlZGdlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbE9y
T3RoZXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgICAgIEFT
U0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRl
TWFjaGluZUludChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9iamVj
dFVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlRnVu
Y3Rpb24oZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgotICAgICAgICAgICAg
c3BlY3VsYXRlRmluYWxPYmplY3QoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTdHJpbmdVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKLSAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgU3ltYm9sVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmdPclN0cmluZ09iamVjdChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE51bWJlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6Ci0gICAgICAgICAgICBz
cGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRG91YmxlUmVwUmVhbFVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwo
ZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5l
SW50VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVwTWFjaGluZUludChlZGdlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgICAg
ICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTm90U3RyaW5nVmFyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5nVmFyKGVk
Z2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm90Q2VsbFVzZToKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU5vdENlbGwoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBPdGhlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWlzY1VzZToKLSAgICAgICAgICAgIHNwZWN1
bGF0ZU1pc2MoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnN1cHBvcnRlZCBzcGVjdWxh
dGlvbiB1c2Uga2luZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3Vs
YXRlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoZWRnZSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgbG93SW50MzIoZWRnZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQ2Vs
bChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBsb3dDZWxsKGVkZ2UpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9y
T3RoZXIgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90
Q2VsbCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
aXNOb3RDZWxsLCBjb250aW51YXRpb24pOwotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1
ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlTWFjaGluZUludChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dKU1ZhbHVlKGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNP
YmplY3QoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAg
ICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3Bl
Y0NlbGwsIFNwZWNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICBtX291
dC5jb25zdEludDMyKE9iamVjdFR5cGUpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNOb3RPYmpl
Y3QoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7
Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0Nl
bGwsIH5TcGVjT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJl
dHVybiBtX291dC5iZWxvdygKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKE9iamVjdFR5cGUpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNOb3RTdHJpbmcoTFZhbHVl
IGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAg
IGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVj
U3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291
dC5ub3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5n
U3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc1N0cmluZyhMVmFs
dWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAg
ICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3Bl
Y1N0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9v
dXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0
cnVjdHVyZS0+aWQoKSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBpc05vdFN5bWJvbChMVmFsdWUg
Y2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNT
eW1ib2wpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xT
dHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNBcnJheVR5cGUoTFZhbHVl
IGNlbGwsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAg
ICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1f
aGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewotICAgICAgICAgICAgY2FzZSBBcnJheTo6
T3JpZ2luYWxBcnJheToKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiVW5leHBlY3RlZCBvcmlnaW5hbCBhcnJheSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBtX291
dC5iaXRBbmQoaW5kZXhpbmdUeXBlLCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGlu
Z1NoYXBlTWFzaykpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKElzQXJy
YXkgfCBhcnJheU1vZGUuc2hhcGVNYXNrKCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6Ok5vbkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2lu
YWxOb25BcnJheToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIo
SXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoYXJyYXlNb2RlLnNoYXBlTWFzaygpKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5OgotICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4
aW5nVHlwZSwgbV9vdXQuY29uc3RJbnQzMihJbmRleGluZ1NoYXBlTWFzaykpLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQ29ycnVwdCBhcnJheSBjbGFzcyIpOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFs
KAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlND
ZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTY29w
ZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKGFycmF5TW9kZS50eXBl
ZEFycmF5VHlwZSgpKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc0Z1
bmN0aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNw
ZWNDZWxsLCBTcGVjRnVuY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAg
ICAgcmV0dXJuIGlzVHlwZShjZWxsLCBKU0Z1bmN0aW9uVHlwZSk7Ci0gICAgfQotICAgIExWYWx1
ZSBpc05vdEZ1bmN0aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUo
dHlwZSAmIFNwZWNDZWxsLCB+U3BlY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92
ZW47Ci0gICAgICAgIHJldHVybiBpc05vdFR5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOwotICAg
IH0KLSAgICAgICAgICAgIAotICAgIExWYWx1ZSBpc0V4b3RpY0ZvclR5cGVvZihMVmFsdWUgY2Vs
bCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYg
KCEodHlwZSAmIFNwZWNPYmplY3RPdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm8zMigKLSAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxh
Z3MpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1
ZSBpc1R5cGUoTFZhbHVlIGNlbGwsIEpTVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9o
ZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
dHlwZSkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RUeXBlKExWYWx1ZSBjZWxsLCBK
U1R5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzVHlw
ZShjZWxsLCB0eXBlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVk
Z2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAg
ewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNG
dW5jdGlvbiwgaXNOb3RGdW5jdGlvbihjZWxsKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlRnVuY3Rpb24oRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlRnVuY3Rp
b24oZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRl
T2JqZWN0T3JPdGhlcihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1faW50ZXJwcmV0
ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIHByaW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InNwZWN1bGF0ZU9iamVjdE9yT3RoZXIgcHJpbWl0aXZlIGNhc2UiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFu
Y2goaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNh
c2UpLCB1bnN1cmUoY2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIHByaW1pdGl2ZUNhc2UpOwotICAgICAg
ICAKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkK
LSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjRmluYWxPYmplY3QsIGlzTm90VHlwZShjZWxsLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdl
LCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZShjZWxsKSwgZWRnZSwgU3BlY1N0cmluZyB8IH5TcGVjQ2VsbCwgaXNOb3RTdHJpbmcoY2VsbCkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCi0gICAg
ewotICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBMVmFsdWUgc3Ry
aW5nLCBMVmFsdWUgc3RyaW5nSW1wbCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRl
ci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZykpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHN0cmluZyksIGVkZ2Uubm9kZSgpLCBtX291dC5pc051bGwoc3RyaW5nSW1w
bCkpOwotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUoc3RyaW5nKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5n
SW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nSW1wbDo6ZmxhZ0lzQXRvbWljKCkpKSk7Ci0gICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVy
KGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3RyaW5nKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBsb3dT
dHJpbmdJZGVudChlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdP
YmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKLSAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmlu
Z09iamVjdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdP
YmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBz
dHJpbmcgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0
aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGxvd0NlbGwoZWRnZSksIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0
LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKLSAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90U3RyaW5nKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRn
ZSwgc3RydWN0dXJlSUQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgCi0gICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBT
cGVjU3RyaW5nT2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JDZWxsKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBzcGVj
dWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChlZGdlLCBtX291dC5sb2FkMzIoY2VsbCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChFZGdlIGVkZ2UsIExWYWx1ZSBzdHJ1Y3R1
cmVJRCkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0K
LSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWJz
dHJhY3RTdHJ1Y3R1cmUoZWRnZSkuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0
U3RydWN0dXJlKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVj
dWxhdGUoCi0gICAgICAgICAgICBOb3RTdHJpbmdPYmplY3QsIG5vVmFsdWUoKSwgMCwKLSAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc3RyaW5n
T2JqZWN0U3RydWN0dXJlKSkpOwotICAgIH0KLQotICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKEVk
Z2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTeW1ib2wgfCB+U3BlY0NlbGwsIGlzTm90U3ltYm9s
KGNlbGwpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBzcGVjdWxhdGVTeW1ib2woZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzcGVjdWxhdGVOb25OdWxsT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNl
bGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVk
Z2UsIFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKLSAgICAgICAgaWYgKG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgbV9vdXQudGVzdE5v
blplcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hl
YXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBp
c05vdE51bWJlcih2YWx1ZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVJlYWxO
dW1iZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhl
cmUgYmVjYXVzZSBsb3dEb3VibGUoKSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4K
LSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICBMVmFsdWUgZG91Ymxl
VmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGlu
dCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoInNwZWN1bGF0ZVJlYWxOdW1iZXIgY29udGludWF0aW9uIikpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwo
ZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKLSAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KGludENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1iZXIsCi0gICAgICAgICAgICBpc05v
dEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91
YmxlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIC8vIERv
IGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxv
dCBvZiBjb250cm9sIGZsb3cuCi0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVD
aGVjayhlZGdlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShlZGdlKTsKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAg
ICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNEb3VibGVSZWFsLAotICAgICAg
ICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBNYWNoaW5lSW50KEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZVRvU3RyaWN0
SW50NTIoZWRnZSwgbG93RG91YmxlKGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+
U3BlY1N0cmluZ1ZhcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJp
bmdWYXIgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOwotICAgICAgICBtX291
dC5icmFuY2goaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoaXNTdHJp
bmdDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBzcGVjdWxhdGVT
dHJpbmdJZGVudChlZGdlLCB2YWx1ZSwgbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0
cmluZ192YWx1ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgdHlwZUNoZWNrKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2UsIH5TcGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYg
KCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICB0eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLCBTcGVjTWlzYywgaXNOb3RNaXNjKHZhbHVlKSk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
c1N0aWxsVmFsaWQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgIH0KLSAgICAKLSAgICBM
VmFsdWUgbG9hZENlbGxTdGF0ZShMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X291dC5sb2FkOFplcm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwotICAg
IH0KLQotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBi
YXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKLQot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobG9hZENl
bGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0
aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVy
IHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmly
ZS4gQW5kCi0gICAgICAgIC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3Ig
dXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KLSAgICAg
ICAgLy8gd2FzdGluZyBMTFZNJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBsYXp5U2xv
d1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzID0gcGFyYW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBz
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUg
cHJlc2VydmVkU3RhdGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzYXZlZCB0aGVzZSwgc28g
d2hlbiB3ZSBtYWtlIGEgc2xvdyBwYXRoIGNhbGwsIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHNhdmUgdGhlbSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldChzY3JhdGNoMSwgc2NyYXRjaDIp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIG5lZWRUb0ZsdXNoID0gaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJh
cnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIu
Y3VycmVudEluZGV4QWRkcmVzcygpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIo
KSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoMSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yo
dm9pZCopKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0
Lmp1bXAoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMsIGppdCwgcGFyYW1zLmxhenlTbG93UGF0aC0+
Y2FsbFNpdGVJbmRleCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5leGNl
cHRpb25KdW1wcywgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIEludmFsaWRHUFJS
ZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBiYXNlKTsKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci0g
ICAgTFZhbHVlIHZtQ2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJn
cykKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LmNhbGwodHlwZSwgZnVuY3Rpb24sIGFyZ3MuLi4pOwotICAgICAgICBjYWxsQ2hl
Y2soKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjYWxs
UHJlZmxpZ2h0KENvZGVPcmlnaW4gY29kZU9yaWdpbikKLSAgICB7Ci0gICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVP
cmlnaW4oY29kZU9yaWdpbik7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0Zv
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsUHJlZmxp
Z2h0KCkKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoY29kZU9yaWdpbkRlc2NyaXB0aW9u
T2ZDYWxsU2l0ZSgpKTsKLSAgICB9Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5EZXNjcmlw
dGlvbk9mQ2FsbFNpdGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gVGFpbENhbGxJbmxpbmVkQ2FsbGVyCi0gICAgICAgICAgICB8fCBtX25vZGUtPm9wKCkgPT0g
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcgotICAgICAgICAgICAgfHwgbV9ub2RlLT5vcCgp
ID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKSB7Ci0gICAgICAgICAgICAv
LyBUaGlzIGNhc2UgYXJpc2VzIHdoZW4geW91IGhhdmUgYSBzaXR1YXRpb24gbGlrZSB0aGlzOgot
ICAgICAgICAgICAgLy8gZm9vIG1ha2VzIGEgY2FsbCB0byBiYXIsIGJhciBpcyBpbmxpbmVkIGlu
IGZvby4gYmFyIG1ha2VzIGEgY2FsbAotICAgICAgICAgICAgLy8gdG8gYmF6IGFuZCBiYXogaXMg
aW5saW5lZCBpbiBiYXIuIEFuZCB0aGVuIGJheiBtYWtlcyBhIHRhaWwtY2FsbCB0byBqYXosCi0g
ICAgICAgICAgICAvLyBhbmQgamF6IGlzIGlubGluZWQgaW4gYmF6LiBXZSB3YW50IHRoZSBjYWxs
ZnJhbWUgZm9yIGpheiB0byBhcHBlYXIgdG8gCi0gICAgICAgICAgICAvLyBoYXZlIGNhbGxlciBi
ZSBiYXIuCi0gICAgICAgICAgICBjb2RlT3JpZ2luID0gKmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2FsbENoZWNrKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCi0gICAgICAgICAg
ICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhj
ZXB0aW9uRnV6eiksIG1fY2FsbEZyYW1lKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBleGNl
cHRpb24gPSBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkpOwotICAgICAgICBMVmFsdWUgaGFkRXhjZXB0aW9uID0gbV9vdXQubm90WmVybzY0KGV4
Y2VwdGlvbik7Ci0KLSAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwotICAgICAgICBI
YW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgaWYgKG1fZ3JhcGgud2lsbENh
dGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdp
biwgZXhjZXB0aW9uSGFuZGxlcikpIHsKLSAgICAgICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKLSAgICAgICAgICAg
IGFwcGVuZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgRXhjZXB0aW9uQ2hlY2ssIG5vVmFsdWUo
KSwgbnVsbHB0ciwgaGFkRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgIG1fb3JpZ2luLndpdGhG
b3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyksIGlzRXhjZXB0aW9uSGFuZGxl
cik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkV4Y2VwdGlvbiBjaGVjayBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaGFk
RXhjZXB0aW9uLCByYXJlbHkobV9oYW5kbGVFeGNlcHRpb25zKSwgdXN1YWxseShjb250aW51YXRp
b24pKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwotICAgIH0KLQot
ICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIENvZGVP
cmlnaW4gb3BDYXRjaE9yaWdpbjsKLSAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRs
ZXI7Ci0gICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hF
eGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBl
eGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZSht
X2Z0bFN0YXRlKTsKLQotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgUGF0Y2hwb2ludCBleGNlcHRpb24gT1NSIGV4aXQg
IyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRo
IGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwotICAgICAgICAgICAg
aWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxh
YmxlUmVjb3ZlcmllcyksICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBleGl0T0sg
PSB0cnVlOwotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0
QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyk7Ci0KLSAgICAgICAgT1NSRXhpdERlc2Ny
aXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgp
LCBudWxscHRyKTsKLQotICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW50byB0aGUgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zIHdoZXJlIHdlIHdpbGwgZmluZCB0aGUgZXhpdCBhcmd1bWVu
dHMKLSAgICAgICAgLy8gd2UgYXJlIGFib3V0IHRvIGFwcGVuZC4gV2UgbmVlZCB0byBhY2NvdW50
IGZvciBib3RoIHRoZSBjaGlsZHJlbiB3ZSd2ZSBhbHJlYWR5IGFkZGVkLCBhbmQKLSAgICAgICAg
Ly8gZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJlc3VsdCB2YWx1ZSBpZiB0aGUgcGF0Y2hwb2lu
dCBpcyBub3Qgdm9pZC4KLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCi0gICAgICAgICAgICBv
ZmZzZXQrKzsKLQotICAgICAgICAvLyBVc2UgTGF0ZUNvbGRBbnkgdG8gZW5zdXJlIHRoYXQgdGhl
IHN0YWNrbWFwIGFyZ3VtZW50cyBpbnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2hwb2ludCdzCi0gICAg
ICAgIC8vIHJlc3VsdCBhbmQgd2l0aCBhbnkgbGF0ZS1jbG9iYmVyZWQgcmVnaXN0ZXJzLgotICAg
ICAgICB2YWx1ZS0+YXBwZW5kVmVjdG9yV2l0aFJlcCgKLSAgICAgICAgICAgIGJ1aWxkRXhpdEFy
Z3VtZW50cyhleGl0RGVzY3JpcHRvciwgb3BDYXRjaE9yaWdpbiwgbm9WYWx1ZSgpKSwKLSAgICAg
ICAgICAgIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Ci0KLSAgICAgICAgcmV0dXJuIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZSgKLSAgICAgICAgICAgIG1fZnRsU3RhdGUsIGV4aXRE
ZXNjcmlwdG9yLCBvcmlnaW4sIG9mZnNldCwgKmV4Y2VwdGlvbkhhbmRsZXIpOwotICAgIH0KLQot
ICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2spCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKLSAgICB9Ci0KLSAgICBPU1JFeGl0
RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIE5vZGUqIGhpZ2hWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCi0gICAgICAgICAgICBsb3dWYWx1ZS5m
b3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1
ZSksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKLSAgICAgICAg
RXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwg
TFZhbHVlIGZhaWxDb25kaXRpb24sIAotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBp
c0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAj
IiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGgg
YXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7Ci0gICAgICAgICAgICBp
ZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFi
bGVSZWNvdmVyaWVzKSwgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgb3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZG9P
U1JFeGl0RnV6emluZygpICYmICFpc0V4Y2VwdGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIExW
YWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKG1fb3V0LmFic29sdXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKSwK
LSAgICAgICAgICAgICAgICBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlMzIobnVtYmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5hYnNvbHV0ZSgmZ19u
dW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh1bnNpZ25lZCBhdE9yQWZ0ZXIgPSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpBdE9yQWZ0ZXIo
KSkgewotICAgICAgICAgICAgICAgIGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKLSAgICAg
ICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQu
YWJvdmVPckVxdWFsKG51bWJlck9mRnV6ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdE9yQWZ0
ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodW5zaWduZWQgYXQgPSBPcHRp
b25zOjpmaXJlT1NSRXhpdEZ1enpBdCgpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbENvbmRpdGlv
biA9IG1fb3V0LmJpdE9yKAotICAgICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5lcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0LmNv
bnN0SW50MzIoYXQpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFsc2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYmxlc3NTcGVjdWxhdGlvbigKLSAgICAgICAgICAgIG1fb3V0LnNwZWN1bGF0
ZShmYWlsQ29uZGl0aW9uKSwga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVP
cmlnaW4gb3JpZ2luKQotICAgIHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNj
cmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7Ci0g
ICAgICAgIAotICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXREZXNjcmlwdG9yLCBvcmlnaW4uZm9yRXhpdCwgbG93VmFsdWUpKTsKLQotICAgICAgICBT
dGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigK
LSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9y
LT5lbWl0T1NSRXhpdCgKLSAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4s
IGppdCwgcGFyYW1zLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIFN0YWNrbWFw
QXJndW1lbnRMaXN0IGJ1aWxkRXhpdEFyZ3VtZW50cygKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yLCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLAotICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNr
bWFwTG9jYXRpb25zID0gMCkKLSAgICB7Ci0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IHJl
c3VsdDsKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAgICAgICAgZXhpdERlc2Ny
aXB0b3IsIGV4aXRPcmlnaW4sIHJlc3VsdCwgbG93VmFsdWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50
c0luU3RhY2ttYXBMb2NhdGlvbnMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGJ1aWxkRXhpdEFyZ3VtZW50cygKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yLCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIFN0YWNrbWFwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAotICAgICAgICB1bnNp
Z25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKLSAgICB7
Ci0gICAgICAgIGlmICghIWxvd1ZhbHVlKQotICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChs
b3dWYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFp
bGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKLSAgICAgICAgYXZhaWxhYmls
aXR5TWFwLnBydW5lQnlMaXZlbmVzcyhtX2dyYXBoLCBleGl0T3JpZ2luKTsKLSAgICAgICAgCi0g
ICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFw
OwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKLSAgICAgICAg
ICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgewotICAgICAgICAgICAgICAgIGlm
ICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFp
bGFiaWxpdHkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tQWxs
b2NhdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4
aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCksIG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1f
dmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNj
cmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2Nh
bHNbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZU
TE9TUkV4aXRMaXZlbmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLAotICAgICAgICAgICAgICAgICAgICAoIShh
dmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09
IEZUTEZvck9TUkVudHJ5TW9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBFeGl0VmFs
dWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBh
dmFpbGFiaWxpdHkpOwotICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2tt
YXBMb2NhdGlvbnMoKSkKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBM
b2NhdGlvbnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMpOwotICAgICAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzW2ldID0gZXhpdFZh
bHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBh
dmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBh
aXIua2V5LmJhc2UoKTsKLSAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiBtYXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOwotICAgICAgICAgICAgRXhpdFZhbHVl
IGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVh
cFBhaXIudmFsdWUpOwotICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2tt
YXBMb2NhdGlvbnMoKSkKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBM
b2NhdGlvbnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMpOwotICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCi0gICAgICAgICAgICAg
ICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMsICJcbiIpOwotICAgICAgICAgICAgaWYgKCFleGl0RGVz
Y3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgTWF0ZXJpYWxpemF0aW9uczogXG4iKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBl
eGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgICAgICAiLCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRpb24pLCAiXG4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEV4aXRWYWx1ZSBleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkoCi0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kj4mIG1hcCwKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKLSAgICB7Ci0gICAg
ICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAg
c3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgotICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5o
YXNOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1l
bnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQg
aW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2ZQotICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQg
Ynkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkg
d2VyZSBsaXZlIGluCi0gICAgICAgICAgICAvLyBieXRlY29kZS4KLSAgICAgICAgICAgIHJldHVy
biBFeGl0VmFsdWU6OmRlYWQoKTsKLQotICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAg
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAg
ICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxS
ZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6
Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZp
cnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUo
Zmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKLSAgICAg
ICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgIH0KLSAgICAKLSAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yTm9kZSgKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYg
bWFwLAotICAgICAgICBOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgLy8gTk9URTogSW4gRlRM
LT5CMywgd2UgY2Fubm90IGdlbmVyYXRlIGNvZGUgaGVyZSwgYmVjYXVzZSBtX291dHB1dCBpcyBw
b3NpdGlvbmVkIGFmdGVyIHRoZQotICAgICAgICAvLyBzdGFja21hcCB2YWx1ZS4gTGlrZSBhbGwg
dmFsdWVzLCB0aGUgc3RhY2ttYXAgdmFsdWUgY2Fubm90IHVzZSBhIGNoaWxkIHRoYXQgaXMgZGVm
aW5lZCBhZnRlcgotICAgICAgICAvLyBpdC4KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsK
LQotICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgotICAgICAgICAgICAgICAgIC8vIFRoaXMg
bWlnaHQgYXJpc2UgaW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQg
dGhhdCBpdCB3b3VsZCwKLSAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGls
ZSB0byBiZSBjb25zZXJ2YXRpdmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
ZGVhZCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2Rl
LT5hc0pTVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5n
ZXQobm9kZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdmFpbGFi
bGVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBBdmFpbGFibGVSZWNvdmVy
eSByZWNvdmVyeSA9IG1fYXZhaWxhYmxlUmVjb3Zlcmllc1tpXTsKLSAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS5ub2RlKCkgIT0gbm9kZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIEV4aXRWYWx1ZSByZXN1bHQgPSBFeGl0VmFsdWU6OnJlY292ZXJ5KAotICAgICAgICAg
ICAgICAgIHJlY292ZXJ5Lm9wY29kZSgpLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuc2l6
ZSgpICsgMSwKLSAgICAgICAgICAgICAgICByZWNvdmVyeS5mb3JtYXQoKSk7Ci0gICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKHJlY292ZXJ5LmxlZnQoKSk7Ci0gICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHJlY292ZXJ5LnJpZ2h0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
aW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEludDMyLCB2
YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5n
ZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SW50NTIsIHZhbHVlLnZhbHVlKCkp
OwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChub2Rl
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4aXRB
cmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7
Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1l
bnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAg
IAotICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1l
bnRzLCBEYXRhRm9ybWF0SlMsIHZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgdmFs
dWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0
RG91YmxlLCB2YWx1ZS52YWx1ZSgpKTsKLQotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCB0b0NTdHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgfQotCi0gICAgRXhp
dFZhbHVlIGV4aXRBcmd1bWVudChTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBEYXRh
Rm9ybWF0IGZvcm1hdCwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdCA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3Vt
ZW50cy5zaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvclRhaWxD
YWxsKFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgIEFTU0VSVChu
b2RlLT5oYXNSZXN1bHQoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAg
ICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAg
ICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6Y29u
c3RhbnQobm9kZS0+YXNKU1ZhbHVlKCkpOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2
YWx1ZS52YWx1ZSgpKTsKLQotICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUp
OwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZXhpdEFy
Z3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKSk7
Ci0KLSAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3Vt
ZW50cywgRGF0YUZvcm1hdEpTLCBib3hCb29sZWFuKHZhbHVlLnZhbHVlKCkpKTsKLQotICAgICAg
ICAvLyBEb3VibGVzIGFuZCBJbnQ1MiBoYXZlIGJlZW4gY29udmVydGVkIGJ5IFZhbHVlUmVwKCkK
LSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmlu
ZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBkb2VzS2lsbChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoZWRnZS5kb2VzTm90S2ls
bCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEF2YWlsYWJsZVJlY292
ZXJ5KAotICAgICAgICBOb2RlKiBub2RlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAgICAgbV9h
dmFpbGFibGVSZWNvdmVyaWVzLmFwcGVuZChBdmFpbGFibGVSZWNvdmVyeShub2RlLCBvcGNvZGUs
IGxlZnQsIHJpZ2h0LCBmb3JtYXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBdmFpbGFi
bGVSZWNvdmVyeSgKLSAgICAgICAgRWRnZSBlZGdlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAg
ICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoZWRnZS5ub2RlKCksIG9wY29kZSwgbGVmdCwgcmlnaHQs
IGZvcm1hdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJl
ZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJbnQ1
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBtX2ludDUyVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0K
LSAgICB2b2lkIHNldFN0cmljdEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIG1fc3RyaWN0SW50NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUo
dmFsdWUsIG1faGlnaEJsb2NrKSk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9k
ZSwgTFZhbHVlIHZhbHVlLCBJbnQ1MktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
a2luZCkgewotICAgICAgICBjYXNlIEludDUyOgotICAgICAgICAgICAgc2V0SW50NTIobm9kZSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
U3RyaWN0SW50NTI6Ci0gICAgICAgICAgICBzZXRTdHJpY3RJbnQ1Mihub2RlLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGludDUyIGtpbmQiKTsKLSAgICB9Ci0gICAgdm9p
ZCBzZXRKU1ZhbHVlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1f
anNWYWx1ZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRCb29sZWFuKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlKE5v
ZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5z
ZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0g
ICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbnQzMihMVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBzZXRJbnQzMihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJ
bnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVl
KTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBz
ZXRJbnQ1MihMVmFsdWUgdmFsdWUsIEludDUyS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc2V0
SW50NTIobV9ub2RlLCB2YWx1ZSwga2luZCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SlNWYWx1ZShM
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOwot
ICAgIH0KLSAgICB2b2lkIHNldEJvb2xlYW4oTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
c2V0Qm9vbGVhbihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlKExW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7Ci0g
ICAgfQotICAgIHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dERvdWJsZShtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkKGNv
bnN0IExvd2VyZWROb2RlVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5h
dG9ycy0+ZG9taW5hdGVzKHZhbHVlLmJsb2NrKCksIG1faGlnaEJsb2NrKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1fZ3Jh
cGgubV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0YXJnZXQpOwotICAgIH0KLQotICAg
IExWYWx1ZSBsb2FkU3RydWN0dXJlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSB0YWJsZUluZGV4ID0gbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7Ci0gICAgICAgIExWYWx1ZSB0YWJsZUJhc2UgPSBtX291dC5sb2FkUHRyKAotICAgICAg
ICAgICAgbV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCkp
KTsKLSAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAg
ICAgICAgICBtX2hlYXBzLnN0cnVjdHVyZVRhYmxlLCB0YWJsZUJhc2UsIG1fb3V0Lnplcm9FeHRQ
dHIodGFibGVJbmRleCkpOwotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgd2Vha1BvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQotICAgIHsK
LSAgICAgICAgYWRkV2Vha1JlZmVyZW5jZShwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmNvbnN0SW50UHRyKHBvaW50ZXIpOwotICAgIH0KLQotICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJl
SUQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNl
KHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aWQoKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKHN0cnVjdHVyZSk7
Ci0gICAgfQotICAgIAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBp
bnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
bV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsK
LSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVy
YW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3Bl
cmFuZCwgVGFnT2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOwotICAgIH0KLSAgICBU
eXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBv
ZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5v
ZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50
IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJh
bmQsIFBheWxvYWRPZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBv
cGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgVGFnT2Zm
c2V0KTsKLSAgICB9Ci0gICAgCi0gICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOwotICAg
IH0KLSAgICBBYnN0cmFjdFZhbHVlIGFic3RyYWN0VmFsdWUoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3R5cGU7Ci0gICAgfQotICAgIFNwZWN1bGF0ZWRU
eXBlIHByb3ZlblR5cGUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZlblR5
cGUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKE5v
ZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3Zh
bHVlOwotICAgIH0KLSAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBwcm92ZW5WYWx1ZShlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYWJzdHJhY3RTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKG5vZGUpLm1fc3RydWN0dXJlOwotICAg
IH0KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0dXJlKEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFN0cnVjdHVyZShlZGdlLm5vZGUoKSk7
Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotICAgIHZvaWQgcHJvYmUoc3Rk
OjpmdW5jdGlvbjx2b2lkIChDQ2FsbEhlbHBlcnM6OlByb2JlQ29udGV4dCopPiBwcm9iZUZ1bmMp
Ci0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0ocHJvYmVGdW5jKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHZvaWQgY3Jhc2goKQotICAgIHsKLSAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmlu
ZGV4LCBtX25vZGUtPmluZGV4KCkpOwotICAgIH0KLSAgICB2b2lkIGNyYXNoKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgdW5zaWduZWQgbm9kZUluZGV4KQotICAgIHsKLSNpZiBBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ0
bFVucmVhY2hhYmxlKSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShibG9ja0luZGV4KTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7Ci0jZWxzZQotICAgICAgICBtX291dC5jYWxsKAot
ICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihmdGxVbnJlYWNoYWJsZSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihjb2RlQmxv
Y2soKSksIG1fb3V0LmNvbnN0SW50MzIoYmxvY2tJbmRleCksCi0gICAgICAgICAgICBtX291dC5j
b25zdEludDMyKG5vZGVJbmRleCkpOwotI2VuZGlmCi0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgfQotCi0gICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJl
dHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KLSAgICAKLSAg
ICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KLSAgICAKLSAgICBHcmFwaCYg
bV9ncmFwaDsKLSAgICBTdGF0ZSYgbV9mdGxTdGF0ZTsKLSAgICBBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5IG1faGVhcHM7Ci0gICAgT3V0cHV0IG1fb3V0OwotICAgIFByb2NlZHVyZSYgbV9wcm9jOwot
ICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7Ci0gICAgTEJhc2ljQmxvY2sgbV9oYW5k
bGVFeGNlcHRpb25zOwotICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+
IG1fYmxvY2tzOwotICAgIAotICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKLSAgICBMVmFsdWUgbV9j
YXB0dXJlZDsKLSAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwotICAgIExWYWx1ZSBtX3RhZ01h
c2s7Ci0gICAgCi0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZh
bHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0cmljdEludDUy
VmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50NTJWYWx1
ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVz
OwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsK
LSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0g
ICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAg
Ci0gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBo
YXZpbmcgdG8gZG8gQ1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgotICAgIC8vIEl0J3Mgbmlj
ZSB0byBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBn
dWFyYW50ZWUgdGhlbSBhIGJpdCBiZXR0ZXIuCi0gICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBM
TFZNIGNvbXBpbGUgdGltZS4KLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJn
dW1lbnRWYWx1ZXM7Ci0gICAgCi0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7Ci0g
ICAgCi0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIG1fYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjsKLSAgICAKLSAgICBWZWN0b3I8QXZhaWxhYmxlUmVjb3ZlcnksIDM+IG1fYXZhaWxh
YmxlUmVjb3ZlcmllczsKLSAgICAKLSAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwot
ICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0
ZXI7Ci0gICAgREZHOjpCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKLSAgICBERkc6OkJhc2ljQmxv
Y2sqIG1fbmV4dEhpZ2hCbG9jazsKLSAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKLQot
ICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7Ci0gICAg
Tm9kZSogbV9ub2RlOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgbG93
ZXJERkdUb0xMVk0oU3RhdGUmIHN0YXRlKQotewotICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5n
KHN0YXRlKTsKLSAgICBsb3dlcmluZy5sb3dlcigpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAkocmV2aXNpb24gMTk2NzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExMb3dlckRGR1RvTExWTV9oCi0jZGVmaW5lIEZUTExv
d2VyREZHVG9MTFZNX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiREZHR3Jh
cGguaCIKLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7Ci0KLXZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmKTsKLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExM
b3dlckRGR1RvTExWTV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM4LDcgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgcmVn
aXN0ZXJTY3JhdGNoLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgIH07CiAgICAgCi0g
ICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMg
TExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KKyAg
ICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBC
MyBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAgICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFw
cHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAgICAv
LyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFdlaWdodC5oCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFdlaWdodC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxOCArNTMsNiBA
QCBwdWJsaWM6CiAKICAgICBCMzo6RnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5Q2xhc3MoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpID8gQjM6OkZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBCMzo6RnJl
cXVlbmN5Q2xhc3M6OlJhcmU7IH0KICAgICAKLSAgICB1bnNpZ25lZCBzY2FsZVRvVG90YWwoZG91
YmxlIHRvdGFsKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gTExWTSBhY2NlcHRzIDMyLWJpdCB1
bnNpZ25lZCBicmFuY2ggd2VpZ2h0cyBidXQgaW4gZHVtcHMgaXQgbWlnaHQgZGlzcGxheSB0aGVt
Ci0gICAgICAgIC8vIGFzIHNpZ25lZCB2YWx1ZXMuIFdlIGRvbid0IG5lZWQgYWxsIDMyIGJpdHMs
IHNvIHdlIGp1c3QgdXNlIHRoZSAzMSBiaXRzLgotICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKSAqIElOVF9NQVggLyB0b3RhbDsKLSAgICAgICAgaWYg
KHJlc3VsdCA8IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHJlc3VsdCA+
IElOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOwotICAgIH0KLSAgICAKICAgICAvLyBJbnZlcnNl
IHdlaWdodCBmb3IgYSB0d28tdGFyZ2V0IGJyYW5jaC4KICAgICBXZWlnaHQgaW52ZXJzZSgpIGNv
bnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHRlZFRh
cmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0
ZWRUYXJnZXQuaAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExXZWlnaHRlZFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw4IEBAIGlu
bGluZSBXZWlnaHRlZFRhcmdldCByYXJlbHkoTEJhc2ljQmxvY2sKICAgICByZXR1cm4gV2VpZ2h0
ZWRUYXJnZXQoYmxvY2ssIDApOwogfQogCi0vLyBUaGlzIG1lYW5zIHdlIGxldCBMTFZNIGZpZ3Vy
ZSBpdCBvdXQgYmFzaWMgb24gaXRzIHN0YXRpYyBlc3RpbWF0ZXMuIExMVk0ncyBzdGF0aWMKLS8v
IGVzdGltYXRlcyBhcmUgdXN1YWxseSBwcmV0dHkgZGFybiBnb29kLCBzbyB0aGVyZSdzIGdlbmVy
YWxseSBub3RoaW5nIHdyb25nIHdpdGgKLS8vIHVzaW5nIHRoaXMuCisvLyBDdXJyZW50bHkgaW4g
QjMgdGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiAidXN1YWxseSIsIGJ1dCB3ZSBsaWtlIHRvIG1h
a2UgdGhlIGRpc3RpbmN0aW9uIGluCisvLyBjYXNlIHdlIGV2ZXIgbWFrZSBCMyBzdXBwb3J0IHBy
b3BlciBicmFuY2ggd2VpZ2h0cy4gV2UgdXNlZCB0byBkbyB0aGF0IGluIExMVk0uCiBpbmxpbmUg
V2VpZ2h0ZWRUYXJnZXQgdW5zdXJlKExCYXNpY0Jsb2NrIGJsb2NrKQogewogICAgIHJldHVybiBX
ZWlnaHRlZFRhcmdldChibG9jaywgV2VpZ2h0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAxOTY3NDIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
ZW1pdERpc3BsYWNlKENhYwogICAgICAgICAvLyBhYnNvbHV0ZWx5IG5lZWQgdG8gbG9hZCB0aGUg
Y2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8KICAgICAgICAgLy8gZGlmZmVyZW50IEdQUnMgaW5p
dGlhbGx5IGJ1dCBub3QgZW5vdWdoIHByZXNzdXJlIHRvCiAgICAgICAgIC8vIHRoZW4gaGF2ZSB0
byBzcGlsbCBhbGwgb2YgdGhlbS4gQW5kIGV2ZW4gaW4gdGhhdCBjYXNlLAotICAgICAgICAvLyBk
ZXBlbmRpbmcgb24gdGhlIG9yZGVyIGluIHdoaWNoIExMVk0gc2F2ZXMgdGhlCisgICAgICAgIC8v
IGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggQjMgc2F2ZXMgdGhlCiAgICAgICAgIC8v
IGNhbGxlZS1zYXZlcywgd2Ugd2lsbCBwcm9iYWJseSBzdGlsbCBiZSBzYWZlLiBBbnl3YXksCiAg
ICAgICAgIC8vIHRoZSBjb3VwbGUgZXh0cmEgbW92ZSBpbnN0cnVjdGlvbnMgY29tcGFyZWQgdG8g
YW4KICAgICAgICAgLy8gZWZmaWNpZW50IGN5Y2xlLWJhc2VkIGFsZ29yaXRobSBhcmUgbm90IGdv
aW5nIHRvIGh1cnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
Y3BwCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDcgKzI3OCw3IEBAIFJlZ2lzdGVyU2V0
IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmUKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJl
Z0NTMyk7CiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzQpOwogI2VsaWYgQ1BVKEFSTTY0
KQotICAgIC8vIExMVk0gbWlnaHQgc2F2ZSBhbmQgdXNlIGFsbCBBUk02NCBjYWxsZWUgc2F2ZXMg
c3BlY2lmaWVkIGluIHRoZSBBQkkuCisgICAgLy8gQjMgbWlnaHQgc2F2ZSBhbmQgdXNlIGFsbCBB
Uk02NCBjYWxsZWUgc2F2ZXMgc3BlY2lmaWVkIGluIHRoZSBBQkkuCiAgICAgcmVzdWx0LnNldChH
UFJJbmZvOjpyZWdDUzApOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MxKTsKICAgICBy
ZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAkocmV2aXNpb24gMTk2NzQyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBV
bml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKLQotI2lmIEhBVkUoTExWTSkK
LQotI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNUE9TSVguaCIKLQotI2lmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9u
KGJvb2wgdmVyYm9zZSkKLXsKLSNpZiBQTEFURk9STShHVEspCi0jaWYgRU5BQkxFKERFVkVMT1BF
Ul9NT0RFKQotICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGZ1bmN0aW9uID0gZ2V0TExWTUlu
aXRpYWxpemVyRnVuY3Rpb25QT1NJWCgibGlibGx2bUZvckpTQy5zbyIsIHZlcmJvc2UpOwotICAg
IGlmIChmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwotI2VuZGlmCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGxpYmxsdm1Gb3JKU0NJbnN0YWxsZWRQYXRoID0gTElCRElSIEdfRElS
X1NFUEFSQVRPUl9TICJqYXZhc2NyaXB0Y29yZWd0ay0iIFdFQktJVEdUS19BUElfVkVSU0lPTl9T
VFJJTkcgR19ESVJfU0VQQVJBVE9SX1M7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBsaWJsbHZtRm9y
SlNDRmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShsaWJsbHZtRm9ySlNDSW5zdGFsbGVkUGF0aCwg
ImxpYmxsdm1Gb3JKU0Muc28iLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIGdldExMVk1Jbml0aWFs
aXplckZ1bmN0aW9uUE9TSVgobGlibGx2bUZvckpTQ0ZpbGVuYW1lLmdldCgpLCB2ZXJib3NlKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uUE9TSVgoImxpYmxs
dm1Gb3JKU0Muc28iLCB2ZXJib3NlKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZt
L0luaXRpYWxpemVMTFZNV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHAJKHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXpl
TExWTS5oIgotCi0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgPFdpbmRvd3MuaD4KLQot
I2lmIEhBVkUoTExWTSkKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0
aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uKGJvb2wgLyogdmVyYm9zZSAqLykKLXsKLSAg
ICBjb25zdCB3Y2hhcl90KiBsaWJyYXJ5TmFtZSA9IEwibGlibGx2bUZvckpTQy5kbGwiOwotCi0g
ICAgSE1PRFVMRSBsaWJyYXJ5ID0gOjpMb2FkTGlicmFyeShsaWJyYXJ5TmFtZSk7Ci0KLSAgICBp
ZiAoIWxpYnJhcnkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgY2hhciog
c3ltYm9sTmFtZSA9ICJpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSI7Ci0gICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbj4oR2V0UHJvY0FkZHJlc3MobGlicmFy
eSwgc3ltYm9sTmFtZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEhB
VkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTVRy
YXBDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xp
YnJhcnkvTExWTVRyYXBDYWxsYmFjay5oCShyZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1UcmFwQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgTExWTVRyYXBDYWxsYmFja19oCi0jZGVmaW5lIExMVk1UcmFwQ2Fs
bGJhY2tfaAotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotZXh0ZXJuIHZvaWQgKCpn
X2xsdm1UcmFwQ2FsbGJhY2spKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikgTk9fUkVUVVJOOwot
Ci0jZW5kaWYgLy8gTExWTVRyYXBDYWxsYmFja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCShy
ZXZpc2lvbiAxOTY3NDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2xp
Ymxsdm1Gb3JKU0MudmVyc2lvbgkod29ya2luZyBjb3B5KQpAQCAtMSw0ICswLDAgQEAKLUxMVk1G
T1JKU0MgewotICAgIGdsb2JhbDogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEk7Ci0gICAgbG9j
YWw6ICo7Ci19OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZN
VHJhcENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0v
bGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgJKHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTVRyYXBDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNVHJhcENhbGxiYWNrX2gKLSNkZWZpbmUgTExWTVRyYXBD
YWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1leHRlcm4gdm9pZCAo
KmdfbGx2bVRyYXBDYWxsYmFjaykoY29uc3QgY2hhciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47
Ci0KLSNlbmRpZiAvLyBMTFZNVHJhcENhbGxiYWNrX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24J
KHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkv
bGlibGx2bUZvckpTQy52ZXJzaW9uCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotTExW
TUZPUkpTQyB7Ci0gICAgZ2xvYmFsOiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSTsKLSAgICBs
b2NhbDogKjsKLX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCwxNiArMzQwLDYgQEAgc3RhdGljIHZv
aWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgICAgIE9wdGlvbnM6OnVzZU9TUkVu
dHJ5VG9GVEwoKSA9IGZhbHNlOwogICAgIH0KIAotI2lmIENQVShBUk02NCkKLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUxMAotICAgIC8v
IFdlJ3JlIHJ1bm5pbmcgaW50byBhIGJ1ZyB3aGVyZSBzb21lIEFSTTY0IHRlc3RzIGFyZSBmYWls
aW5nIGluIHRoZSBGVEwKLSAgICAvLyB3aXRoIHdoYXQgYXBwZWFycyB0byBiZSBhbiBsbHZtIGJ1
ZyB3aGVyZSBsbHZtIGlzIG1pc2NhbGN1bGF0aW5nIHRoZQotICAgIC8vIGxpdmUtb3V0IHZhcmlh
YmxlcyBvZiBhIHBhdGNocG9pbnQuIFRoaXMgY2F1c2VzIHVzIHRvIG5vdCBrZWVwIGEgCi0gICAg
Ly8gdm9sYXRpbGUgcmVnaXN0ZXIgYWxpdmUgYWNyb3NzIGEgQyBjYWxsIGluIGEgcGF0Y2hwb2lu
dCwgZXZlbiB0aG91Z2ggCi0gICAgLy8gdGhhdCByZWdpc3RlciBpcyB1c2VkIGltbWVkaWF0ZWx5
IGFmdGVyIHRoZSBwYXRjaHBvaW50LgotICAgIE9wdGlvbnM6OmFzc3VtZUFsbFJlZ3NJbkZUTElD
QXJlTGl2ZSgpID0gdHJ1ZTsKLSNlbmRpZgotCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2
YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkK
ICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUg
ZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUg
ZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5k
cwpAQCAtMzc2LDEyICszNjYsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAg
ICAgICAgbmFtZV8jI0RlZmF1bHQoKSA9IGRlZmF1bHRWYWx1ZV87CiAgICAgICAgICAgICBKU0Nf
T1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCi0gICAgCi0g
ICAgICAgICAgICAgICAgLy8gSXQgKnByb2JhYmx5KiBtYWtlcyBzZW5zZSBmb3Igb3RoZXIgcGxh
dGZvcm1zIHRvIGVuYWJsZSB0aGlzLgotI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTTY0KQot
ICAgICAgICAgICAgICAgIHVzZUxMVk1GYXN0SVNlbCgpID0gdHJ1ZTsKLSNlbmRpZgotICAgICAg
ICAKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZh
cnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBhcHBsaWNhYmxlLgogICAgICAgICAgICAgLy8gVGhl
IGV2biB2YXIgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24gcHJlZml4ZWQgd2l0aAog
ICAgICAgICAgICAgLy8gIkpTQ18iLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMTk2NzQyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMjIgKzE4MCwxMSBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICBcCiAgICAgdihib29sLCB1c2VGVExK
SVQsIHRydWUsICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXAogICAg
IHYoYm9vbCwgdXNlRlRMVEJBQSwgdHJ1ZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlTExW
TUZhc3RJU2VsLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlTExWTVNtYWxsQ29k
ZU1vZGVsLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2Us
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxz
ZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwg
ZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmss
IGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29sLCBsbHZtU2ltcGxlT3B0LCB0cnVlLCBudWxs
cHRyKSBcCi0gICAgdih1bnNpZ25lZCwgbGx2bUJhY2tlbmRPcHRpbWl6YXRpb25MZXZlbCwgMiwg
bnVsbHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1PcHRpbWl6YXRpb25MZXZlbCwgMiwgbnVs
bHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1TaXplTGV2ZWwsIDAsIG51bGxwdHIpIFwKLSAg
ICB2KHVuc2lnbmVkLCBsbHZtTWF4U3RhY2tTaXplLCAxMjggKiBLQiwgbnVsbHB0cikgXAotICAg
IHYoYm9vbCwgbGx2bURpc2FsbG93QVZYLCB0cnVlLCBudWxscHRyKSBcCisgICAgdihib29sLCBi
M0Fsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
ZnRsQ3Jhc2hlcywgZmFsc2UsIG51bGxwdHIpIC8qIGZvb2wtcHJvb2Ygd2F5IG9mIGNoZWNraW5n
IHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDstKSAqL1wKLSAgICB2KGJvb2wsIGZ0bENy
YXNoZXNJZkNhbnRJbml0aWFsaXplTExWTSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBudWxscHRy
KSBcCi0gICAgdihib29sLCBhc3N1bWVBbGxSZWdzSW5GVExJQ0FyZUxpdmUsIGZhbHNlLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSwgOCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdXNlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlLCBudWxscHRy
KSBcCkBAIC0yMjAsOSArMjA5LDYgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgXAogICAgIHYoYm9vbCwgdXNlUHJvZmlsZXIsIGZhbHNlLCBudWxscHRyKSBcCiAgICAg
XAotICAgIHYoYm9vbCwgZm9yY2VVRGlzODZEaXNhc3NlbWJsZXIsIGZhbHNlLCBudWxscHRyKSBc
Ci0gICAgdihib29sLCBmb3JjZUxMVk1EaXNhc3NlbWJsZXIsIGZhbHNlLCBudWxscHRyKSBcCi0g
ICAgXAogICAgIHYoYm9vbCwgdXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRpb25zLCB0
cnVlLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgYnJlYWtPblRocm93LCBmYWxzZSwg
bnVsbHB0cikgXApAQCAtMzc4LDcgKzM2NCw2IEBAIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ugewog
ICAgIHYoYWx3YXlzRG9GdWxsQ29sbGVjdGlvbiwgdXNlR2VuZXJhdGlvbmFsR0MsIEludmVydGVk
T3B0aW9uKSBcCiAgICAgdihlbmFibGVPU1JFbnRyeVRvREZHLCB1c2VPU1JFbnRyeVRvREZHLCBT
YW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVPU1JFbnRyeVRvRlRMLCB1c2VPU1JFbnRyeVRvRlRM
LCBTYW1lT3B0aW9uKSBcCi0gICAgdihlbmFibGVMTFZNRmFzdElTZWwsIHVzZUxMVk1GYXN0SVNl
bCwgU2FtZU9wdGlvbikgXAogICAgIHYoZW5hYmxlQWNjZXNzSW5saW5pbmcsIHVzZUFjY2Vzc0lu
bGluaW5nLCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24sIHVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgU2FtZU9wdGlvbikgXAogICAg
IHYoZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdXNlUG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZywgU2FtZU9wdGlvbikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk2NzMx
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25MTFZNSVJHZW5l
cmF0b3IuaDoxOTY3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvcl9oCisjZGVmaW5lIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRv
cl9oCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpICYmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgorCisjZGVmaW5lIFVOVVNFRCAwCisKK25hbWVz
cGFjZSBKU0MgeworCit1c2luZyBGVEw6OkxCYXNpY0Jsb2NrOwordXNpbmcgRlRMOjpMVmFsdWU7
CisKK2NsYXNzIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBMVmFsdWUgRXhwcmVzc2lvbjsKKyAgICB0eXBlZGVmIGludCBTdGF0ZW1lbnQ7CisgICAg
dHlwZWRlZiBWZWN0b3I8TFZhbHVlPiBFeHByZXNzaW9uTGlzdDsKKyAgICBzdHJ1Y3QgTWVtb3J5
QWRkcmVzcyB7CisgICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQorICAgICAgICBNZW1v
cnlBZGRyZXNzKExWYWx1ZSBpbmRleCwgdWludDMyX3Qgb2Zmc2V0KQorICAgICAgICAgICAgOiBp
bmRleChpbmRleCkKKyAgICAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIExWYWx1ZSBpbmRleDsKKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owor
ICAgIH07CisgICAgdHlwZWRlZiBMQmFzaWNCbG9jayBKdW1wVGFyZ2V0OworICAgIGVudW0gY2xh
c3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKKworICAgIHZvaWQgc3RhcnRGdW5j
dGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9m
STMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMsIHVp
bnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRz
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMpOworICAg
ICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKKyAgICB9CisKKyAgICB2b2lk
IGVuZEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkU2V0TG9jYWwoV0FTTU9wS2luZCBvcEtp
bmQsIHVpbnQzMl90IGxvY2FsSW5kZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVO
VVNFRF9QQVJBTShvcEtpbmQpOworICAgICAgICBVTlVTRURfUEFSQU0obG9jYWxJbmRleCk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
KyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRTZXRHbG9i
YWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGdsb2JhbEluZGV4LCBMVmFsdWUgdmFsdWUs
IFdBU01UeXBlIHR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGdsb2JhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAg
IHZvaWQgYnVpbGRSZXR1cm4oTFZhbHVlIHZhbHVlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJu
VHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisg
ICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5U
eXBlKTsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVJMzIodWludDMyX3QgaW1t
ZWRpYXRlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4K
KyAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7
CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0IGltbWVkaWF0ZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0K
KworICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUY2NChkb3VibGUgaW1tZWRpYXRlKQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VE
X1BBUkFNKGltbWVkaWF0ZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAg
TFZhbHVlIGJ1aWxkR2V0TG9jYWwodWludDMyX3QgbG9jYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZEdldEdsb2Jh
bCh1aW50MzJfdCBnbG9iYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICAgICAgcmV0dXJuIFVO
VVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRDb252ZXJ0VHlwZShMVmFsdWUgdmFsdWUs
IFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBlIHRvVHlwZSwg
V0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAg
ICAgICBVTlVTRURfUEFSQU0oZnJvbVR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0odG9UeXBl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOworICAgICAgICByZXR1cm4gVU5V
U0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZExvYWQoY29uc3QgTWVtb3J5QWRkcmVzcyYg
bWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlLCBXQVNNTWVt
b3J5VHlwZSBtZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uIGNvbnZlcnNpb24pCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBV
TlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNz
aW9uVHlwZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGNvbnZlcnNpb24pOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwor
ICAgIExWYWx1ZSBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBNZW1vcnlBZGRy
ZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdB
U01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShvcEtp
bmQpOworICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShleHByZXNzaW9uVHlwZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsK
KyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRVbmFyeUkzMihMVmFsdWUgdmFsdWUsIFdBU01PcEV4
cHJlc3Npb25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWls
ZFVuYXJ5RjMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkVW5hcnlGNjQoTFZhbHVlIHZhbHVlLCBX
QVNNT3BFeHByZXNzaW9uRjY0IG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFs
dWUgYnVpbGRCaW5hcnlJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVz
c2lvbkkzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJp
Z2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsK
KyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRCaW5hcnlGMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRCaW5hcnlGNjQoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUg
YnVpbGRSZWxhdGlvbmFsSTMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJl
c3Npb25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7
CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25hbEYzMihMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZFJlbGF0aW9u
YWxGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgYnVpbGRNaW5Pck1heEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURf
UEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4g
VU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4RjY0KExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGVm
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShv
cCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkQ2Fs
bEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBh
cmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Np
b25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25JbmRleCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOworICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0
dXJlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4g
VU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZENhbGxJbmRpcmVjdCh1aW50MzJfdCBm
dW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCBMVmFsdWUgaW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFs
dWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25Qb2ludGVyVGFi
bGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShhcmd1bWVudExpc3QpOworICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOwor
ICAgIH0KKworICAgIExWYWx1ZSBidWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBv
cnRJbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNF
RF9QQVJBTShmdW5jdGlvbkltcG9ydEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3Vt
ZW50TGlzdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOworICAgICAgICBVTlVT
RURfUEFSQU0ocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisg
ICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChWZWN0b3I8TFZhbHVlPiYgZXhwcmVzc2lvbkxp
c3QsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uTGlzdCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBkaXNjYXJkKExWYWx1ZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBsaW5rVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQganVtcFRvVGFyZ2V0KExC
YXNpY0Jsb2NrIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZv
aWQganVtcFRvVGFyZ2V0SWYoSnVtcENvbmRpdGlvbiwgTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9j
ayB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0TG9vcCgpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKworICAgIHZvaWQgZW5kTG9vcCgp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0K
KworICAgIHZvaWQgc3RhcnRTd2l0Y2goKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICB2b2lkIGVuZFN3aXRjaCgpCisgICAgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKworICAgIHZv
aWQgc3RhcnRMYWJlbCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgIH0KKworICAgIHZvaWQgZW5kTGFiZWwoKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICBMQmFzaWNCbG9jayBi
cmVha1RhcmdldCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVlVGFyZ2V0KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTEJhc2ljQmxvY2sg
YnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4KQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxhYmVs
SW5kZXgpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVlTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShs
YWJlbEluZGV4KTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICB2b2lkIGJ1
aWxkU3dpdGNoKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlcywgY29u
c3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgdGFyZ2V0cywgTEJhc2ljQmxvY2sgZGVmYXVsdFRhcmdl
dCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAg
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShjYXNlcyk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlZmF1
bHRUYXJnZXQpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjZW5kaWYgLy8gV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJh
dG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvcl9oCi0jZGVmaW5lIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRv
cl9oCisjaWZuZGVmIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAorI2RlZmluZSBXQVNNRnVu
Y3Rpb25CM0lSR2VuZXJhdG9yX2gKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgRU5BQkxF
KEZUTF9KSVQpCiAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB1c2luZyBGVEw6
OkxCYXNpY0Jsb2NrOwogdXNpbmcgRlRMOjpMVmFsdWU7CiAKLWNsYXNzIFdBU01GdW5jdGlvbkxM
Vk1JUkdlbmVyYXRvciB7CitjbGFzcyBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIExWYWx1ZSBFeHByZXNzaW9uOwogICAgIHR5cGVkZWYgaW50IFN0YXRl
bWVudDsKQEAgLTM5MSw0ICszOTEsNCBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3JfaAorI2Vu
ZGlmIC8vIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNN
RnVuY3Rpb25MTFZNSVJHZW5lcmF0b3JfaAotI2RlZmluZSBXQVNNRnVuY3Rpb25MTFZNSVJHZW5l
cmF0b3JfaAotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKSAmJiBFTkFCTEUoRlRMX0pJVCkKLQot
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLQotI2RlZmluZSBVTlVTRUQgMAotCi1u
YW1lc3BhY2UgSlNDIHsKLQotdXNpbmcgRlRMOjpMQmFzaWNCbG9jazsKLXVzaW5nIEZUTDo6TFZh
bHVlOwotCi1jbGFzcyBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IgewotcHVibGljOgotICAg
IHR5cGVkZWYgTFZhbHVlIEV4cHJlc3Npb247Ci0gICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50Owot
ICAgIHR5cGVkZWYgVmVjdG9yPExWYWx1ZT4gRXhwcmVzc2lvbkxpc3Q7Ci0gICAgc3RydWN0IE1l
bW9yeUFkZHJlc3MgewotICAgICAgICBNZW1vcnlBZGRyZXNzKHZvaWQqKSB7IH0KLSAgICAgICAg
TWVtb3J5QWRkcmVzcyhMVmFsdWUgaW5kZXgsIHVpbnQzMl90IG9mZnNldCkKLSAgICAgICAgICAg
IDogaW5kZXgoaW5kZXgpCi0gICAgICAgICAgICAsIG9mZnNldChvZmZzZXQpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICBMVmFsdWUgaW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNl
dDsKLSAgICB9OwotICAgIHR5cGVkZWYgTEJhc2ljQmxvY2sgSnVtcFRhcmdldDsKLSAgICBlbnVt
IGNsYXNzIEp1bXBDb25kaXRpb24geyBaZXJvLCBOb25aZXJvIH07Ci0KLSAgICB2b2lkIHN0YXJ0
RnVuY3Rpb24oY29uc3QgVmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzLCB1aW50MzJfdCBudW1i
ZXJPZkkzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJfdCBudW1iZXJPZkYzMkxvY2FsVmFyaWFibGVz
LCB1aW50MzJfdCBudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3Vt
ZW50cyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkkzMkxvY2FsVmFyaWFibGVzKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMpOwotICAgICAg
ICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGNjRMb2NhbFZhcmlhYmxlcyk7Ci0gICAgfQotCi0gICAg
dm9pZCBlbmRGdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFNldExvY2FsKFdBU01PcEtpbmQg
b3BLaW5kLCB1aW50MzJfdCBsb2NhbEluZGV4LCBMVmFsdWUgdmFsdWUsIFdBU01UeXBlIHR5cGUp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAg
ICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxvY2FsSW5kZXgp
OwotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0odHlw
ZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkU2V0
R2xvYmFsKFdBU01PcEtpbmQgb3BLaW5kLCB1aW50MzJfdCBnbG9iYWxJbmRleCwgTFZhbHVlIHZh
bHVlLCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wS2luZCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICB2b2lkIGJ1aWxkUmV0dXJuKExWYWx1ZSB2YWx1ZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJl
dHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmV0
dXJuVHlwZSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlSTMyKHVpbnQzMl90
IGltbWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUYzMihmbG9hdCBpbW1lZGlh
dGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVGNjQoZG91YmxlIGltbWVkaWF0ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVO
VVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQot
ICAgIExWYWx1ZSBidWlsZEdldExvY2FsKHVpbnQzMl90IGxvY2FsSW5kZXgsIFdBU01UeXBlIHR5
cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0obG9jYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBl
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRHZXRH
bG9iYWwodWludDMyX3QgZ2xvYmFsSW5kZXgsIFdBU01UeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQ29udmVydFR5cGUoTFZhbHVlIHZh
bHVlLCBXQVNNRXhwcmVzc2lvblR5cGUgZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5
cGUsIFdBU01UeXBlQ29udmVyc2lvbiBjb252ZXJzaW9uKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGZyb21UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRv
VHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShjb252ZXJzaW9uKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRMb2FkKGNvbnN0IE1lbW9yeUFkZHJl
c3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FT
TU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9u
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAg
ICAgVU5VU0VEX1BBUkFNKG1lbW9yeUFkZHJlc3MpOwotICAgICAgICBVTlVTRURfUEFSQU0oZXhw
cmVzc2lvblR5cGUpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5VHlwZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShjb252ZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgYnVpbGRTdG9yZShXQVNNT3BLaW5kIG9wS2luZCwgY29uc3QgTWVtb3J5
QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBl
LCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
b3BLaW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1lbW9yeUFkZHJlc3MpOwotICAgICAgICBV
TlVTRURfUEFSQU0oZXhwcmVzc2lvblR5cGUpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5
VHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkVW5hcnlJMzIoTFZhbHVlIHZhbHVlLCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
YnVpbGRVbmFyeUYzMihMVmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25GMzIgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFVuYXJ5RjY0KExWYWx1ZSB2YWx1
ZSwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGJ1aWxkQmluYXJ5STMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4
cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQmluYXJ5RjMyKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0g
ICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQmluYXJ5RjY0
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGJ1aWxkUmVsYXRpb25hbEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFJlbGF0aW9uYWxGMzIoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9w
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRSZWxh
dGlvbmFsRjY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIg
b3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQot
Ci0gICAgTFZhbHVlIGJ1aWxkTWluT3JNYXhJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwg
V0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1heEY2NChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWls
ZENhbGxJbnRlcm5hbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBWZWN0b3I8TFZhbHVl
PiYgYXJndW1lbnRMaXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHBy
ZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uSW5kZXgpOwotICAg
ICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRMaXN0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNp
Z25hdHVyZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDYWxsSW5kaXJlY3QodWludDMy
X3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgTFZhbHVlIGluZGV4LCBjb25zdCBWZWN0b3I8
TFZhbHVlPiYgYXJndW1lbnRMaXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdB
U01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uUG9pbnRl
clRhYmxlSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgICAgICBVTlVT
RURfUEFSQU0oYXJndW1lbnRMaXN0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNpZ25hdHVyZSk7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDYWxsSW1wb3J0KHVpbnQzMl90IGZ1bmN0aW9u
SW1wb3J0SW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdB
U01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBV
TlVTRURfUEFSQU0oZnVuY3Rpb25JbXBvcnRJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShh
cmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kRXhwcmVzc2lvbkxpc3QoVmVjdG9yPExWYWx1ZT4mIGV4cHJlc3Np
b25MaXN0LCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvbkxpc3QpOwotICAg
ICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgZGlzY2FyZChMVmFs
dWUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgbGlua1RhcmdldChMQmFzaWNCbG9jayB0YXJn
ZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGp1bXBUb1Rhcmdl
dChMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGp1bXBUb1RhcmdldElmKEp1bXBDb25kaXRpb24sIExWYWx1ZSB2YWx1ZSwgTEJhc2lj
QmxvY2sgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydExvb3AoKQotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZExv
b3AoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAg
ICB9Ci0KLSAgICB2b2lkIHN0YXJ0U3dpdGNoKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgdm9pZCBlbmRTd2l0Y2goKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAg
ICB2b2lkIHN0YXJ0TGFiZWwoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZExhYmVsKCkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgTEJhc2ljQmxv
Y2sgYnJlYWtUYXJnZXQoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMQmFzaWNCbG9j
ayBjb250aW51ZVRhcmdldCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExCYXNpY0Js
b2NrIGJyZWFrTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShs
YWJlbEluZGV4KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMQmFzaWNC
bG9jayBjb250aW51ZUxhYmVsVGFyZ2V0KHVpbnQzMl90IGxhYmVsSW5kZXgpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFS
QU0obGFiZWxJbmRleCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBidWlsZFN3aXRjaChMVmFsdWUgdmFsdWUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZXMs
IGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mIHRhcmdldHMsIExCYXNpY0Jsb2NrIGRlZmF1bHRU
YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgot
ICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oY2FzZXMp
OwotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0cyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShk
ZWZhdWx0VGFyZ2V0KTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2VuZGlmIC8vIFdBU01GdW5jdGlvbkxMVk1JUkdl
bmVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvblBhcnNlci5jcHAJKHJldmlzaW9uIDE5Njc0MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV0FT
TU1vZHVsZS5oIgogI2luY2x1ZGUgIldBU01GdW5jdGlvbkNvbXBpbGVyLmgiCi0jaW5jbHVkZSAi
V0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uQjNJ
UkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCIKIAog
I2RlZmluZSBQUk9QQUdBVEVfRVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxs
KCkpIHJldHVybiAwOyB9IHdoaWxlICgwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271633</attachid>
            <date>2016-02-17 22:16:09 -0800</date>
            <delta_ts>2016-02-17 22:18:19 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>976835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSByZW1haW5pbmcgcmVmZXJlbmNlcyB0byBMTFZNLCBhbmQgbWFrZSBzdXJlIGNvbW1l
bnRzIHJlZmVyIHRvIHRoZSBiYWNrZW5kIGFzICJCMyIgbm90ICJMTFZNIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBkaWQgYSBncmVwIC1pIGxsdm0g
b2YgYWxsIG9mIG91ciBjb2RlIGFuZCBkaWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2gg
b2NjdXJlbmNlOgorCisgICAgICAgIC0gUmVuYW1lZCBpdCB0byBCMy4gVGhpcyBpcyBhcHByb3By
aWF0ZSB3aGVuIHdlIHdlcmUgdXNpbmcgIkxMVk0iIHRvIG1lYW4gInRoZSBGVEwKKyAgICAgICAg
ICBiYWNrZW5kIi4KKworICAgICAgICAtIFJlbW92ZWQgdGhlIHJlZmVyZW5jZSBiZWNhdXNlIEkg
Zm91bmQgaXQgdG8gYmUgZGVhZC4gSW4gc29tZSBjYXNlcyBpdCB3YXMgYSBkZWFkCisgICAgICAg
ICAgY29tbWVudDogaXQgd2FzIHRlbGxpbmcgdXMgdGhpbmdzIGFib3V0IHdoYXQgTExWTSBkaWQg
YW5kIHRoYXQncyBqdXN0IG5vdCByZWxldmFudAorICAgICAgICAgIGFueW1vcmUuIEluIG90aGVy
IGNhc2VzIGl0IHdhcyBkZWFkIGNvZGUgdGhhdCBJIGZvcmdvdCB0byBkZWxldGUgaW4gYSBwcmV2
aW91cyBwYXRjaC4KKworICAgICAgICAtIEVkaXRlZCB0aGUgY29tbWVudCBpbiBzb21lIHNtYXJ0
IHdheS4gVGhlcmUgd2VyZSBjb21tZW50cyB0YWxraW5nIGFib3V0IHdoYXQgTExWTSBkaWQKKyAg
ICAgICAgICB0aGF0IHdlcmUgc3RpbGwgb2YgaW50ZXJlc3QuIEluIHNvbWUgY2FzZXMsIEkgYWRk
ZWQgYSBGSVhNRSB0byBjb25zaWRlciBjaGFuZ2luZyB0aGUKKyAgICAgICAgICBjb2RlIGJlbG93
IHRoZSBjb21tZW50IG9uIHRoZSBncm91bmRzIHRoYXQgaXQgd2FzIHdyaXR0ZW4gaW4gYSB3ZWly
ZCB3YXkgdG8gcGxhY2F0ZQorICAgICAgICAgIExMVk0gYW5kIHNvIHdlIGNhbiBkbyBpdCBiZXR0
ZXIgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxl
VGltZVN0YXRzKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
VW5pZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpmdGxV
bnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Okxvd2Vy
REZHVG9CMyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0
aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6aXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6dW5ib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6bG93ZXJERkdUb0IzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhOZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlT3ZlcnJpZGVzSGFzSW5z
dGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06
OmlzQm9vbGVhbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6dW5ib3hCb29sZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpsb3dlckRGR1RvTExWTSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmguCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFdlaWdodC5oOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdo
dDo6ZnJlcXVlbmN5Q2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdodDo6aW52ZXJzZSk6
CisgICAgICAgIChKU0M6OkZUTDo6V2VpZ2h0OjpzY2FsZVRvVG90YWwpOiBEZWxldGVkLgorICAg
ICAgICAqIGZ0bC9GVExXZWlnaHRlZFRhcmdldC5oOgorICAgICAgICAoSlNDOjpGVEw6OnJhcmVs
eSk6CisgICAgICAgIChKU0M6OkZUTDo6dW5zdXJlKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbHZtOiBSZW1v
dmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
bGx2bS9saWJyYXJ5OiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9MTFZNVHJhcENh
bGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L2xpYmxsdm1Gb3JKU0Mu
dmVyc2lvbjogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oLgorICAgICAgICAq
IHdhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorCiAyMDE2LTAyLTE3ICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFSTTY0OiBTdXBwb3J0
IHRoZSBpbW1lZGlhdGUgZm9ybWF0IHVzZWQgZm9yIGJpdCBvcGVyYXRpb25zIGluIEFpcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk2NzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE2LDcgKzEwMTYsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExMYXp5
U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9j
YXRpb24uY3BwCi0gICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKKyAgICAgICAgZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAg
ICBmdGwvRlRMT1NSRXhpdC5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTGludXguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZN
TGludXguY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2
bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFs
aXplTExWTS5oIgotCi0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk1Q
T1NJWC5oIgotCi0jaWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQ
dHIuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVuY3Rp
b24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24oYm9vbCB2ZXJib3NlKQotewotI2lmIFBMQVRG
T1JNKEdUSykKLSNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgTExWTUluaXRpYWxpemVy
RnVuY3Rpb24gZnVuY3Rpb24gPSBnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvblBPU0lYKCJsaWJs
bHZtRm9ySlNDLnNvIiwgdmVyYm9zZSk7Ci0gICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICByZXR1
cm4gZnVuY3Rpb247Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgY2hhciogbGlibGx2bUZvckpT
Q0luc3RhbGxlZFBhdGggPSBMSUJESVIgR19ESVJfU0VQQVJBVE9SX1MgImphdmFzY3JpcHRjb3Jl
Z3RrLSIgV0VCS0lUR1RLX0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9TRVBBUkFUT1JfUzsKLSAg
ICBHVW5pcXVlUHRyPGNoYXI+IGxpYmxsdm1Gb3JKU0NGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1l
KGxpYmxsdm1Gb3JKU0NJbnN0YWxsZWRQYXRoLCAibGlibGx2bUZvckpTQy5zbyIsIG51bGxwdHIp
KTsKLSAgICByZXR1cm4gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChsaWJsbHZtRm9y
SlNDRmlsZW5hbWUuZ2V0KCksIHZlcmJvc2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZ2V0TExWTUlu
aXRpYWxpemVyRnVuY3Rpb25QT1NJWCgibGlibGx2bUZvckpTQy5zbyIsIHZlcmJvc2UpOwotI2Vu
ZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1XaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNw
cAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlh
bGl6ZUxMVk1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNLmgiCi0KLSNpbmNsdWRlICJMTFZNQVBJ
LmgiCi0jaW5jbHVkZSA8V2luZG93cy5oPgotCi0jaWYgSEFWRShMTFZNKQotCi1uYW1lc3BhY2Ug
SlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rp
b24oYm9vbCAvKiB2ZXJib3NlICovKQotewotICAgIGNvbnN0IHdjaGFyX3QqIGxpYnJhcnlOYW1l
ID0gTCJsaWJsbHZtRm9ySlNDLmRsbCI7Ci0KLSAgICBITU9EVUxFIGxpYnJhcnkgPSA6OkxvYWRM
aWJyYXJ5KGxpYnJhcnlOYW1lKTsKLQotICAgIGlmICghbGlicmFyeSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0gImluaXRpYWxpemVBbmRH
ZXRKU0NMTFZNQVBJIjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PExMVk1Jbml0aWFsaXplckZ1
bmN0aW9uPihHZXRQcm9jQWRkcmVzcyhsaWJyYXJ5LCBzeW1ib2xOYW1lKSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgJKHJl
dmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExW
TVRyYXBDYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNVHJhcENh
bGxiYWNrX2gKLSNkZWZpbmUgTExWTVRyYXBDYWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1leHRlcm4gdm9pZCAoKmdfbGx2bVRyYXBDYWxsYmFjaykoY29uc3QgY2hh
ciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47Ci0KLSNlbmRpZiAvLyBMTFZNVHJhcENhbGxiYWNr
X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9y
SlNDLnZlcnNpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGli
cmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24JKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotTExWTUZPUkpTQyB7Ci0gICAgZ2xvYmFsOiBpbml0aWFs
aXplQW5kR2V0SlNDTExWTUFQSTsKLSAgICBsb2NhbDogKjsKLX07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTczMiw4ICs3MzIsOCBAQAogCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q29tcGlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBpbGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEEwRDE3MDUxM0RCMDBCQjcy
MkMgLyogRlRMSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklUQ29kZS5jcHAgKi87
IH07CiAJCTBGRUEwQTBFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMzE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMSklUQ29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovOyB9Owot
CQkwRkVBMEExMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA1MTcwNTEzREIw
MEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvQjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi87
IH07CisJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA1MTcwNTEz
REIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVBMEExMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTA3MTcwNTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTE2MTcwNkJCOTAwMEJCNzIyQyAv
KiBGVExTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVBMEExNTE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovOyB9OwogCQkw
RkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE3MTcwOEIwMDcwMEJC
NzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICovOyB9OwpAQCAtMTI5Niw3ICsxMjk2LDcgQEAK
IAkJN0IzOUY3NkUxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCMzlGNzZBMUI2MkRFMjIw
MDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0IzOUY3NzAxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01S
ZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdC
MzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0IzOUY3NzIxQjYzNTc0RDAwMzYwRkI0
IC8qIFdBU01SZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovOyB9
OwotCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Qjgz
MjlCRTFCQjIxRkQxMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0I4MzI5QkYx
QkIyMUZFMzAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0
OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0I5OEQxMzYxQjYwQ0Q1RjAwMjNCMUE0IC8q
IEpTV0FTTU1vZHVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3Qjk4RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLzsg
fTsKIAkJN0I5OEQxMzcxQjYwQ0Q2MjAwMjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I5OEQxMzUxQjYwQ0Q1QTAw
MjNCMUE0IC8qIEpTV0FTTU1vZHVsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QkM1NDdE
MjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yODg2LDggKzI4ODYsOCBAQAogCQkwRkVBMEEw
MTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBGVExDb21waWxlLmg7IHBhdGggPSBmdGwvRlRMQ29tcGlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwMjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklU
Q29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKSVRDb2Rl
LmNwcDsgcGF0aCA9IGZ0bC9GVExKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFQTBBMDMxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJVENvZGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSklUQ29kZS5oOyBwYXRoID0gZnRsL0ZUTEpJVENv
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3
MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTExvd2VyREZHVG9MTFZNLmNwcDsgcGF0aCA9IGZ0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUEwQTA1MTcwNTEzREIw
MEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGVExMb3dlckRGR1RvTExWTS5oOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9MTFZN
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIy
QyAvKiBGVExMb3dlckRGR1RvQjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRlRMTG93ZXJERkdUb0IzLmNwcDsgcGF0aCA9IGZ0bC9GVExMb3dlckRGR1RvQjMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMTG93ZXJERkdUb0IzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TExvd2VyREZHVG9CMy5oOyBwYXRoID0gZnRsL0ZUTExvd2VyREZHVG9CMy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwNzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMU3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3RhdGUuaDsgcGF0aCA9IGZ0
bC9GVExTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEExNTE3MDZC
QjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMU3RhdGUuY3BwOyBwYXRoID0gZnRsL0ZUTFN0YXRlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExBYnN0
cmFjdEhlYXAuY3BwOyBwYXRoID0gZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0zNDQ5LDcgKzM0NDksNyBAQAogCQk3QjM5Rjc2QTFCNjJERTIy
MDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXQVNNTW9kdWxlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdCMzlGNzZDMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNUmVhZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01SZWFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0IzOUY3NzExQjYzNTc0QjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0FTTVJlYWRlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rp
b25MTFZNSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FT
TUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0I5OEQxMzQxQjYwQ0Q1QTAwMjNC
MUE0IC8qIEpTV0FTTU1vZHVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dBU01Nb2R1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjk4
RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNRm9ybWF0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC00NTU1LDggKzQ1NTUsOCBAQAogCQkJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRB
NSAvKiBGVExMaW5rLmggKi8sCiAJCQkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExv
Y2F0aW9uLmNwcCAqLywKIAkJCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uaCAqLywKLQkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xM
Vk0uY3BwICovLAotCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5oICovLAorCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
QjMuY3BwICovLAorCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
QjMuaCAqLywKIAkJCQlBN0Q4OUQwMTE3QTBCOTA0MDA3NzNBRDggLyogRlRMTG93ZXJlZE5vZGVW
YWx1ZS5oICovLAogCQkJCTBGMkI5Q0YyMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCAqLywKIAkJCQkwRjJCOUNGMzE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5o
ICovLApAQCAtNTM3NCw3ICs1Mzc0LDcgQEAKIAkJCQk3QjAyNDc1MjFCODY4MkQ1MDA1NDI0NDAg
LyogV0FTTUNvbnN0YW50cy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBX
QVNNRm9ybWF0LmggKi8sCiAJCQkJN0IyRTAxMEQxQjk3QUE1ODAwRUY1RDVDIC8qIFdBU01GdW5j
dGlvbkNvbXBpbGVyLmggKi8sCi0JCQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01G
dW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oICovLAorCQkJCTdCODMyOUJFMUJCMjFGRDEwMDY0OUE2
RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJN0IwMjQ3NTMxQjg2ODJE
NTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5jcHAgKi8sCiAJCQkJN0IwMjQ3NTQxQjg2
ODJENTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovLAogCQkJCTdCMDI0NzU4MUI4
NjhFQUUwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggKi8sCkBAIC03MzU0
LDcgKzczNTQsNyBAQAogCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xv
d1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUg
LyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0
IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVBMEExMDE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUEwQTEw
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDg5RDAyMTdBMEI5MDQwMDc3M0FEOCAvKiBGVExMb3dlcmVkTm9kZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzMzhFMTAxQkYwMjc2QzAwMTNDODhGIC8qIEIzTW92ZUNv
bnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03OTkxLDcgKzc5OTEsNyBAQAogCQkJCTdCMDI0
NzU1MUI4NjgyREQwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3QkM1NDdEMzFCNjk1OUExMDA5NTlCNTggLyogV0FTTUZvcm1hdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0IyRTAxMEUxQjk3QUE2OTAwRUY1RDVDIC8qIFdBU01GdW5jdGlvbkNvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0
aW9uTExWTUlSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QjgzMjlCRjFCQjIxRkUz
MDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJN0IwMjQ3NTcxQjg2ODJFNDAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblBhcnNlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2QjhBREQxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLApAQCAtODg4MCw3ICs4ODgwLDcg
QEAKIAkJCQkwRkI0RkI3MzFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
OUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOCw3ICs0MjgsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogRm9yIENsb25lZEFyZ3VtZW50cywgd2Ugd291bGQgaGF2
ZSBhbHJlYWR5IGRvbmUgYSBzZXBhcmF0ZSBib3VuZHMgY2hlY2suCiAgICAgICAgICAgICAgICAg
ICAgIC8vIFRoaXMgY29kZSB3aWxsIGNhdXNlIHVzIHRvIGhhdmUgdHdvIGJvdW5kcyBjaGVja3Mg
LSB0aGUgb3JpZ2luYWwgb25lIHRoYXQgd2UKICAgICAgICAgICAgICAgICAgICAgLy8gYWxyZWFk
eSBmYWN0b3JlZCBvdXQgaW4gU1NBTG93ZXJpbmdQaGFzZSwgYW5kIHRoZSBuZXcgb25lIHdlIGlu
c2VydCBoZXJlLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICAgICAvLyBvZnRlbiBpbXBsaWNp
dGx5IHBhcnQgb2YgR2V0TXlBcmd1bWVudEJ5VmFsLiBMTFZNIHdpbGwgcHJvYmFibHkgZWxpbWlu
YXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBvZnRlbiBpbXBsaWNpdGx5IHBhcnQgb2Yg
R2V0TXlBcmd1bWVudEJ5VmFsLiBCMyB3aWxsIHByb2JhYmx5IGVsaW1pbmF0ZSB0aGUKICAgICAg
ICAgICAgICAgICAgICAgLy8gc2Vjb25kIGJvdW5kcyBjaGVjaywgYnV0IHN0aWxsIC0gdGhhdCdz
IGp1c3Qgc2lsbHkuCiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMwNzYKICAgICAgICAgICAgICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJp
bGl0eUFuYWx5c2lzUGhhc2UuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgR3JhcGg7CiAKIC8vIENvbXB1dGVzIEJhc2ljQmxv
Y2s6OnNzYS0+YXZhaWxhYmlsdGl5QXRIZWFkL1RhaWwuIFRoaXMgaXMgYSBmb3J3YXJkIGZsb3cg
dHlwZSBpbmZlcmVuY2UKIC8vIG92ZXIgTW92SGludHMgYW5kIFNldExvY2Fscy4gVGhpcyBhbmFs
eXNpcyBpcyBydW4gZGlyZWN0bHkgYnkgdGhlIFBsYW4gZm9yIHByZXBhcmluZyBmb3IKLS8vIGxv
d2VyaW5nIHRvIExMVk0gSVIsIGJ1dCBpdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgdXRpbGl0eS4g
Tm90ZSB0aGF0IGlmIHlvdSBydW4gaXQgYmVmb3JlCisvLyBsb3dlcmluZyB0byBCMyBJUiwgYnV0
IGl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1biBp
dCBiZWZvcmUKIC8vIHN0YWNrIGxheW91dCwgYWxsIG9mIHRoZSBmbHVzaCBhdmFpbGFiaWxpdHkg
d2lsbCBvbWl0IHRoZSB2aXJ0dWFsIHJlZ2lzdGVyIC0gYnV0IGl0IHdpbGwKIC8vIHRlbGwgeW91
IHRoZSBmb3JtYXQuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQAogI2luY2x1ZGUgIkZUTENvbXBpbGUu
aCIKICNpbmNsdWRlICJGVExGYWlsLmgiCiAjaW5jbHVkZSAiRlRMTGluay5oIgotI2luY2x1ZGUg
IkZUTExvd2VyREZHVG9MTFZNLmgiCisjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0IzLmgiCiAjaW5j
bHVkZSAiRlRMU3RhdGUuaCIKICNlbmRpZgogCkBAIC05OCw3ICs5OCw3IEBAIG5hbWVzcGFjZSB7
CiBkb3VibGUgdG90YWxERkdDb21waWxlVGltZTsKIGRvdWJsZSB0b3RhbEZUTENvbXBpbGVUaW1l
OwogZG91YmxlIHRvdGFsRlRMREZHQ29tcGlsZVRpbWU7Ci1kb3VibGUgdG90YWxGVExMTFZNQ29t
cGlsZVRpbWU7Citkb3VibGUgdG90YWxGVExCM0NvbXBpbGVUaW1lOwogCiB2b2lkIGR1bXBBbmRW
ZXJpZnlHcmFwaChHcmFwaCYgZ3JhcGgsIGNvbnN0IGNoYXIqIHRleHQsIGJvb2wgZm9yY2VEdW1w
ID0gZmFsc2UpCiB7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICBpZiAoaXNGVEwobW9kZSkpIHsKICAgICAgICAgICAg
IHRvdGFsRlRMQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBiZWZvcmU7CiAgICAgICAgICAgICB0b3Rh
bEZUTERGR0NvbXBpbGVUaW1lICs9IG1fdGltZUJlZm9yZUZUTCAtIGJlZm9yZTsKLSAgICAgICAg
ICAgIHRvdGFsRlRMTExWTUNvbXBpbGVUaW1lICs9IGFmdGVyIC0gbV90aW1lQmVmb3JlRlRMOwor
ICAgICAgICAgICAgdG90YWxGVExCM0NvbXBpbGVUaW1lICs9IGFmdGVyIC0gbV90aW1lQmVmb3Jl
RlRMOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHRvdGFsREZHQ29tcGlsZVRpbWUgKz0g
YWZ0ZXIgLSBiZWZvcmU7CiAgICAgfQpAQCAtNDYzLDEyICs0NjMsMTIgQEAgUGxhbjo6Q29tcGls
YXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgICAgICAgICAgcmV0dXJuIENhbmNlbFBh
dGg7CiAKICAgICAgICAgRlRMOjpTdGF0ZSBzdGF0ZShkZmcpOwotICAgICAgICBGVEw6Omxvd2Vy
REZHVG9MTFZNKHN0YXRlKTsKKyAgICAgICAgRlRMOjpsb3dlckRGR1RvQjMoc3RhdGUpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGNvbXB1dGVDb21waWxlVGltZXMoKSkKICAgICAgICAgICAgIG1f
dGltZUJlZm9yZUZUTCA9IG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZU1TKCk7CiAgICAgICAg
IAotICAgICAgICBpZiAoT3B0aW9uczo6bGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7
CisgICAgICAgIGlmIChPcHRpb25zOjpiM0Fsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSgpKSB7CiAg
ICAgICAgICAgICBGVEw6OmZhaWwoc3RhdGUpOwogICAgICAgICAgICAgcmV0dXJuIEZUTFBhdGg7
CiAgICAgICAgIH0KQEAgLTQ3Nyw3ICs0NzcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxh
bjo6Y29tcGlsZUluVGhyCiAgICAgICAgIGlmIChzYWZlcG9pbnRSZXN1bHQuZGlkR2V0Q2FuY2Vs
bGVkKCkpCiAgICAgICAgICAgICByZXR1cm4gQ2FuY2VsUGF0aDsKICAgICAgICAgCi0gICAgICAg
IGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNCZWZvcmVMaW5rKCkpIHsKKyAgICAgICAgaWYg
KE9wdGlvbnM6OmIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rKCkpIHsKICAgICAgICAgICAgIEZUTDo6
ZmFpbChzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQpAQCAt
NjY2LDcgKzY2Niw3IEBAIEhhc2hNYXA8Q1N0cmluZywgZG91YmxlPiBQbGFuOjpjb21waWxlVGkK
ICAgICAgICAgcmVzdWx0LmFkZCgiREZHIENvbXBpbGUgVGltZSIsIHRvdGFsREZHQ29tcGlsZVRp
bWUpOwogICAgICAgICByZXN1bHQuYWRkKCJGVEwgQ29tcGlsZSBUaW1lIiwgdG90YWxGVExDb21w
aWxlVGltZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCAoREZHKSBDb21waWxlIFRpbWUiLCB0
b3RhbEZUTERGR0NvbXBpbGVUaW1lKTsKLSAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChCMykgQ29t
cGlsZSBUaW1lIiwgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUpOworICAgICAgICByZXN1bHQuYWRk
KCJGVEwgKEIzKSBDb21waWxlIFRpbWUiLCB0b3RhbEZUTEIzQ29tcGlsZVRpbWUpOwogICAgIH0K
ICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZm9y
IHN1bmtlbiBQdXRTdGFja3MgaW4gdGhlIHByZXNlbmNlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wg
ZmxvdyBtZXJnZXMsIGFuZCB3aGVyZSB0aGUKICAgICAgICAgLy8gdmFsdWUgYmVpbmcgUHV0U3Rh
Y2snZCBpcyBhbHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29kZS4gV2UgY291bGQgd29y
ayBhcm91bmQgdGhpcwogICAgICAgICAvLyBieSBkb2luZyB0aGUgc2lua2luZyBvdmVyIENQUywg
b3IgbWF5YmUganVzdCBieSBkb2luZyByZWFsbHkgc21hcnQgaG9pc3RpbmcuIEl0J3MgYWxzbwot
ICAgICAgICAvLyBwb3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNhbiBiZSBk
ZWR1cGxpY2F0ZWQgYnkgTExWTS4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQorICAgICAgICAvLyBw
b3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNhbiBiZSBkZWR1cGxpY2F0ZWQg
YnkgQjMuIEl0IHdvdWxkIGJlIGJlc3QgaWYgd2UKICAgICAgICAgLy8gY291bGQgb2JzZXJ2ZSB0
aGF0IHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgZ3JhcGggaW4gcGxhY2UgdGhhdCBkb2VzIHdoYXQg
d2Ugd2FudC4gSW4KICAgICAgICAgLy8gcHJpbmNpcGxlIGlmIHdlIGhhdmUgYSByZXF1ZXN0IHRv
IHBsYWNlIGEgUGhpIGF0IGEgcGFydGljdWxhciBwbGFjZSwgd2UgY291bGQganVzdCBjaGVjawog
ICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIHRoYXQgZG9lcyB3aGF0IHdlIHdh
bnQuIEJlY2F1c2UgUHV0U3RhY2tTaW5raW5nUGhhc2UgcnVucyBqdXN0CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmgJKHJldmlz
aW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDEyICs4MSw2IEBAIGNsYXNzIEdyYXBoOwog
Ly8gICB0aGUgY2F2ZWF0IHRoYXQgdGhlIFBoaSBwcmVkZWNlc3NvciBibG9jayBsaXN0cyB3b3Vs
ZCBoYXZlIHRvIGJlCiAvLyAgIHVwZGF0ZWQpLgogLy8KLS8vICAgVGhlIGVhc2llc3Qgd2F5IHRv
IGNvbnZlcnQgZnJvbSB0aGlzIFNTQSBmb3JtIGludG8gYSBkaWZmZXJlbnQgU1NBCi0vLyAgIGZv
cm0gaXMgdG8gcmVkbyBTU0EgY29udmVyc2lvbiBmb3IgUGhpIGZ1bmN0aW9ucy4gVGhhdCBpcywg
dHJlYXQgZWFjaAotLy8gICBQaGkgaW4gb3VyIElSIGFzIGEgbm9uLVNTQSB2YXJpYWJsZSBpbiB0
aGUgZm9yZWlnbiBJUiAoc28sIGFzIGFuCi0vLyAgIGFsbG9jYSBpbiBMTFZNIElSLCBmb3IgZXhh
bXBsZSk7IHRoZSBVcHNpbG9ucyB0aGF0IHJlZmVyIHRvIHRoZSBQaGkKLS8vICAgYmVjb21lIHN0
b3JlcyBhbmQgdGhlIFBoaXMgdGhlbXNlbHZlcyBiZWNvbWUgbG9hZHMuCi0vLwogLy8gICBGdW4g
ZmFjdDogVXBzaWxvbiBpcyBzbyBuYW1lZCBiZWNhdXNlIGl0IGNvbWVzIGJlZm9yZSBQaGkgaW4g
dGhlCiAvLyAgIGFscGhhYmV0LiBJdCBjYW4gYmUgd3JpdHRlbiBhcyAiWSIuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YXRp
Y0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9u
UGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDYgQEAgY2xhc3MgR3JhcGg7CiAv
LyBhYmlsaXR5IHRvIGRvIGFjY3VyYXRlIHN0YXRpYyBlc3RpbWF0aW9ucy4gSGVuY2Ugd2UgbG9j
ayBpbiB0aGUgZXN0aW1hdGVzIGVhcmx5LgogLy8gSWRlYWxseSwgd2Ugd291bGQgaGF2ZSBkeW5h
bWljIGluZm9ybWF0aW9uLCBidXQgd2UgZG9uJ3QgcmlnaHQgbm93LCBzbyB0aGlzIGlzIGFzCiAv
LyBnb29kIGFzIGl0IGdldHMuCi0vLwotLy8gSXQncyB3b3J0aCBub3RpbmcgdGhhdCBpZiB3ZSBk
aWRuJ3QgaGF2ZSB0aGlzIHBoYXNlLCB0aGVuIHRoZSBzdGF0aWMgZXN0aW1hdGlvbgotLy8gd291
bGQgYmUgcGVyZm9tZWQgYnkgTExWTSBpbnN0ZWFkLiBJdCdzIHdvcnRoIHRyeWluZyB0byBtYWtl
IHRoaXMgcGhhc2UgcGVyZm9ybQotLy8gdGhlIGVzdGltYXRlcyB1c2luZyB0aGUgc2FtZSBoZXVy
aXN0aWNzIHRoYXQgTExWTSB3b3VsZCB1c2UuCiAKIGJvb2wgcGVyZm9ybVN0YXRpY0V4ZWN1dGlv
bkNvdW50RXN0aW1hdGlvbihHcmFwaCYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDEwICs2MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byByZXZlcnNl
IHRoZSBvcmRlciBvZiB1bmlmaWNhdGlvbiBiZWNhdXNlIGl0IGhlbHBzIHRvIHJldmVhbAotICAg
ICAgICAgICAgICAgICAgICAvLyBtb3JlIGJ1Z3Mgb24gb3VyIGVuZCwgdGhvdWdoIGl0J3Mgb3Ro
ZXJ3aXNlIG5vdCBvYnNlcnZhYmxlLiBCdXQgd2UgZG8gaXQKLSAgICAgICAgICAgICAgICAgICAg
Ly8gdGhpcyB3YXkgYmVjYXVzZSBpdCB3b3JrcyBhcm91bmQgYSBidWcgaW4gb3BlbiBzb3VyY2Ug
TExWTSdzIGxpdmUtb3V0cwotICAgICAgICAgICAgICAgICAgICAvLyBjb21wdXRhdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIHJldmVyc2luZyB0aGUgb3JkZXIg
b2YgdGhpcyB1bmlmaWNhdGlvbiwgc2luY2UgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIG9yZGVyIHdpbGwgcmV2ZWFsIG1vcmUgYnVncy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NDM2OAogICAgICAgICAgICAgICAgICAgICBwaGktPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT51bmlmeShwaGktPmNoaWxkcmVuLmNoaWxkKGNoaWxkSWR4KS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjRE
aXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGlzYXNzZW1ibGVyL0FSTTY0RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTcgKzU2LDMgQEAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1ibAog
CiAjZW5kaWYgLy8gVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKIAotI2lmIFVTRShMTFZNX0RJU0FT
U0VNQkxFUikgJiYgQ1BVKEFSTTY0KQotCi0jaW5jbHVkZSAiTExWTURpc2Fzc2VtYmxlci5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciYgY29kZVB0ciwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIqIHByZWZpeCwg
UHJpbnRTdHJlYW0mIG91dCwgSW5zdHJ1Y3Rpb25TdWJzZXRIaW50IGhpbnQpCi17Ci0gICAgcmV0
dXJuIHRyeVRvRGlzYXNzZW1ibGVXaXRoTExWTShjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCwg
aGludCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKExMVk1fRElT
QVNTRU1CTEVSKSAmJiBDUFUoQVJNNjQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlz
YXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9YODZEaXNhc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJEaXNhc3Nl
bWJsZXIuaCIKIAogI2lmIEVOQUJMRShESVNBU1NFTUJMRVIpCi0jaWYgVVNFKFVESVM4NikgfHwg
KFVTRShMTFZNX0RJU0FTU0VNQkxFUikgJiYgKENQVShYODZfNjQpIHx8IENQVShYODYpKSkKKyNp
ZiBVU0UoVURJUzg2KQogCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCiAjaW5j
bHVkZSAiT3B0aW9ucy5oIgpAQCAtMzUsMTMgKzM1LDYgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LS8vIFRoaXMgaG9ycmlmeWluZyBtb25zdGVyIGlzIG5lZWRlZCBiZWNhdXNlIG5laXRoZXIgb2Yg
b3VyIGRpc2Fzc2VtYmxlcnMgc3VwcG9ydHMKLS8vIGFsbCBvZiB4ODYsIGFuZCB1c2luZyB0aGVt
IHRvZ2V0aGVyIHRvIGRpc2Fzc2VtYmxlIHRoZSBzYW1lIGluc3RydWN0aW9uIHN0cmVhbQotLy8g
d291bGQgcmVzdWx0IGluIGEgZmFpcmx5IGphcnJpbmcgcHJpbnQtb3V0IHNpbmNlIHRoZXkgcHJp
bnQgaW4gZGlmZmVyZW50Ci0vLyBzdHlsZXMuIE1heWJlIHdlIGNhbiBkbyBiZXR0ZXIgaW4gdGhl
IGZ1dHVyZSwgYnV0IGZvciBub3cgdGhlIGNhbGxlciBoaW50cwotLy8gd2hldGhlciBoZSdzIHVz
aW5nIHRoZSBzdWJzZXQgb2YgdGhlIGFyY2hpdGVjdHVyZSB0aGF0IG91ciBNYWNyb0Fzc2VtYmxl
cgotLy8gc3VwcG9ydHMgKGluIHdoaWNoIGNhc2Ugd2UgZ28gd2l0aCBVRGlzODYpIG9yIGlmIGhl
J3MgdXNpbmcgdGhlIExMVk0gc3Vic2V0LgotCiBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29uc3Qg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciog
cHJlZml4LCBQcmludFN0cmVhbSYgb3V0KQogewogICAgIHJldHVybiB0cnlUb0Rpc2Fzc2VtYmxl
V2l0aFVEaXM4Nihjb2RlUHRyLCBzaXplLCBwcmVmaXgsIG91dCk7CkBAIC00OSw1ICs0Miw1IEBA
IGJvb2wgdHJ5VG9EaXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmwKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKLSNlbmRpZiAvLyBVU0UoVURJUzg2KSB8fCBVU0UoTExWTV9ESVNBU1NFTUJMRVIp
CisjZW5kaWYgLy8gVVNFKFVESVM4NikKICNlbmRpZiAvLyBFTkFCTEUoRElTQVNTRU1CTEVSKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDkgQEAgdm9pZCBJbmRleGVk
QWJzdHJhY3RIZWFwOjppbml0aWFsaXplKEFicwogICAgIC8vCiAgICAgLy8gICAgQmxhaF9uZWdf
QQogICAgIC8vCi0gICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBMTFZNIHVzZXMgdGhl
IHN0cmluZyB0byBkaXN0aW5ndWlzaCB0aGUgdHlwZXMuCisgICAgLy8gVGhpcyB1c2VkIHRvIGJl
IGltcG9ydGFudCBiZWNhdXNlIHdlIHVzZWQgdG8gdXNlIHRoZSBzdHJpbmcgdG8gZGlzdGluZ3Vp
c2ggdGhlIHR5cGVzLiBUaGlzIGlzCisgICAgLy8gbm90IHJlbGV2YW50IGFueW1vcmUsIGFuZCB0
aGlzIGNvZGUgd2lsbCBiZSByZW1vdmVkIGV2ZW50dWFsbHkuCisgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMTkKICAgICAKICAgICBzdGF0
aWMgY29uc3QgY2hhciogbmVnU3BsaXQgPSAiX25lZ18iOwogICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBwb3NTcGxpdCA9ICJfIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOSArMzksOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLS8vIFRoZSBGVEwgSklUIHRyaWVz
IHRvIGFpZCBMTFZNJ3MgVEJBQS4gVGhlIEZUTCdzIG5vdGlvbiBvZiBob3cgdGhpcwotLy8gaGFw
cGVucyBpcyB0aGUgQWJzdHJhY3RIZWFwLiBBYnN0cmFjdEhlYXBzIGFyZSBhIHNpbXBsZSB0eXBl
IHN5c3RlbQotLy8gd2l0aCBzdWItdHlwaW5nLgorLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2Ugd2Ug
dXNlZCB0byBnZW5lcmF0ZSBMTFZNJ3MgVEJBQS4gSW4gdGhlIGZ1dHVyZSB3ZSB3aWxsIHdhbnQg
dG8gZ2VuZXJhdGUKKy8vIEIzIEhlYXBSYW5nZXMgaW5zdGVhZC4KKy8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzE5CiAKIGNsYXNzIEFic3RyYWN0
SGVhcFJlcG9zaXRvcnk7CiBjbGFzcyBPdXRwdXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDEwICszNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogLy8g
VGhpcyBjbGFzcyBpcyBtb3N0bHkgdXNlZCBmb3IgT1NSOyBpdCdzIGEgd2F5IG9mIHNwZWNpZnlp
bmcgaG93IGEgdmFsdWUgaXMgZm9ybWF0dGVkCiAvLyBpbiBjYXNlcyB3aGVyZSBpdCB3b3VsZG4n
dCBoYXZlIGJlZW4gb2J2aW91cyBmcm9tIGxvb2tpbmcgYXQgb3RoZXIgaW5kaWNhdG9ycyAobGlr
ZQotLy8gdGhlIHR5cGUgb2YgdGhlIExMVk1WYWx1ZVJlZiBvciB0aGUgdHlwZSBvZiB0aGUgREZH
OjpOb2RlKS4gVHlwaWNhbGx5IHRoaXMgYXJpc2VzCi0vLyBiZWNhdXNlIExMVk1WYWx1ZVJlZiBk
b2Vzbid0IGdpdmUgdXMgdGhlIGdyYW51bGFyaXR5IHdlIG5lZWQgdG8gYmVnaW4gd2l0aCwgYW5k
IHdlCi0vLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5
IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKLS8vIGZyb20uCisvLyB0aGUgdHlwZSBv
ZiB0aGUgQjM6OlZhbHVlKiBvciB0aGUgdHlwZSBvZiB0aGUgREZHOjpOb2RlKS4KIAogY2xhc3Mg
Rm9ybWF0dGVkVmFsdWUgewogcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw3ICs3OCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICBq
aXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQoCiAgICAgICAgIEZJTkFMSVpF
X0NPREVfSUYoCiAgICAgICAgICAgICBkdW1wRGlzYXNzZW1ibHksICplbnRyeXBvaW50TGlua0J1
ZmZlciwKLSAgICAgICAgICAgICgiRlRMIGVudHJ5cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExW
TSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZSht
X3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwor
ICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBCMyBnZW5lcmF0
ZWQgY29kZSBhdCAlcCIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29k
ZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOwogICAgIAogICAg
IG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUoaml0Q29kZSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgs
NyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRlKQogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Z3JhcGgubV9jb2RlQmxvY2s7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKICAgICAKLSAgICAv
LyBMTFZNIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgorICAgIC8v
IEIzIHdpbGwgY3JlYXRlIGl0cyBvd24ganVtcCB0YWJsZXMgYXMgbmVlZGVkLgogICAgIGNvZGVC
bG9jay0+Y2xlYXJTd2l0Y2hKdW1wVGFibGVzKCk7CiAKICAgICBzdGF0ZS5qaXRDb2RlLT5jb21t
b24ucmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCA9IGdyYXBoLnJlcXVpcmVkUmVnaXN0ZXJD
b3VudEZvckV4aXQoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0YXRl
KQogICAgICAgICAvLyBXZSBqdW1wIHRvIGhlcmUgc3RyYWlnaHQgZnJvbSBERkcgY29kZSwgYWZ0
ZXIgaGF2aW5nIGJveGVkIHVwIGFsbCBvZiB0aGUKICAgICAgICAgLy8gdmFsdWVzIGludG8gdGhl
IHNjcmF0Y2ggYnVmZmVyLiBFdmVyeXRoaW5nIHNob3VsZCBiZSBnb29kIHRvIGdvIC0gYXQgdGhp
cwogICAgICAgICAvLyBwb2ludCB3ZSd2ZSBldmVuIGRvbmUgdGhlIHN0YWNrIGNoZWNrLiBCYXNp
Y2FsbHkgd2UganVzdCBoYXZlIHRvIG1ha2UgdGhlCi0gICAgICAgIC8vIGNhbGwgdG8gdGhlIExM
Vk0tZ2VuZXJhdGVkIGNvZGUuCisgICAgICAgIC8vIGNhbGwgdG8gdGhlIEIzLWdlbmVyYXRlZCBj
b2RlLgogICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0ID0gaml0LmxhYmVsKCk7CiAg
ICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgbWFpblBhdGhKdW1wID0gaml0Lmp1bXAoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDcg
KzEzMCw3IEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRvKE1hY3JvQXNzZW1ibGUKICAgICAK
ICAgICBzd2l0Y2ggKGtpbmQoKSkgewogICAgIGNhc2UgUmVnaXN0ZXI6Ci0gICAgICAgIC8vIExM
Vk0gdXNlZCBzb21lIHJlZ2lzdGVyIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCEKKyAgICAgICAg
Ly8gQjMgdXNlZCBzb21lIHJlZ2lzdGVyIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCEKICAgICAg
ICAgZGF0YUxvZygiVW5yZWNvZ25pemVkIGxvY2F0aW9uOiAiLCAqdGhpcywgIlxuIik7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTE1
MSw4ICsxNTEsNiBAQCB2b2lkIExvY2F0aW9uOjpyZXN0b3JlSW50byhNYWNyb0Fzc2VtYmxlCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBVbnByb2Nlc3NlZDoKLSAgICAgICAg
Ly8gU2hvdWxkIG5ldmVyIHNlZSB0aGlzIC0gaXQncyBhbiBlbnVtZXJhdGlvbiBlbnRyeSBvbiBM
TFZNJ3Mgc2lkZSB0aGF0IG1lYW5zIHRoYXQKLSAgICAgICAgLy8gaXQgaGFzbid0IHByb2Nlc3Nl
ZCB0aGlzIGxvY2F0aW9uLgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMTk2NzMxKQkoZnJvbSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoxOTY3MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDQ2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMb3dlckRGR1Rv
TExWTS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9u
Q29udGV4dC5oIgorI2luY2x1ZGUgIkFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZS5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmgiCisjaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1
ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHRG9taW5h
dG9ycy5oIgorI2luY2x1ZGUgIkRGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiCisjaW5jbHVkZSAi
REZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRG
dXp6LmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oIgorI2luY2x1ZGUgIkZUTEF2YWlsYWJsZVJlY292ZXJ5LmgiCisj
aW5jbHVkZSAiRlRMRXhjZXB0aW9uVGFyZ2V0LmgiCisjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJGVExM
YXp5U2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRl
ICJGVExQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
CisjaW5jbHVkZSAiRlRMV2VpZ2h0ZWRUYXJnZXQuaCIKKyNpbmNsdWRlICJKSVRBZGRHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRBbmRHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRP
ckdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkpJVERpdkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUTXVsR2Vu
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkpJVFN1YkdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJK
U0dlbmVyYXRvckZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIK
KyNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMu
aCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCisjaW5j
bHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKKyNpbmNsdWRl
IDxhdG9taWM+CisjaWYgIU9TKFdJTkRPV1MpCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CisjaW5jbHVkZSA8d3RmL0JveC5oPgorI2luY2x1ZGUg
PHd0Zi9Qcm9jZXNzSUQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1
c2luZyBuYW1lc3BhY2UgQjM7Cit1c2luZyBuYW1lc3BhY2UgREZHOworCituYW1lc3BhY2Ugewor
CitzdGQ6OmF0b21pYzxpbnQ+IGNvbXBpbGVDb3VudGVyOworCisjaWYgQVNTRVJUX0RJU0FCTEVE
CitOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVhY2hhYmxlKCkKK3sK
KyAgICBDUkFTSCgpOworfQorI2Vsc2UKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZv
aWQgZnRsVW5yZWFjaGFibGUoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgdW5zaWduZWQgbm9kZUluZGV4KQoreworICAgIGRhdGFMb2coIkNyYXNoaW5n
IGluIHRob3VnaHQtdG8tYmUtdW5yZWFjaGFibGUgRlRMLWdlbmVyYXRlZCBjb2RlIGZvciAiLCBw
b2ludGVyRHVtcChjb2RlQmxvY2spLCAiIGF0IGJhc2ljIGJsb2NrICMiLCBibG9ja0luZGV4KTsK
KyAgICBpZiAobm9kZUluZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBkYXRhTG9nKCIsIG5vZGUg
QCIsIG5vZGVJbmRleCk7CisgICAgZGF0YUxvZygiLlxuIik7CisgICAgQ1JBU0goKTsKK30KKyNl
bmRpZgorCisvLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVk
dWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0aW5nCisvLyBzaWduaWZpY2FudGx5IGxlc3Mg
ZGVhZCBjb2RlLgorI2RlZmluZSBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChleGl0S2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9u
KSBkbyB7IFwKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dWYWx1
ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRWRnZSBfZnRjX2hpZ2hWYWx1ZSA9
IChoaWdoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQYXNzZWRUaHJvdWdo
KTsgIFwKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGln
aFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKKyAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgdHlwZUNoZWNrKF9mdGNfbG93VmFsdWUsIF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVz
UGFzc2VkVGhyb3VnaCwgKGZhaWxDb25kaXRpb24pLCBleGl0S2luZCk7IFwKKyAgICB9IHdoaWxl
IChmYWxzZSkKKworI2RlZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0
eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pIFwKKyAgICBGVExfVFlQRV9DSEVDS19X
SVRIX0VYSVRfS0lORChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pCisKK2NsYXNzIExvd2VyREZHVG9MTFZNIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShMb3dlckRGR1RvTExWTSk7CitwdWJsaWM6CisgICAgTG93ZXJERkdU
b0xMVk0oU3RhdGUmIHN0YXRlKQorICAgICAgICA6IG1fZ3JhcGgoc3RhdGUuZ3JhcGgpCisgICAg
ICAgICwgbV9mdGxTdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX291dChzdGF0ZSkKKyAgICAgICAg
LCBtX3Byb2MoKnN0YXRlLnByb2MpCisgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKKyAg
ICAgICAgLCBtX2ludGVycHJldGVyKHN0YXRlLmdyYXBoLCBtX3N0YXRlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdm9pZCBsb3dlcigpCisgICAgeworICAgICAgICBTdGF0ZSogc3RhdGUgPSAm
bV9mdGxTdGF0ZTsKKyAgICAgICAgCisgICAgICAgIENTdHJpbmcgbmFtZTsKKyAgICAgICAgaWYg
KHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgbmFtZSA9IHRvQ1N0
cmluZygKKyAgICAgICAgICAgICAgICAianNCb2R5XyIsICsrY29tcGlsZUNvdW50ZXIsICJfIiwg
Y29kZUJsb2NrKCktPmluZmVycmVkTmFtZSgpLAorICAgICAgICAgICAgICAgICJfIiwgY29kZUJs
b2NrKCktPmhhc2goKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmFtZSA9ICJqc0Jv
ZHkiOworICAgICAgICAKKyAgICAgICAgbV9ncmFwaC5lbnN1cmVEb21pbmF0b3JzKCk7CisKKyAg
ICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRhdGFM
b2coIkZ1bmN0aW9uIHJlYWR5LCBiZWdpbm5pbmcgbG93ZXJpbmcuXG4iKTsKKworICAgICAgICBt
X291dC5pbml0aWFsaXplKG1faGVhcHMpOworCisgICAgICAgIC8vIFdlIHVzZSBwcm9sb2d1ZSBm
cmVxdWVuY3kgZm9yIGFsbCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAgICAgICAgbV9v
dXQuc2V0RnJlcXVlbmN5KDEpOworICAgICAgICAKKyAgICAgICAgbV9wcm9sb2d1ZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiUHJvbG9ndWUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0YWNr
T3ZlcmZsb3cgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0YWNrIG92ZXJmbG93IikpOworICAg
ICAgICBtX2hhbmRsZUV4Y2VwdGlvbnMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhbmRsZSBF
eGNlcHRpb25zIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tBcmd1bWVu
dHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrIGFyZ3VtZW50cyIpKTsKKworICAgICAg
ICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51
bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBtX291dC5zZXRGcmVxdWVuY3ko
bV9oaWdoQmxvY2stPmV4ZWN1dGlvbkNvdW50KTsKKyAgICAgICAgICAgIG1fYmxvY2tzLmFkZCht
X2hpZ2hCbG9jaywgRlRMX05FV19CTE9DSyhtX291dCwgKCJCbG9jayAiLCAqbV9oaWdoQmxvY2sp
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBCYWNrIHRvIHByb2xvZ3VlIGZyZXF1ZW5jeSBm
b3IgYW55IGJvY2tzIHRoYXQgZ2V0IHNuZWFraWx5IGNyZWF0ZWQgaW4gdGhlIGluaXRpYWxpemF0
aW9uIGNvZGUuCisgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeSgxKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIHN0YWNrT3ZlcmZsb3cpOworICAgICAgICBt
X291dC5pbml0aWFsaXplQ29uc3RhbnRzKG1fcHJvYywgbV9wcm9sb2d1ZSk7CisgICAgICAgIGNy
ZWF0ZVBoaVZhcmlhYmxlcygpOworCisgICAgICAgIHNpemVfdCBzaXplT2ZDYXB0dXJlZCA9IHNp
emVvZihKU1ZhbHVlKSAqIG1fZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOworICAgICAgICBCMzo6
U2xvdEJhc2VWYWx1ZSogY2FwdHVyZWRCYXNlID0gbV9vdXQubG9ja2VkU3RhY2tTbG90KHNpemVP
ZkNhcHR1cmVkKTsKKyAgICAgICAgbV9jYXB0dXJlZCA9IG1fb3V0LmFkZChjYXB0dXJlZEJhc2Us
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVPZkNhcHR1cmVkKSk7CisgICAgICAgIHN0YXRlLT5jYXB0
dXJlZFZhbHVlID0gY2FwdHVyZWRCYXNlLT5zbG90KCk7CisKKyAgICAgICAgYXV0byBwcmVPcmRl
ciA9IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpOworCisgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgY3JlYXRlIGFueSBhbGxvY2EncyBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB0aGV5IHdpbGwg
Y2Vhc2UgdG8KKyAgICAgICAgLy8gYmUgbWVtMnJlZyBjYW5kaWRhdGVzLgorICAgICAgICAKKyAg
ICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5mcmFtZVBvaW50ZXIoKTsKKyAgICAgICAgbV90YWdU
eXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKKyAgICAgICAgbV90
YWdNYXNrID0gbV9vdXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKKworICAgICAgICAvLyBNYWtlIHN1
cmUgdGhhdCBCMyBrbm93cyB0aGF0IHdlIHJlYWxseSBjYXJlIGFib3V0IHRoZSBtYXNrIHJlZ2lz
dGVycy4gVGhpcyBmb3JjZXMgdGhlCisgICAgICAgIC8vIGNvbnN0YW50cyB0byBiZSBtYXRlcmlh
bGl6ZWQgaW4gcmVnaXN0ZXJzLgorICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFn
VHlwZU51bWJlci0+a2V5KCkpOworICAgICAgICBtX3Byb2MuYWRkRmFzdENvbnN0YW50KG1fdGFn
TWFzay0+a2V5KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuY29u
c3RJbnRQdHIoY29kZUJsb2NrKCkpLCBhZGRyZXNzRm9yKEpTU3RhY2s6OkNvZGVCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgZGlkT3ZlcmZsb3dT
dGFjaygpLCByYXJlbHkoc3RhY2tPdmVyZmxvdyksIHVzdWFsbHkoY2hlY2tBcmd1bWVudHMpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0YWNrT3ZlcmZsb3csIG1faGFuZGxl
RXhjZXB0aW9ucyk7CisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dFcnJvciksIG1fY2FsbEZyYW1lLCBt
X291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSkpOworICAgICAgICBtX291dC5wYXRjaHBvaW50
KFZvaWQpLT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHRlcm1pbmFsLCBzbyB3ZSBjYW4gY2xvYmJlciBldmVyeXRoaW5nLiBUaGF0J3Mgd2h5
IHdlIGRvbid0IGNsYWltIHRvCisgICAgICAgICAgICAgICAgLy8gY2xvYmJlciBzY3JhdGNoLgor
ICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0
Y2goaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuY29weUNhbGxl
ZVNhdmVzVG9WTUNhbGxlZVNhdmVzQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC52bSgpKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkNhbGwgY2FsbCA9IGppdC5jYWxsKCk7CisgICAgICAgICAgICAgICAgaml0Lmp1bXBUb0V4Y2Vw
dGlvbkhhbmRsZXIoKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAg
ICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoY2FsbCwgRnVuY3Rpb25QdHIobG9va3VwRXhj
ZXB0aW9uSGFuZGxlckZyb21DYWxsZXJGcmFtZSkpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9oYW5kbGVFeGNlcHRpb25zLCBjaGVja0FyZ3VtZW50
cyk7CisgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6OkxhYmVsPiBleGNlcHRpb25IYW5kbGVyID0g
c3RhdGUtPmV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIG1fb3V0LnBhdGNocG9pbnQoVm9pZCkt
PnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhqdW1wLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoKmV4Y2VwdGlvbkhhbmRsZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrQXJndW1lbnRzLCBsb3dCbG9jayhtX2dyYXBo
LmJsb2NrKDApKSk7CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLmNsZWFyKCk7CisgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzID0gT3BlcmFuZHM8QXZhaWxhYmlsaXR5Pihjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpLCAwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgeworICAgICAgICAgICAgYXZhaWxh
YmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkgPQorICAgICAgICAgICAgICAgIEF2YWls
YWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpKSk7CisgICAgICAgIH0KKyAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAg
bV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygp
OyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tp
XTsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBqc1ZhbHVl
ID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgb3BlcmFuZCA9PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bWFjaGluZUxvY2FsKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgYnV0
IGl0J3MgYW4gZWZmZWN0aXZlIG9uZS4gSXQgYWxsb3dzIHVzIHRvIGRvIENTRSBvbiB0aGUKKyAg
ICAgICAgICAgICAgICAvLyBwcmltb3JkaWFsIGxvYWQgb2YgYXJndW1lbnRzLiBUaGlzIGFzc3Vt
ZXMgdGhhdCB0aGUgR2V0TG9jYWwgdGhhdCBnb3QgcHV0IGluCisgICAgICAgICAgICAgICAgLy8g
cGxhY2Ugb2YgdGhlIG9yaWdpbmFsIFNldEFyZ3VtZW50IGRvZXNuJ3QgaGF2ZSBhbnkgZWZmZWN0
cyBiZWZvcmUgaXQuIFRoaXMKKyAgICAgICAgICAgICAgICAvLyBzaG91bGQgaG9sZCB0cnVlLgor
ICAgICAgICAgICAgICAgIG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuYWRkKG5vZGUsIGpzVmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG1fZ3Jh
cGgubV9hcmd1bWVudEZvcm1hdHNbaV0pIHsKKyAgICAgICAgICAgIGNhc2UgRmx1c2hlZEludDMy
OgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1
ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNW
YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGbHVzaGVk
Q2VsbDoKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpz
VmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG5vZGUsICJCYWQgZmx1c2ggZm9ybWF0IGZvciBhcmd1bWVudCIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fb3V0Lmp1bXAo
bG93QmxvY2sobV9ncmFwaC5ibG9jaygwKSkpOworICAgICAgICAKKyAgICAgICAgZm9yIChERkc6
OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJlT3JkZXIpCisgICAgICAgICAgICBjb21waWxlQmxvY2so
YmxvY2spOworCisgICAgICAgIC8vIFdlIGNyZWF0ZSBhbGwgUGhpJ3MgdXAgZnJvbnQsIGJ1dCB3
ZSBtYXkgdGhlbiBkZWNpZGUgbm90IHRvIGNvbXBpbGUgdGhlIGJhc2ljIGJsb2NrCisgICAgICAg
IC8vIHRoYXQgd291bGQgaGF2ZSBjb250YWluZWQgb25lIG9mIHRoZW0uIFNvIHRoaXMgY3JlYXRl
cyBvcnBoYW5zLCB3aGljaCB0cmlnZ2VycyBCMworICAgICAgICAvLyB2YWxpZGF0aW9uIGZhaWx1
cmVzLiBDYWxsaW5nIHRoaXMgZml4ZXMgdGhlIGlzc3VlLgorICAgICAgICAvLworICAgICAgICAv
LyBOb3RlIHRoYXQgeW91IHNob3VsZCBhdm9pZCB0aGUgdGVtcHRhdGlvbiB0byBtYWtlIHRoaXMg
Y2FsbCBjb25kaXRpb25hbCB1cG9uCisgICAgICAgIC8vIHZhbGlkYXRpb24gYmVpbmcgZW5hYmxl
ZC4gQjMgbWFrZXMgbm8gZ3VhcmFudGVlcyBvZiBhbnkga2luZCBvZiBjb3JyZWN0bmVzcyB3aGVu
CisgICAgICAgIC8vIGRlYWxpbmcgd2l0aCBJUiB0aGF0IHdvdWxkIGhhdmUgZmFpbGVkIHZhbGlk
YXRpb24uIEZvciBleGFtcGxlLCBpdCB3b3VsZCBiZSB2YWxpZCB0bworICAgICAgICAvLyB3cml0
ZSBhIEIzIHBoYXNlIHRoYXQgc28gYWdncmVzc2l2ZWx5IGFzc3VtZXMgdGhlIGxhY2sgb2Ygb3Jw
aGFucyB0aGF0IGl0IHdvdWxkIGNyYXNoCisgICAgICAgIC8vIGlmIGFueSBvcnBoYW5zIHdlcmUg
YXJvdW5kLiBXZSBtaWdodCBldmVuIGhhdmUgc3VjaCBwaGFzZXMgYWxyZWFkeS4KKyAgICAgICAg
bV9wcm9jLmRlbGV0ZU9ycGhhbnMoKTsKKworICAgICAgICAvLyBXZSBwdXQgdGhlIGJsb2NrcyBp
bnRvIHRoZSBCMyBwcm9jZWR1cmUgaW4gYSBzdXBlciB3ZWlyZCBvcmRlci4gTm93IHdlIHJlb3Jk
ZXIgdGhlbS4KKyAgICAgICAgbV9vdXQuYXBwbHlCbG9ja09yZGVyKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIAorICAgIHZvaWQgY3JlYXRlUGhpVmFyaWFibGVzKCkKKyAgICB7CisgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgu
YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0g
REZHOjpQaGkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IExUeXBlIHR5cGU7CisgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5mbGFncygpICYgTm9k
ZVJlc3VsdE1hc2spIHsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHREb3VibGU6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5kb3VibGVUeXBlOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDMyOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1MjoKKyAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgorICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gbV9vdXQuYm9vbGVhbjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SlM6CisgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBtX291dC5pbnQ2NDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG5vZGUsICJCYWQgUGhpIG5vZGUgcmVzdWx0IHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fcGhpcy5hZGQobm9k
ZSwgbV9wcm9jLmFkZDxWYWx1ZT4oQjM6OlBoaSwgdHlwZSwgT3JpZ2luKG5vZGUpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQmxvY2so
REZHOjpCYXNpY0Jsb2NrKiBibG9jaykKKyAgICB7CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiQ29tcGlsaW5nIGJsb2NrICIsICpibG9j
aywgIlxuIik7CisgICAgICAgIAorICAgICAgICBtX2hpZ2hCbG9jayA9IGJsb2NrOworICAgICAg
ICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgYW55IGJsb2NrcyBjcmVhdGVkIHdoaWxlIGxv
d2VyaW5nIGNvZGUgaW4gdGhlIGhpZ2ggYmxvY2sgaGF2ZSB0aGUgZnJlcXVlbmN5IG9mCisgICAg
ICAgIC8vIHRoZSBoaWdoIGJsb2NrLiBUaGlzIGlzIGFwcHJvcHJpYXRlIGJlY2F1c2UgQjMgZG9l
c24ndCBuZWVkIHByZWNpc2UgZnJlcXVlbmNpZXMuIEl0IGp1c3QgbmVlZHMKKyAgICAgICAgLy8g
c29tZXRoaW5nIHJvdWdobHkgYXBwcm94aW1hdGUgZm9yIHRoaW5ncyBsaWtlIHJlZ2lzdGVyIGFs
bG9jYXRpb24uCisgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0
aW9uQ291bnQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbG93QmxvY2sgPSBtX2Js
b2Nrcy5nZXQobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9uZXh0SGlnaEJsb2Nr
ID0gMDsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4ID0gbV9oaWdoQmxv
Y2stPmluZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK25l
eHRCbG9ja0luZGV4KSB7CisgICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLmJs
b2NrKG5leHRCbG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbV9uZXh0TG93QmxvY2sg
PSBtX25leHRIaWdoQmxvY2sgPyBtX2Jsb2Nrcy5nZXQobV9uZXh0SGlnaEJsb2NrKSA6IDA7Cisg
ICAgICAgIAorICAgICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4dCBi
bG9jayBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQorICAgICAgICAvLyBnZW5lcmF0
ZWQgSVIgaW4gcm91Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3QgdGhl
IHBlcmZvcm1hbmNlCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ugd2Ug
ZXhwZWN0IExMVk0gdG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8vIG1h
a2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Js
b2NrLCBtX25leHRMb3dCbG9jayk7CisgICAgICAgIAorICAgICAgICBpZiAoT3B0aW9uczo6ZnRs
Q3Jhc2hlcygpKQorICAgICAgICAgICAgbV9vdXQudHJhcCgpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFtX2hpZ2hCbG9jay0+Y2ZhSGFzVmlzaXRlZCkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
IGJlY2F1c2UgQ0ZBIGRpZG4ndCByZWFjaC5cbiIpOworICAgICAgICAgICAgY3Jhc2gobV9oaWdo
QmxvY2stPmluZGV4LCBVSU5UX01BWCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5iZWdpbkJsb2NrKG1f
aGlnaEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKKyAgICAgICAg
bV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAg
Zm9yIChtX25vZGVJbmRleCA9IDA7IG1fbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsg
KyttX25vZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFjb21waWxlTm9kZShtX25vZGVJbmRl
eCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5n
LlxuIik7CisgICAgICAgIGNyYXNoKCk7CisKKyAgICAgICAgLy8gSW52YWxpZGF0ZSBkb21pbmF0
ZWQgYmxvY2tzLiBVbmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcyB3ZSB3b3VsZCBleHBlY3QKKyAg
ICAgICAgLy8gdGhlbSB0byBiZSBpbnZhbGlkYXRlZCBhbHJlYWR5LiBCdXQgeW91IGNhbiBoYXZl
IHRoZSBDRkEgYmVjb21lIG1vcmUKKyAgICAgICAgLy8gcHJlY2lzZSBvdmVyIHRpbWUgYmVjYXVz
ZSB0aGUgc3RydWN0dXJlcyBvZiBvYmplY3RzIGNoYW5nZSBvbiB0aGUgbWFpbgorICAgICAgICAv
LyB0aHJlYWQuIEZhaWxpbmcgdG8gZG8gdGhpcyB3b3VsZCByZXN1bHQgaW4gd2VpcmQgY3Jhc2hl
cyBkdWUgdG8gYSB2YWx1ZQorICAgICAgICAvLyBiZWluZyB1c2VkIGJ1dCBub3QgZGVmaW5lZC4g
UmFjZSBjb25kaXRpb25zIEZUVyEKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXgg
PSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBERkc6
OkJhc2ljQmxvY2sqIHRhcmdldCA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKG1faGlnaEJsb2NrLCB0YXJnZXQp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQmxvY2sgIiwgKnRhcmdldCwgIiB3aWxsIGJhaWwg
YWxzby5cbiIpOworICAgICAgICAgICAgICAgIHRhcmdldC0+Y2ZhSGFzVmlzaXRlZCA9IGZhbHNl
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjb21waWxlTm9k
ZSh1bnNpZ25lZCBub2RlSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxp
ZCgpKSB7CisgICAgICAgICAgICBzYWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X25vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgbV9vcmlnaW4gPSBt
X25vZGUtPm9yaWdpbjsKKyAgICAgICAgbV9vdXQuc2V0T3JpZ2luKG1fbm9kZSk7CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
ZGF0YUxvZygiTG93ZXJpbmcgIiwgbV9ub2RlLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1f
YXZhaWxhYmxlUmVjb3Zlcmllcy5yZXNpemUoMCk7CisgICAgICAgIAorICAgICAgICBtX2ludGVy
cHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIERGRzo6VXBzaWxvbjoKKyAgICAgICAgICAgIGNvbXBp
bGVVcHNpbG9uKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OlBoaToK
KyAgICAgICAgICAgIGNvbXBpbGVQaGkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVDb25zdGFudCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICAgICAgICAgIGNvbXBp
bGVJbnQ1MkNvbnN0YW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3Vi
bGVSZXA6CisgICAgICAgICAgICBjb21waWxlRG91YmxlUmVwKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgY29tcGlsZURvdWJs
ZUFzSW50MzIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6VmFsdWVS
ZXA6CisgICAgICAgICAgICBjb21waWxlVmFsdWVSZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludDUyUmVwOgorICAgICAgICAgICAgY29tcGlsZUludDUyUmVwKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAg
ICBjb21waWxlVmFsdWVUb0ludDMyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBCb29sZWFuVG9OdW1iZXI6CisgICAgICAgICAgICBjb21waWxlQm9vbGVhblRvTnVtYmVyKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgR2V0U3RhY2s6CisgICAgICAgICAgICBjb21waWxlR2V0U3Rh
Y2soKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dFN0YWNrOgorICAgICAg
ICAgICAgY29tcGlsZVB1dFN0YWNrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBERkc6OkNoZWNrOgorICAgICAgICAgICAgY29tcGlsZU5vT3AoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRvVGhpczoKKyAgICAgICAgICAgIGNvbXBpbGVUb1RoaXMoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICAgICAg
Y29tcGlsZVZhbHVlQWRkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJD
YXQ6CisgICAgICAgICAgICBjb21waWxlU3RyQ2F0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAg
IGNvbXBpbGVBcml0aEFkZE9yU3ViKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBcml0aENsejMyOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQ2x6MzIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICAgICAgY29tcGlsZUFy
aXRoTXVsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aERpdjoKKyAg
ICAgICAgICAgIGNvbXBpbGVBcml0aERpdigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQXJpdGhNb2Q6CisgICAgICAgICAgICBjb21waWxlQXJpdGhNb2QoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTWluOgorICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoTWluT3JNYXgoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQWJzKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNpbjoKKyAgICAgICAgICAg
IGNvbXBpbGVBcml0aFNpbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJp
dGhDb3M6CisgICAgICAgICAgICBjb21waWxlQXJpdGhDb3MoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFyaXRoUG93OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUG93KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFJhbmRvbToKKyAgICAgICAg
ICAgIGNvbXBpbGVBcml0aFJhbmRvbSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJpdGhSb3VuZDoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFJvdW5kKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgICAgICBjb21waWxl
QXJpdGhTcXJ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aExvZzoK
KyAgICAgICAgICAgIGNvbXBpbGVBcml0aExvZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQXJpdGhGUm91bmQ6CisgICAgICAgICAgICBjb21waWxlQXJpdGhGUm91bmQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTmVnYXRlOgorICAgICAgICAg
ICAgY29tcGlsZUFyaXRoTmVnYXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBERkc6OkJpdEFuZDoKKyAgICAgICAgICAgIGNvbXBpbGVCaXRBbmQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0T3I6CisgICAgICAgICAgICBjb21waWxlQml0
T3IoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0WG9yOgorICAg
ICAgICAgICAgY29tcGlsZUJpdFhvcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJpdFJTaGlmdCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0TFNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJp
dExTaGlmdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0VVJTaGlmdDoK
KyAgICAgICAgICAgIGNvbXBpbGVCaXRVUlNoaWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVVSW50MzJUb051
bWJlcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENoZWNrQ2VsbDoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0NlbGwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrTm90RW1wdHk6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tOb3RFbXB0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ2hlY2tCYWRDZWxsOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrQmFkQ2VsbCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tJZGVudDoKKyAgICAgICAg
ICAgIGNvbXBpbGVDaGVja0lkZW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRFeGVjdXRhYmxlOgorICAgICAgICAgICAgY29tcGlsZUdldEV4ZWN1dGFibGUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAg
ICAgICAgICBjb21waWxlQXJyYXlpZnlUb1N0cnVjdHVyZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgY29tcGlsZVB1dFN0cnVj
dHVyZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAg
ICAgY2FzZSBHZXRCeUlkRmx1c2g6CisgICAgICAgICAgICBjb21waWxlR2V0QnlJZCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW46CisgICAgICAgICAgICBjb21waWxlSW4o
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEJ5SWQ6CisgICAgICAgIGNh
c2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CisgICAgICAgICAg
ICBjb21waWxlUHV0QnlJZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0
R2V0dGVyQnlJZDoKKyAgICAgICAgY2FzZSBQdXRTZXR0ZXJCeUlkOgorICAgICAgICAgICAgY29t
cGlsZVB1dEFjY2Vzc29yQnlJZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0R2V0dGVyU2V0dGVyQnlJZDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRHZXR0ZXJTZXR0ZXJC
eUlkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeVZhbDoK
KyAgICAgICAgY2FzZSBQdXRTZXR0ZXJCeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRBY2Nl
c3NvckJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJm
bHk6CisgICAgICAgICAgICBjb21waWxlR2V0QnV0dGVyZmx5KCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHlSZWFkT25seToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKKyAgICAgICAgICAgIGNvbXBpbGVDb25zdGFudFN0
b3JhZ2VQb2ludGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgY29tcGlsZUdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrQXJyYXk6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tBcnJheSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlR2V0QXJyYXlM
ZW5ndGgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6
CisgICAgICAgICAgICBjb21waWxlQ2hlY2tJbkJvdW5kcygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWwoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgICAgICBjb21waWxlUHV0QnlWYWwo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAg
ICAgIGNvbXBpbGVBcnJheVB1c2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEFycmF5UG9wOgorICAgICAgICAgICAgY29tcGlsZUFycmF5UG9wKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgY29tcGls
ZUNyZWF0ZUFjdGl2YXRpb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d0Z1bmN0aW9uOgorICAgICAgICBjYXNlIE5ld0Fycm93RnVuY3Rpb246CisgICAgICAgIGNhc2Ug
TmV3R2VuZXJhdG9yRnVuY3Rpb246CisgICAgICAgICAgICBjb21waWxlTmV3RnVuY3Rpb24oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZVNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAg
IGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1bWVudHMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVDcmVh
dGVDbG9uZWRBcmd1bWVudHMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d09iamVjdDoKKyAgICAgICAgICAgIGNvbXBpbGVOZXdPYmplY3QoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAg
ICAgICAgICAgIGNvbXBpbGVOZXdBcnJheUJ1ZmZlcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTmV3QXJyYXlXaXRoU2l6ZToKKyAgICAgICAgICAgIGNvbXBpbGVOZXdBcnJh
eVdpdGhTaXplKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICAgICAgY29tcGlsZU5ld1R5cGVkQXJyYXkoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0OgorICAgICAgICAgICAg
Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgIGNvbXBpbGVSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBU
b1N0cmluZzoKKyAgICAgICAgY2FzZSBDYWxsU3RyaW5nQ29uc3RydWN0b3I6CisgICAgICAgICAg
ICBjb21waWxlVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6CisgICAgICAgICAgICBjb21waWxlVG9Q
cmltaXRpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1ha2VSb3BlOgor
ICAgICAgICAgICAgY29tcGlsZU1ha2VSb3BlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAg
ICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICAgICAgICAgIGNvbXBpbGVTdHJp
bmdGcm9tQ2hhckNvZGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgorICAgICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgorICAgICAgICAg
ICAgY29tcGlsZUdldEJ5T2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRHZXR0ZXI6CisgICAgICAgICAgICBjb21waWxlR2V0R2V0dGVyKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTZXR0ZXI6CisgICAgICAgICAgICBjb21waWxlR2V0
U2V0dGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgorICAgICAgICAgICAgY29tcGlsZU11bHRpR2V0QnlPZmZzZXQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZVB1
dEJ5T2Zmc2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aVB1dEJ5
T2Zmc2V0OgorICAgICAgICAgICAgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHZXRH
bG9iYWxMZXhpY2FsVmFyaWFibGU6CisgICAgICAgICAgICBjb21waWxlR2V0R2xvYmFsVmFyaWFi
bGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcmlhYmxl
OgorICAgICAgICAgICAgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICAgICAgICAgIGNvbXBpbGVOb3Rp
ZnlXcml0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgor
ICAgICAgICAgICAgY29tcGlsZUdldENhbGxlZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRBcmd1bWVu
dENvdW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTY29wZToKKyAg
ICAgICAgICAgIGNvbXBpbGVHZXRTY29wZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2tpcFNjb3BlOgorICAgICAgICAgICAgY29tcGlsZVNraXBTY29wZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRDbG9zdXJlVmFyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQ
dXRDbG9zdXJlVmFyOgorICAgICAgICAgICAgY29tcGlsZVB1dENsb3N1cmVWYXIoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CisgICAgICAgICAg
ICBjb21waWxlR2V0RnJvbUFyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUHV0VG9Bcmd1bWVudHM6CisgICAgICAgICAgICBjb21waWxlUHV0VG9Bcmd1bWVudHMo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAg
ICAgIGNvbXBpbGVDb21wYXJlRXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAg
ICAgY29tcGlsZUNvbXBhcmVMZXNzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDb21wYXJlTGVzc0VxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVMZXNzRXEoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgICAgICAg
ICAgY29tcGlsZUNvbXBhcmVHcmVhdGVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVHcmVhdGVy
RXEoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAg
ICAgICAgICBjb21waWxlTG9naWNhbE5vdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CisgICAgICAg
IGNhc2UgQ29uc3RydWN0OgorICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgICAgICBj
b21waWxlVGFpbENhbGwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
ICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlTG9hZFZhcmFy
Z3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICAgICAgY29tcGlsZUZvcndhcmRWYXJhcmdzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBERkc6Okp1bXA6CisgICAgICAgICAgICBjb21waWxlSnVtcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpCcmFuY2g6CisgICAgICAgICAgICBj
b21waWxlQnJhbmNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OlN3
aXRjaDoKKyAgICAgICAgICAgIGNvbXBpbGVTd2l0Y2goKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERGRzo6UmV0dXJuOgorICAgICAgICAgICAgY29tcGlsZVJldHVybigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICAg
ICAgY29tcGlsZUZvcmNlT1NSRXhpdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVGhyb3c6CisgICAgICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgICAg
IGNvbXBpbGVUaHJvdygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW52YWxp
ZGF0aW9uUG9pbnQ6CisgICAgICAgICAgICBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgorICAgICAgICAgICAg
Y29tcGlsZUlzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
c0Jvb2xlYW46CisgICAgICAgICAgICBjb21waWxlSXNCb29sZWFuKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJc051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVJc051bWJl
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNTdHJpbmc6CisgICAgICAg
ICAgICBjb21waWxlSXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IElzT2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZUlzT2JqZWN0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJc09iamVjdE9yTnVsbDoKKyAgICAgICAgICAgIGNvbXBpbGVJ
c09iamVjdE9yTnVsbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNGdW5j
dGlvbjoKKyAgICAgICAgICAgIGNvbXBpbGVJc0Z1bmN0aW9uKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlT2Y6CisgICAgICAgICAgICBjb21waWxlVHlwZU9mKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1R5cGVJbmZvRmxhZ3M6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tUeXBlSW5mb0ZsYWdzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPdmVycmlkZXNIYXNJbnN0YW5jZToKKyAgICAgICAgICAgIGNvbXBpbGVP
dmVycmlkZXNIYXNJbnN0YW5jZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5zdGFuY2VPZjoKKyAgICAgICAgICAgIGNvbXBpbGVJbnN0YW5jZU9mKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgorICAgICAgICAgICAgY29t
cGlsZUluc3RhbmNlT2ZDdXN0b20oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvdW50RXhlY3V0aW9uOgorICAgICAgICAgICAgY29tcGlsZUNvdW50RXhlY3V0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdG9yZUJhcnJpZXI6CisgICAgICAgICAg
ICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNHZW5lcmljUHJvcGVy
dHk6CisgICAgICAgICAgICBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBIYXNTdHJ1Y3R1cmVQcm9wZXJ0eToKKyAgICAgICAgICAg
IGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CisgICAgICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5h
bWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5n
dGg6CisgICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgorICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgorICAgICAgICAgICAgY29t
cGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmco
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgorICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICAg
ICAgICAgIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAg
Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgorICAgICAgICAgICAgY29tcGlsZUNo
ZWNrV2F0Y2hkb2dUaW1lcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29w
eVJlc3Q6CisgICAgICAgICAgICBjb21waWxlQ29weVJlc3QoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6CisgICAgICAgICAgICBjb21waWxlR2V0UmVz
dExlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBQaGFudG9tTG9j
YWw6CisgICAgICAgIGNhc2UgTG9vcEhpbnQ6CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAg
ICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKKyAgICAgICAgY2FzZSBQ
aGFudG9tTmV3T2JqZWN0OgorICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKKyAgICAg
ICAgY2FzZSBQaGFudG9tTmV3R2VuZXJhdG9yRnVuY3Rpb246CisgICAgICAgIGNhc2UgUGhhbnRv
bUNyZWF0ZUFjdGl2YXRpb246CisgICAgICAgIGNhc2UgUGhhbnRvbURpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBQaGFudG9tQ2xvbmVkQXJndW1lbnRzOgorICAgICAgICBjYXNlIFB1dEhp
bnQ6CisgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6CisgICAgICAgIGNhc2UgS2lsbFN0YWNrOgor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9u
b2RlLT5pc1Rlcm1pbmFsKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBzYWZlbHlJbnZh
bGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmV4ZWN1dGVOb2RlKG1f
bm9kZSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgY29tcGls
ZVVwc2lsb24oKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHVwc2lsb25WYWx1ZSA9IG51bGxwdHI7
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZToKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgdXBzaWxvblZh
bHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CisgICAgICAgICAgICB1
cHNpbG9uVmFsdWUgPSBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6
CisgICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAgICAgICAgICAg
IHVwc2lsb25WYWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHVwc2lsb24gPSBtX291dC5hbmNob3IodXBzaWxvblZh
bHVlKTsKKyAgICAgICAgTFZhbHVlIHBoaU5vZGUgPSBtX3BoaXMuZ2V0KG1fbm9kZS0+cGhpKCkp
OworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBoaU5vZGUsIHVwc2lsb24pOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQaGkoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHBo
aSA9IG1fcGhpcy5nZXQobV9ub2RlKTsKKyAgICAgICAgbV9vdXQubV9ibG9jay0+YXBwZW5kKHBo
aSk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykg
eworICAgICAgICBjYXNlIE5vZGVSZXN1bHREb3VibGU6CisgICAgICAgICAgICBzZXREb3VibGUo
cGhpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQzMjoK
KyAgICAgICAgICAgIHNldEludDMyKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBOb2RlUmVzdWx0SW50NTI6CisgICAgICAgICAgICBzZXRJbnQ1MihwaGkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46CisgICAgICAgICAg
ICBzZXRCb29sZWFuKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2Rl
UmVzdWx0SlM6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBoaSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbnN0YW50KCkKKyAgICB7CisgICAgICAg
IHNldERvdWJsZShtX291dC5jb25zdERvdWJsZShtX25vZGUtPmFzTnVtYmVyKCkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlSW50NTJDb25zdGFudCgpCisgICAgeworICAgICAgICBp
bnQ2NF90IHZhbHVlID0gbV9ub2RlLT5hc01hY2hpbmVJbnQoKTsKKyAgICAgICAgCisgICAgICAg
IHNldEludDUyKG1fb3V0LmNvbnN0SW50NjQodmFsdWUgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFt
b3VudCkpOworICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlKSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRG91YmxlUmVwKCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBSZWFsTnVt
YmVyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiRG91YmxlUmVwIFJlYWxOdW1iZXJVc2UgaW50IGNhc2UiKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkRvdWJsZVJl
cCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZG91YmxlVmFsdWUpOworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZh
bHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24p
LCByYXJlbHkoaW50Q2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1i
ZXIsCisgICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRUb0RvdWJsZSh1bmJveEludDMy
KHZhbHVlKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIE5vdENlbGxVc2U6CisgICAg
ICAgIGNhc2UgTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBib29sIHNob3VsZENvbnZlcnROb25O
dW1iZXIgPSBtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJv
eGluZyBpbnQgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZVRlc3Rpbmcg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGRvdWJsZSBj
YXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm9uRG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgdW5kZWZpbmVkIGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFs
dWVUb0RvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoZG91
YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgZG91YmxlVGVz
dGluZyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGludFRvRG91
YmxlID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFRvRG91YmxlKHVu
Ym94SW50MzIodmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZVRlc3Rpbmcs
IGRvdWJsZUNhc2UpOworICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNOdW1iZXIgPSBpc051bWJl
cih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAgICBtX291
dC5icmFuY2godmFsdWVJc051bWJlciwgdXN1YWxseShkb3VibGVDYXNlKSwgcmFyZWx5KG5vbkRv
dWJsZUNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlQ2FzZSwgbm9u
RG91YmxlQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkRG91YmxlID0g
bV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIGlmIChzaG91bGRDb252ZXJ0Tm9uTnVtYmVy
KSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgdW5kZWZpbmVkIGNhc2Ui
KSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdE51bGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBudWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIG51bGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB0ZXN0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBib29sZWFuIHRydWUgY2FzZSIpKTsKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIHRydWUgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnQgYm9vbGVhbiBmYWxz
ZSBjYXNlIikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2Fz
ZSwgdW5kZWZpbmVkQ2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNVbmRlZmlu
ZWQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzVW5kZWZpbmVkLCB1bnN1cmUo
dW5kZWZpbmVkQ2FzZSksIHVuc3VyZSh0ZXN0TnVsbENhc2UpKTsKKworICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZENhc2UsIHRlc3ROdWxsQ2FzZSk7CisgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkVW5kZWZpbmVkID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0TnVsbENhc2Us
IG51bGxDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc051bGwgPSBtX291dC5l
cXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2godmFsdWVJc051bGwsIHVuc3VyZShudWxsQ2FzZSksIHVuc3VyZSh0ZXN0
Qm9vbGVhblRydWVDYXNlKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhudWxs
Q2FzZSwgdGVzdEJvb2xlYW5UcnVlQ2FzZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgY29udmVydGVkTnVsbCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgwKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8odGVzdEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xlYW5UcnVl
Q2FzZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNCb29sZWFuVHJ1ZSA9IG1fb3V0
LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVHJ1ZSkpOworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzQm9vbGVhblRydWUsIHVuc3VyZShjb252ZXJ0Qm9vbGVh
blRydWVDYXNlKSwgdW5zdXJlKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKSk7CisKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9v
bGVhbkZhbHNlQ2FzZSk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVk
VHJ1ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgxKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udmVydEJvb2xlYW5GYWxzZUNhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWVJc05vdEJvb2xlYW5GYWxzZSA9IG1fb3V0Lm5vdEVxdWFsKHZh
bHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKKyAgICAgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCB+U3BlY0Nl
bGwsIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNvbnZlcnRlZEZhbHNlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDApKTsK
KyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1
bmJveGVkRG91YmxlLCBjb252ZXJ0ZWRVbmRlZmluZWQsIGNvbnZlcnRlZE51bGwsIGNvbnZlcnRl
ZFRydWUsIGNvbnZlcnRlZEZhbHNlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRG91YmxlQ2FzZSwgY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlciwgbV9vdXQuYm9vbGVhblRydWUp
OworICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisKKyAgICAgICAgICAgIHNldERvdWJs
ZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldERvdWJsZShzdHJpY3RJbnQ1MlRv
RG91YmxlKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRG91YmxlQXNJbnQzMigpCisgICAgeworICAg
ICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50MzIobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRo
TW9kZSgpKSk7CisgICAgICAgIHNldEludDMyKGludGVnZXJWYWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCBjb21waWxlVmFsdWVSZXAoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhtX25v
ZGUtPmNoaWxkMSgpLCB+U3BlY0RvdWJsZUltcHVyZU5hTikpIHsKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1
YWwodmFsdWUsIHZhbHVlKSwgdmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShib3hEb3VibGUo
dmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoc3RyaWN0
SW50NTJUb0pTVmFsdWUobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW50NTJSZXAoKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIobV9vdXQuc2lnbkV4
dDMyVG82NChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAgICAgICAgICAg
IHNldFN0cmljdEludDUyKAorICAgICAgICAgICAgICAgIGpzVmFsdWVUb1N0cmljdEludDUyKAor
ICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6Cisg
ICAgICAgICAgICBzZXRTdHJpY3RJbnQ1MigKKyAgICAgICAgICAgICAgICBkb3VibGVUb1N0cmlj
dEludDUyKAorICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVWYWx1ZVRvSW50MzIo
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2Fz
dFRvSW50MzIobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgICAg
ICAgICAgc2V0SW50MzIoZG91YmxlVG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgTnVtYmVy
VXNlOgorICAgICAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgICAgIExvd2VyZWROb2Rl
VmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7
CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJ
bnQzMih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgeworICAgICAgICAgICAgICAgIHNldEludDMyKG51bWJlck9yTm90Q2VsbFRvSW50MzIobV9u
b2RlLT5jaGlsZDEoKSwgdmFsdWUudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSdsbCBiYXNpY2Fs
bHkganVzdCBnZXQgaGVyZSBmb3IgY29uc3RhbnRzLiBCdXQgaXQncyBnb29kIHRvIGhhdmUgdGhp
cworICAgICAgICAgICAgLy8gY2F0Y2gtYWxsIHNpbmNlIHdlIG9mdGVuIGFkZCBuZXcgcmVwcmVz
ZW50YXRpb25zIGludG8gdGhlIG1peC4KKyAgICAgICAgICAgIHNldEludDMyKAorICAgICAgICAg
ICAgICAgIG51bWJlck9yTm90Q2VsbFRvSW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9k
ZS0+Y2hpbGQxKCksCisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQm9vbGVhblRvTnVt
YmVyKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOiB7CisgICAgICAgICAgICBzZXRJbnQzMihtX291
dC56ZXJvRXh0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fb3V0LmludDMyKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9pbnRlcnBy
ZXRlci5uZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjQm9vbEludDMyIHwgU3Bl
Y0Jvb2xlYW4pKSB7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKG1fb3V0
LmNhc3RUb0ludDMyKHZhbHVlKSwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGJvb2xlYW5DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29sZWFuVG9OdW1iZXIg
Ym9vbGVhbiBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29sZWFuVG9OdW1iZXIgY29udGludWF0aW9uIikpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RCb29sZWFuUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgICAgICBpc0Jvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkp
LAorICAgICAgICAgICAgICAgIHVuc3VyZShib29sZWFuQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhib29sZWFuQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYml0T3IoCisg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dCh1bmJveEJvb2xlYW4odmFsdWUpLCBtX291dC5p
bnQ2NCksIG1fdGFnVHlwZU51bWJlcikpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCBib29sZWFuUmVzdWx0LCBub3RCb29sZWFuUmVzdWx0KSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2Fs
KCkKKyAgICB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxF
bmNvZGVkSlNWYWx1ZSo+KAorICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5mdGxGb3JP
U1JFbnRyeSgpLT5lbnRyeUJ1ZmZlcigpLT5kYXRhQnVmZmVyKCkpOworICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShidWZmZXIgKyBtX25vZGUtPnVubGlua2Vk
TG9jYWwoKS50b0xvY2FsKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFN0
YWNrKCkKKyAgICB7CisgICAgICAgIC8vIEdldExvY2FscyBhcmlzZSBvbmx5IGZvciBjYXB0dXJl
ZCB2YXJpYWJsZXMgYW5kIGFyZ3VtZW50cy4gRm9yIGFyZ3VtZW50cywgd2UgbWlnaHQgaGF2ZQor
ICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZCBpdC4KKyAgICAgICAgaWYgKExWYWx1ZSB2YWx1ZSA9
IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXMuZ2V0KG1fbm9kZSkpIHsKKyAgICAgICAgICAgIHNldEpT
VmFsdWUodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
OworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpKTsKKyAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBtX25vZGUsIGRhdGEtPmZvcm1hdCAhPSBGbHVzaGVkRG91YmxlKTsgLy8gVGhpcyBq
dXN0IGhhcHBlbnMgdG8gbm90IGFyaXNlIGZvciBHZXRTdGFja3MsIHJpZ2h0IG5vdy4gSXQgd291
bGQgYmUgdHJpdmlhbCB0byBzdXBwb3J0LgorICAgICAgICAKKyAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQorICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyKHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVM
b2NhbCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0U3RhY2soKQorICAgIHsK
KyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEo
KTsKKyAgICAgICAgc3dpdGNoIChkYXRhLT5mb3JtYXQpIHsKKyAgICAgICAgY2FzZSBGbHVzaGVk
SlNWYWx1ZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
ZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZTogeworICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9v
dXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRG
b3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOiB7CisgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1
c2hlZENlbGw6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVMb2NhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOiB7CisgICAgICAgICAgICBzcGVj
dWxhdGVCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2
NCgKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgZmx1c2ggZm9ybWF0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVOb09wKCkKKyAgICB7CisgICAgICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgc3BlY3VsYXRlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlVG9UaGlzKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgaXMgY2VsbCBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiVG9UaGlzIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIHNsb3dDYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc1R5cGUodmFsdWUsIEZpbmFsT2JqZWN0VHlwZSksIHVzdWFsbHkoY29udGludWF0aW9uKSwg
cmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUogZnVuY3Rpb247
CisgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYykpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpc1N0cmljdDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXM7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAg
ICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihmdW5jdGlvbiksIG1fY2FsbEZy
YW1lLCB2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoKQorICAgIHsKKyAg
ICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUQWRkR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUFk
ZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVN0ckNhdCgpCisgICAgeworICAgICAg
ICBMVmFsdWUgcmVzdWx0OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDMoKSkgeworICAgICAg
ICAgICAgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MyksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAg
ICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMygpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDIpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAg
ICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiksCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgfQorICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFyaXRoQWRkT3JTdWIoKQorICAg
IHsKKyAgICAgICAgYm9vbCBpc1N1YiA9ICBtX25vZGUtPm9wKCkgPT0gQXJpdGhTdWI7CisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQz
MlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpOworCisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0
aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihpc1N1YiA/IG1fb3V0LnN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkg
OiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVj
dWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsK
KyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAg
ICAgIGlmICghYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVj
SW50NTIpCisgICAgICAgICAgICAgICAgJiYgIWFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDIo
KSkuY291bGRCZVR5cGUoU3BlY0ludDUyKSkgeworICAgICAgICAgICAgICAgIEludDUyS2luZCBr
aW5kOworICAgICAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9u
b2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93
SW50NTIobV9ub2RlLT5jaGlsZDIoKSwga2luZCk7CisgICAgICAgICAgICAgICAgc2V0SW50NTIo
aXNTdWIgPyBtX291dC5zdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSwg
a2luZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IENoZWNrVmFsdWUqIHJlc3VsdCA9CisgICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVj
dWxhdGVTdWIobGVmdCwgcmlnaHQpIDogbV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERv
dWJsZVJlcFVzZTogeworICAgICAgICAgICAgTFZhbHVlIEMxID0gbG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIEMyID0gbG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQyKCkpOworCisgICAgICAgICAgICBzZXREb3VibGUoaXNTdWIgPyBtX291dC5kb3VibGVTdWIo
QzEsIEMyKSA6IG1fb3V0LmRvdWJsZUFkZChDMSwgQzIpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBpZiAo
IWlzU3ViKSB7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRTdWJHZW5lcmF0b3I+KG9wZXJhdGlvblZh
bHVlU3ViKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhDbHozMigpCisgICAgeworICAgICAgICBMVmFsdWUgb3BlcmFuZCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRJbnQzMihtX291dC5jdGx6MzIob3BlcmFu
ZCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVBcml0aE11bCgpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50
MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKworICAgICAg
ICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBDaGVja1ZhbHVlKiBzcGVjdWxhdGlvbiA9IG1fb3V0
LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgYmxlc3NTcGVjdWxh
dGlvbihzcGVjdWxhdGlvbiwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4p
OworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNwZWN1bGF0aW9uOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMy
KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxl
ZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQp
OworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwg
b3Bwb3NpdGUoa2luZCkpOworCisgICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPSBtX291
dC5zcGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlv
bihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKworICAg
ICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkp
KSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFyaXRoTXVsIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVy
bywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQ2NFpl
cm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQ2NFplcm8pKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7
CisgICAgICAgICAgICBzZXREb3VibGUoCisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTXVs
KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVW50eXBl
ZFVzZTogeworICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUTXVsR2VuZXJhdG9yPihv
cGVyYXRpb25WYWx1ZU11bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUFyaXRoRGl2KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5i
aW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAg
TFZhbHVlIG51bWVyYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIGRlbm9taW5hdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgp
KSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHplcm9OdW1lcmF0b3IgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2IHplcm8gbnVtZXJhdG9yIikpOworICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhEaXYgbnVtZXJhdG9yIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvMzIobnVt
ZXJhdG9yKSwKKyAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHplcm9OdW1lcmF0b3IpLCB1c3Vh
bGx5KG51bWVyYXRvckNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHplcm9OdW1lcmF0b3IsIG51bWVyYXRv
ckNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAg
ICAgICAgICAgIE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihkZW5v
bWluYXRvciwgbV9vdXQuaW50MzJaZXJvKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5qdW1w
KG51bWVyYXRvckNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhudW1lcmF0b3JDb250aW51YXRpb24sIGlubmVyTGFzdE5leHQpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUt
PmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuc2FmZURlbm9t
aW5hdG9yID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiB1bnNhZmUgZGVub21pbmF0
b3IiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aERpdiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWluYXRvciA9IG1fb3V0LmFkZChkZW5vbWluYXRvciwg
bV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWJvdmUoYWRqdXN0ZWREZW5vbWluYXRvciwgbV9vdXQuaW50MzJP
bmUpLAorICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseSh1
bnNhZmVEZW5vbWluYXRvcikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdEludDMyKC0yMTQ3
NDgzNjQ3LTEpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5lcXVhbChudW1l
cmF0b3IsIG5lZzJUb1RoZTMxKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmRpdihudW1l
cmF0b3IsIGRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAg
ICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKG1fb3V0Lm11bChyZXN1bHQsIGRlbm9taW5hdG9yKSwgbnVtZXJhdG9y
KSk7CisgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNoaWxsRGl2KG51bWVyYXRvciwgZGVu
b21pbmF0b3IpKTsKKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAgICAgICAgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZURpdigKKyAgICAgICAgICAgICAgICBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIGVtaXRC
aW5hcnlTbmlwcGV0PEpJVERpdkdlbmVyYXRvciwgTmVlZFNjcmF0Y2hGUFI+KG9wZXJhdGlvblZh
bHVlRGl2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUFyaXRoTW9kKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlV
c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVl
IG51bWVyYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZh
bHVlIGRlbm9taW5hdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAg
ICAgIExWYWx1ZSByZW1haW5kZXI7CisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxv
dyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVu
c2FmZURlbm9taW5hdG9yID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1vZCB1bnNhZmUg
ZGVub21pbmF0b3IiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1vZCBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgYWRqdXN0ZWREZW5vbWluYXRvciA9IG1fb3V0LmFkZChkZW5v
bWluYXRvciwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoYWRqdXN0ZWREZW5vbWluYXRvciwgbV9v
dXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseSh1bnNhZmVEZW5vbWluYXRvcikpOworCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bnNhZmVEZW5vbWluYXRvciwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmVnMlRvVGhlMzEgPSBtX291dC5jb25zdElu
dDMyKC0yMTQ3NDgzNjQ3LTEpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm8zMihkZW5vbWluYXRvcikpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5l
cXVhbChudW1lcmF0b3IsIG5lZzJUb1RoZTMxKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
Lm1vZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKyAgICAgICAgICAgICAgICByZW1haW5kZXIg
PSByZXN1bHQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZW1haW5kZXIg
PSBtX291dC5jaGlsbE1vZChudW1lcmF0b3IsIGRlbm9taW5hdG9yKTsKKworICAgICAgICAgICAg
aWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmVnYXRpdmVOdW1lcmF0b3IgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFyaXRoTW9kIG5lZ2F0aXZlIG51bWVyYXRvciIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBudW1lcmF0b3JDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoTW9kIG51bWVyYXRvciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmxlc3NUaGFuKG51bWVy
YXRvciwgbV9vdXQuaW50MzJaZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKG5lZ2F0
aXZlTnVtZXJhdG9yKSwgdW5zdXJlKG51bWVyYXRvckNvbnRpbnVhdGlvbikpOworCisgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5lZ2F0
aXZlTnVtZXJhdG9yLCBudW1lcmF0b3JDb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm8zMihyZW1h
aW5kZXIpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVh
dGlvbiwgaW5uZXJMYXN0TmV4dCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldElu
dDMyKHJlbWFpbmRlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBzZXREb3VibGUo
CisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTW9kKGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoTWluT3JNYXgo
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEludDMyKAor
ICAgICAgICAgICAgICAgIG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9ub2Rl
LT5vcCgpID09IEFyaXRoTWluCisgICAgICAgICAgICAgICAgICAgICAgICA/IG1fb3V0Lmxlc3NU
aGFuKGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICAgICAgOiBtX291dC5sZXNzVGhh
bihyaWdodCwgbGVmdCksCisgICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90TGVz
c1RoYW4gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTWluL0FyaXRoTWF4IG5vdCBsZXNz
IHRoYW4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFyaXRoTWluL0FyaXRoTWF4IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobGVm
dCkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBBcml0aE1pbgorICAgICAgICAgICAgICAgICAgICA/IG1fb3V0LmRvdWJsZUxlc3NU
aGFuKGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICA6IG1fb3V0LmRvdWJsZUdyZWF0
ZXJUaGFuKGxlZnQsIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9u
KSwgdW5zdXJlKG5vdExlc3NUaGFuKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90TGVzc1RoYW4sIGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuc2VsZWN0
KAorICAgICAgICAgICAgICAgIG1fbm9kZS0+b3AoKSA9PSBBcml0aE1pbgorICAgICAgICAgICAg
ICAgICAgICA/IG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCkKKyAg
ICAgICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwobGVmdCwgcmln
aHQpLAorICAgICAgICAgICAgICAgIHJpZ2h0LCBtX291dC5jb25zdERvdWJsZShQTmFOKSkpKTsK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIHJlc3VsdHMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUFyaXRoQWJzKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgICAgIExW
YWx1ZSBtYXNrID0gbV9vdXQuYVNocih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigzMSkpOworICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmJpdFhvcihtYXNrLCBtX291dC5hZGQobWFz
aywgdmFsdWUpKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2Rl
LT5hcml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1Zh
bHVlKCksIDAsIG1fb3V0LmVxdWFsKHJlc3VsdCwgbV9vdXQuY29uc3RJbnQzMigxIDw8IDMxKSkp
OworCisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUFicyhsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlQXJpdGhTaW4oKSB7IHNldERvdWJsZShtX291dC5kb3VibGVTaW4obG93
RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoQ29z
KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlQ29zKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSkpOyB9CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogaW52ZXN0aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyBwZXJm
b3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0
byBoYXZlIHRoZSBpbmxpbmUgbG9vcCBpbiBERkcgdG9vLgorICAgICAgICBpZiAobV9ub2RlLT5j
aGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICBzZXREb3VibGUobV9v
dXQuZG91YmxlUG93aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25l
bnQgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGludGVnZXJFeHBvbmVudElzU21hbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
QXJpdGhQb3cgdGVzdCBpbnRlZ2VyIGV4cG9uZW50IGlzIHNtYWxsLiIpKTsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGludGVnZXJFeHBvbmVudFBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJBcml0aFBvdyBwb3coZG91YmxlLCAoaW50KWRvdWJsZSkuIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5ID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aFBvdyBwb3coZG91YmxlLCBkb3VibGUpLiIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgY2hlY2sgZXhwb25lbnQgaXMgaW5maW5p
dHkuIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0aW9uQmFzZUlzT25lID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCBjaGVjayBiYXNl
IGlzIG9uZS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBwb3dCbG9jayA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcmVndWxhciBwb3ciKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBuYW5FeGNlcHRpb25SZXN1bHRJc05hTiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
QXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgcmVzdWx0IGlzIE5hTi4iKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93
IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudCA9
IG1fb3V0LmRvdWJsZVRvSW50KGV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2Vy
RXhwb25lbnRDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0LmludFRvRG91YmxlKGludGVnZXJFeHBv
bmVudCk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnRJc0ludGVnZXIgPSBtX291dC5kb3Vi
bGVFcXVhbChleHBvbmVudCwgaW50ZWdlckV4cG9uZW50Q29udmVydGVkVG9Eb3VibGUpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGV4cG9uZW50SXNJbnRlZ2VyLCB1bnN1cmUoaW50ZWdlckV4
cG9uZW50SXNTbWFsbEJsb2NrKSwgdW5zdXJlKGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSkp
OworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlu
dGVnZXJFeHBvbmVudElzU21hbGxCbG9jaywgaW50ZWdlckV4cG9uZW50UG93QmxvY2spOworICAg
ICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudEJlbG93MTAwMCA9IG1fb3V0LmJlbG93KGlu
dGVnZXJFeHBvbmVudCwgbV9vdXQuY29uc3RJbnQzMigxMDAwKSk7CisgICAgICAgICAgICBtX291
dC5icmFuY2goaW50ZWdlckV4cG9uZW50QmVsb3cxMDAwLCB1c3VhbGx5KGludGVnZXJFeHBvbmVu
dFBvd0Jsb2NrKSwgcmFyZWx5KGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSkpOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbnRlZ2VyRXhwb25lbnRQb3dCbG9jaywgZG91YmxlRXhw
b25lbnRQb3dCbG9ja0VudHJ5KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd0RvdWJs
ZUludFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3dpKGJhc2UsIGludGVnZXJF
eHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgICAgICAvLyBJZiB5IGlzIE5hTiwgdGhlIHJlc3VsdCBpcyBOYU4uCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnksIG5hbkV4Y2VwdGlvbkV4
cG9uZW50SXNJbmZpbml0eSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnRJc05hTjsKKyAg
ICAgICAgICAgIGlmIChwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQyKCkpICYgU3BlY0RvdWJsZU5h
TikKKyAgICAgICAgICAgICAgICBleHBvbmVudElzTmFOID0gbV9vdXQuZG91YmxlTm90RXF1YWxP
clVub3JkZXJlZChleHBvbmVudCwgZXhwb25lbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGV4cG9uZW50SXNOYU4gPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgICAg
ICBtX291dC5icmFuY2goZXhwb25lbnRJc05hTiwgcmFyZWx5KG5hbkV4Y2VwdGlvblJlc3VsdElz
TmFOKSwgdXN1YWxseShuYW5FeGNlcHRpb25FeHBvbmVudElzSW5maW5pdHkpKTsKKworICAgICAg
ICAgICAgLy8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMgK2luZmluaXR5LCB0aGUgcmVzdWx0IGlz
IE5hTi4KKyAgICAgICAgICAgIC8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIC1pbmZpbml0eSwg
dGhlIHJlc3VsdCBpcyBOYU4uCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRp
b25FeHBvbmVudElzSW5maW5pdHksIG5hbkV4Y2VwdGlvbkJhc2VJc09uZSk7CisgICAgICAgICAg
ICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudCA9IG1fb3V0LmRvdWJsZUFicyhleHBvbmVudCk7Cisg
ICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHkgPSBtX291dC5kb3Vi
bGVFcXVhbChhYnNvbHV0ZUV4cG9uZW50LCBtX291dC5jb25zdERvdWJsZShzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChh
YnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSwgcmFyZWx5KG5hbkV4Y2VwdGlvbkJhc2VJc09uZSks
IHVzdWFsbHkocG93QmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhj
ZXB0aW9uQmFzZUlzT25lLCBwb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVC
YXNlID0gbV9vdXQuZG91YmxlQWJzKGJhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFic29sdXRl
QmFzZUlzT25lID0gbV9vdXQuZG91YmxlRXF1YWwoYWJzb2x1dGVCYXNlLCBtX291dC5jb25zdERv
dWJsZSgxKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goYWJzb2x1dGVCYXNlSXNPbmUsIHVu
c3VyZShuYW5FeGNlcHRpb25SZXN1bHRJc05hTiksIHVuc3VyZShwb3dCbG9jaykpOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhwb3dCbG9jaywgbmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4p
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmRvdWJsZVBvdyhiYXNlLCBleHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25S
ZXN1bHRJc05hTiwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHB1
cmVOYW4gPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5w
aGkobV9vdXQuZG91YmxlVHlwZSwgcG93RG91YmxlSW50UmVzdWx0LCBwb3dSZXN1bHQsIHB1cmVO
YW4pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUmFuZG9tKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisKKyAgICAgICAgLy8gSW5s
aW5lZCBXZWFrUmFuZG9tOjphZHZhbmNlKCkuCisgICAgICAgIC8vIHVpbnQ2NF90IHggPSBtX2xv
dzsKKyAgICAgICAgdm9pZCogbG93QWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6d2Vha1JhbmRvbU9mZnNldCgpICsgV2Vh
a1JhbmRvbTo6bG93T2Zmc2V0KCk7CisgICAgICAgIExWYWx1ZSBsb3cgPSBtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUobG93QWRkcmVzcykpOworICAgICAgICAvLyB1aW50NjRfdCB5ID0gbV9o
aWdoOworICAgICAgICB2b2lkKiBoaWdoQWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGdsb2JhbE9iamVjdCkgKyBKU0dsb2JhbE9iamVjdDo6d2Vha1JhbmRvbU9mZnNldCgpICsg
V2Vha1JhbmRvbTo6aGlnaE9mZnNldCgpOworICAgICAgICBMVmFsdWUgaGlnaCA9IG1fb3V0Lmxv
YWQ2NChtX291dC5hYnNvbHV0ZShoaWdoQWRkcmVzcykpOworICAgICAgICAvLyBtX2xvdyA9IHk7
CisgICAgICAgIG1fb3V0LnN0b3JlNjQoaGlnaCwgbV9vdXQuYWJzb2x1dGUobG93QWRkcmVzcykp
OworCisgICAgICAgIC8vIHggXj0geCA8PCAyMzsKKyAgICAgICAgTFZhbHVlIHBoYXNlMSA9IG1f
b3V0LmJpdFhvcihtX291dC5zaGwobG93LCBtX291dC5jb25zdEludDY0KDIzKSksIGxvdyk7CisK
KyAgICAgICAgLy8geCBePSB4ID4+IDE3OworICAgICAgICBMVmFsdWUgcGhhc2UyID0gbV9vdXQu
Yml0WG9yKG1fb3V0LmxTaHIocGhhc2UxLCBtX291dC5jb25zdEludDY0KDE3KSksIHBoYXNlMSk7
CisKKyAgICAgICAgLy8geCBePSB5IF4gKHkgPj4gMjYpOworICAgICAgICBMVmFsdWUgcGhhc2Uz
ID0gbV9vdXQuYml0WG9yKG1fb3V0LmJpdFhvcihoaWdoLCBtX291dC5sU2hyKGhpZ2gsIG1fb3V0
LmNvbnN0SW50NjQoMjYpKSksIHBoYXNlMik7CisKKyAgICAgICAgLy8gbV9oaWdoID0geDsKKyAg
ICAgICAgbV9vdXQuc3RvcmU2NChwaGFzZTMsIG1fb3V0LmFic29sdXRlKGhpZ2hBZGRyZXNzKSk7
CisKKyAgICAgICAgLy8gcmV0dXJuIHggKyB5OworICAgICAgICBMVmFsdWUgcmFuZG9tNjQgPSBt
X291dC5hZGQocGhhc2UzLCBoaWdoKTsKKworICAgICAgICAvLyBFeHRyYWN0IHJhbmRvbSA1M2Jp
dC4gWzAsIDUzXSBiaXQgaXMgc2FmZSBpbnRlZ2VyIG51bWJlciByYW5nZXMgaW4gZG91YmxlIHJl
cHJlc2VudGF0aW9uLgorICAgICAgICBMVmFsdWUgcmFuZG9tNTMgPSBtX291dC5iaXRBbmQocmFu
ZG9tNjQsIG1fb3V0LmNvbnN0SW50NjQoKDFVTEwgPDwgNTMpIC0gMSkpOworCisgICAgICAgIExW
YWx1ZSBkb3VibGU1M0ludGVnZXIgPSBtX291dC5pbnRUb0RvdWJsZShyYW5kb201Myk7CisKKyAg
ICAgICAgLy8gQ29udmVydCBgKDUzYml0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlKSAvICgxIDw8IDUz
KWAgdG8gYCg1M2JpdCBkb3VibGUgaW50ZWdlciB2YWx1ZSkgKiAoMS4wIC8gKDEgPDwgNTMpKWAu
CisgICAgICAgIC8vIEluIGxhdHRlciBjYXNlLCBgMS4wIC8gKDEgPDwgNTMpYCB3aWxsIGJlY29t
ZSBhIGRvdWJsZSB2YWx1ZSByZXByZXNlbnRlZCBhcyAobWFudGlzc2EgPSAwICYgZXhwID0gOTcw
LCBpdCBtZWFucyAxZS0oMioqNTQpKS4KKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2Fs
ZSA9IDEuMCAvICgxVUxMIDw8IDUzKTsKKworICAgICAgICAvLyBNdWx0aXBseWluZyAxZS0oMioq
NTQpIHdpdGggdGhlIGRvdWJsZSBpbnRlZ2VyIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBvZiB0
aGUgbWFudGlzc2EgcGFydCBvZiB0aGUgZG91YmxlIGludGVnZXIuCisgICAgICAgIC8vIEl0IGp1
c3QgcmVkdWNlcyB0aGUgZXhwIHBhcnQgb2YgdGhlIGdpdmVuIDUzYml0IGRvdWJsZSBpbnRlZ2Vy
LgorICAgICAgICAvLyAoRXhjZXB0IGZvciAwLjAuIFRoaXMgaXMgc3BlY2lhbGx5IGhhbmRsZWQg
YW5kIGluIHRoaXMgY2FzZSwgZXhwIGp1c3QgYmVjb21lcyAwLikKKyAgICAgICAgLy8gTm93IHdl
IGdldCA1M2JpdCBwcmVjaXNpb24gcmFuZG9tIGRvdWJsZSB2YWx1ZSBpbiBbMCwgMSkuCisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kb3VibGVNdWwoZG91YmxlNTNJbnRlZ2VyLCBtX291
dC5jb25zdERvdWJsZShzY2FsZSkpOworCisgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAg
IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUm91bmQoKQorICAgIHsKKyAgICAgICAgTEJhc2lj
QmxvY2sgcmVhbFBhcnRJc01vcmVUaGFuSGFsZiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhSb3VuZCBzaG91bGQgcm91bmQgZG93biIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFJvdW5kIGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVDZWlsKHZhbHVlKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGludGVnZXJWYWx1ZSk7CisKKyAgICAgICAgTFZhbHVlIHJlYWxQYXJ0ID0gbV9vdXQuZG91Ymxl
U3ViKGludGVnZXJWYWx1ZSwgdmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5k
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkKHJlYWxQYXJ0LCBtX291dC5jb25zdERvdWJsZSgw
LjUpKSwgdW5zdXJlKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhyZWFs
UGFydElzTW9yZVRoYW5IYWxmLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgaW50ZWdl
clZhbHVlUm91bmRlZERvd24gPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCBtX291dC5j
b25zdERvdWJsZSgxKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJvdW5k
ZWREb3duUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludGVnZXJWYWx1ZVJvdW5kZWREb3duKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
cGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludGVnZXJWYWx1ZVJlc3VsdCwgaW50ZWdlclZhbHVlUm91
bmRlZERvd25SZXN1bHQpOworCisgICAgICAgIGlmIChwcm9kdWNlc0ludGVnZXIobV9ub2RlLT5h
cml0aFJvdW5kaW5nTW9kZSgpKSkgeworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9
IGNvbnZlcnREb3VibGVUb0ludDMyKHJlc3VsdCwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aFJvdW5kaW5nTW9kZSgpKSk7CisgICAgICAgICAgICBzZXRJbnQzMihpbnRlZ2Vy
VmFsdWUpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydCgpIHsgc2V0RG91YmxlKG1fb3V0LmRv
dWJsZVNxcnQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29t
cGlsZUFyaXRoTG9nKCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlTG9nKGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSkpOyB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhGUm91bmQoKQor
ICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fb3V0LmZyb3VuZChsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhOZWdhdGUoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRo
TW9kZSgpKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOworICAg
ICAgICAgICAgZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhN
b2RlKCkpKSB7CisgICAgICAgICAgICAgICAgLy8gIjAgLSB4IiBpcyB0aGUgY2Fub25pY2FsIHdh
eSBvZiBzYXlpbmcgIi14IiBpbiBib3RoIEIzIGFuZCBMTFZNLiBUaGlzIGdldHMKKyAgICAgICAg
ICAgICAgICAvLyBsb3dlcmVkIHRvIHRoZSByaWdodCB0aGluZy4KKyAgICAgICAgICAgICAgICBD
aGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQzMlplcm8sIHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNoZWNrLCBPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y2hlY2s7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShP
dmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC50ZXN0SXNaZXJvMzIodmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIoMHg3ZmZmZmZmZikpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5u
ZWcodmFsdWUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0ludDUyKSkgeworICAgICAgICAgICAgICAgIElu
dDUyS2luZCBraW5kOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd1doaWNoZXZl
ckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOworICAgICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5uZWcodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1
bHQpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQsIGtpbmQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIENo
ZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291dC5pbnQ2NFplcm8sIHZh
bHVlKTsKKyAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24ocmVzdWx0LCBJbnQ1Mk92ZXJmbG93
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShO
ZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CisgICAg
ICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogeworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LmRvdWJsZU5lZyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUJpdEFuZCgpCisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8
SklUQml0QW5kR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdEFuZCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRPcigpCisgICAgeworICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQ8SklUQml0T3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0T3IpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdE9y
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRYb3IoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBl
bWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJVEJpdFhvckdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVC
aXRYb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMy
KG1fb3V0LmJpdFhvcihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0UlNoaWZ0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
eworICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3I6OlNpZ25lZFNoaWZ0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBzZXRJbnQzMihtX291dC5hU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSksCisgICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVCaXRMU2hpZnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJVExl
ZnRTaGlmdEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRMU2hpZnQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LnNobCgKKyAgICAgICAg
ICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9vdXQuYml0QW5k
KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0VVJTaGlmdCgpCisgICAgeworICAgICAgICBp
ZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVt
aXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpVbnNpZ25lZFNoaWZ0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXRJbnQzMihtX291
dC5sU2hyKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0
SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVVSW50MzJUb051bWJl
cigpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKTsKKworICAgICAgICBpZiAoZG9lc092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7
CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICBzZXRJbnQzMih2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUNoZWNrU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIEV4aXRLaW5kIGV4aXRL
aW5kOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBL
bm93bkNlbGxVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCisg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwganNWYWx1ZVZhbHVlKGNlbGwpLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25v
ZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZTogeworICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY2VsbCBjYXNlIikpOwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIG5vdCBjZWxsIGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxs
Q2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgK
KyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwganNWYWx1ZVZhbHVlKHZhbHVlKSwKKyAgICAgICAgICAgICAgICBleGl0S2luZCwg
bV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSog
c3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQo
c3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhl
cih2YWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tDZWxs
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIEJhZENlbGwsIGpz
VmFsdWVWYWx1ZShjZWxsKSwgbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksCisgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChjZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUtPmNlbGxPcGVyYW5kKCktPmNl
bGwoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tCYWRDZWxsKCkKKyAg
ICB7CisgICAgICAgIHRlcm1pbmF0ZShCYWRDZWxsKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVDaGVja05vdEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZShURFpGYWlsdXJlLCBu
b1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDaGVja0lkZW50KCkKKyAgICB7Cisg
ICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX25vZGUtPnVpZE9wZXJhbmQoKTsKKyAg
ICAgICAgaWYgKHVpZC0+aXNTeW1ib2woKSkgeworICAgICAgICAgICAgTFZhbHVlIHN5bWJvbCA9
IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihzeW1ib2wsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRJZGVudCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5ub3RFcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93U3RyaW5nSWRlbnQobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0Lmxv
YWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0ZShCYWRJZGVudCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ub3RFcXVhbChzdHJpbmdJ
bXBsLCBtX291dC5jb25zdEludFB0cih1aWQpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24obV9u
b2RlLT5jaGlsZDEoKSwgY2VsbCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihj
ZWxsLCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0YWJsZSkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gISFtX25vZGUtPmNoaWxkMigpID8gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkgOiAwOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5leHBlY3RlZFN0cnVjdHVyZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQXJyYXlpZnlUb1N0cnVjdHVyZSB1bmV4cGVjdGVkIHN0cnVjdHVy
ZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcnJheWlmeVRvU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKG1fbm9k
ZS0+c3RydWN0dXJlKCkpKSwKKyAgICAgICAgICAgIHJhcmVseSh1bmV4cGVjdGVkU3RydWN0dXJl
KSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5leHBlY3RlZFN0cnVjdHVyZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eSkgeworICAgICAgICAgICAgc3dp
dGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgICAgICAgICAgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHByb3BlcnR5LCBtX291dC5jb25zdEludDMyKE1JTl9T
UEFSU0VfQVJSQVlfSU5ERVgpKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0
LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlSW50MzIpLCBtX2NhbGxG
cmFtZSwgY2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uRW5zdXJlRG91YmxlKSwgbV9jYWxsRnJhbWUsIGNlbGwpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICB2bUNh
bGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVDb250aWd1
b3VzKSwgbV9jYWxsRnJhbWUsIGNlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZToKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICBCYWRJbmRleGluZ1R5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKKyAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2Rl
LT5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1dFN0cnVjdHVyZSgpCisgICAgeworICAgICAg
ICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFu
c2l0aW9uKG1fZ3JhcGgubV9wbGFuLCBjb2RlQmxvY2soKSwgbV9ub2RlKTsKKworICAgICAgICBT
dHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsK
KyAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+
bmV4dDsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvbGRTdHJ1Y3R1cmUsIG9sZFN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkgPT0gbmV3U3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAg
IEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gbmV3
U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpKTsKKyAgICAgICAgQVNTRVJU
KG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gbmV3U3RydWN0dXJlLT50eXBlSW5m
bygpLnR5cGUoKSk7CisKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOyAKKyAgICAgICAgbV9vdXQuc3RvcmUzMigKKyAgICAgICAgICAgIHdlYWtTdHJ1Y3R1
cmVJRChuZXdTdHJ1Y3R1cmUpLAorICAgICAgICAgICAgY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRCeUlkKCkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBDZWxsVXNlOiB7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGdldEJ5SWQobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAvLyBUaGlz
IGlzIHByZXR0eSB3ZWlyZCwgc2luY2Ugd2UgZHVwbGljYXRlIHRoZSBzbG93IHBhdGggYm90aCBo
ZXJlIGFuZCBpbiB0aGUKKyAgICAgICAgICAgIC8vIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBJQy4g
V2Ugc2hvdWxkIGludmVzdGlnYXRlIG1ha2luZyB0aGlzIGxlc3MgYmFkLgorICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzgzMAorICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5
cGVkIG5vdCBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBlZCBjb250aW51YXRpb24i
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUo
Y2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90Q2Vs
bENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihnZXRCeUlkKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeUlkR2VuZXJpYyksCisgICAgICAgICAgICAgICAg
bV9jYWxsRnJhbWUsIHZhbHVlLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1f
Z3JhcGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGNlbGxSZXN1bHQsIG5vdENlbGxSZXN1
bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlUHV0QnlJZCgpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0g
bV9ub2RlOworICAgICAgICAKKyAgICAgICAgLy8gU2VlIGFib3ZlOyBDZWxsVXNlIGlzIGVhc2ll
ciBzbyB3ZSBkbyBvbmx5IHRoYXQgZm9yIG5vdy4KKyAgICAgICAgQVNTRVJUKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKKworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2UpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIodmFsdWUpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisKKyAgICAgICAgLy8gRklYTUU6IElmIHRo
aXMgaXMgYSBQdXRCeUlkRmx1c2gsIHdlIG1pZ2h0IHdhbnQgdG8gbGF0ZS1jbG9iYmVyIHZvbGF0
aWxlIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Mjg0OAorCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHBhdGNocG9pbnQpOworCisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0
YXRlOworICAgICAgICBFQ01BTW9kZSBlY21hTW9kZSA9IG1fZ3JhcGguZXhlY3V0YWJsZUZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5lY21hTW9kZSgpOworICAgICAgICAKKyAgICAgICAgcGF0
Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisK
KyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgo
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAg
ICAgICAgICAgICAgLy8gSlMgc2V0dGVyIGNhbGwgSUNzIGdlbmVyYXRlZCBieSB0aGUgUHV0QnlJ
ZCBJQyB3aWxsIG5lZWQgdGhpcy4KKyAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNj
aGVkdWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAg
ICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRQdXRCeUlkR2VuZXJhdG9yPjo6
Y3JlYXRlKAorICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgY2FsbFNpdGVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEdQUkluZm86OnBh
dGNocG9pbnRTY3JhdGNoUmVnaXN0ZXIsIGVjbWFNb2RlLAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcCgpID09IFB1dEJ5SWREaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOworCisgICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAg
ICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZqaXQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVs
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBnZW5lcmF0
b3ItPnNsb3dQYXRoRnVuY3Rpb24oKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5m
bygpKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1swXS5ncHIoKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93
UGF0aEJlZ2luLCBzbG93UGF0aENhbGwpOworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRv
ci0+ZmluYWxpemUobGlua0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseSgpCisgICAgeworICAgICAgICBzZXRTdG9yYWdl
KGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5UmVhZE9ubHkoKQorICAgIHsKKyAg
ICAgICAgc2V0U3RvcmFnZShsb2FkQnV0dGVyZmx5UmVhZE9ubHkobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQ
b2ludGVyKCkKKyAgICB7CisgICAgICAgIHNldFN0b3JhZ2UobV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpIHsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRJbmRleGVkUHJvcGVy
dHlTdG9yYWdlIFN0cmluZyBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEluZGV4ZWRQcm9wZXJ0eVN0
b3JhZ2UgU3RyaW5nIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RS
ZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludFB0
ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVSb3BlKSwgbV9jYWxsRnJhbWUsIGNl
bGwpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0U3RvcmFnZShtX291dC5s
b2FkUHRyKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpLCBt
X2hlYXBzLlN0cmluZ0ltcGxfZGF0YSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzZXRTdG9yYWdlKGxvYWRWZWN0b3JXaXRoQmFycmllcihjZWxs
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrQXJyYXkoKQorICAgIHsKKyAg
ICAgICAgRWRnZSBlZGdlID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKGVkZ2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkuYWxyZWFkeUNoZWNrZWQobV9ncmFwaCwgbV9ub2RlLCBhYnN0cmFjdFZhbHVlKGVkZ2UpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAg
ICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAorICAgICAgICAg
ICAgbV9vdXQubG9naWNhbE5vdChpc0FycmF5VHlwZShjZWxsLCBtX25vZGUtPmFycmF5TW9kZSgp
KSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlUHRyID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsgICAgCisKKyAgICAgICAgTEJhc2ljQmxvY2sgc2ltcGxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVsZXNzIHR5cGVkIGFycmF5Iikp
OworICAgICAgICBMQmFzaWNCbG9jayB3YXN0ZWZ1bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3RlZnVsIHR5cGVkIGFycmF5IikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdl
dFR5cGVkQXJyYXlCeXRlT2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSBtb2RlID0gbV9vdXQubG9hZDMyKGJhc2VQdHIsIG1faGVhcHMuSlNBcnJheUJ1ZmZl
clZpZXdfbW9kZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0Lm5v
dEVxdWFsKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoV2FzdGVmdWxUeXBlZEFycmF5KSksCisgICAg
ICAgICAgICB1bnN1cmUoc2ltcGxlQ2FzZSksIHVuc3VyZSh3YXN0ZWZ1bENhc2UpKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNpbXBsZUNhc2UsIHdh
c3RlZnVsQ2FzZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlT3V0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8od2FzdGVmdWxDYXNlLCBjb250aW51
YXRpb24pOworCisgICAgICAgIExWYWx1ZSB2ZWN0b3JQdHIgPSBsb2FkVmVjdG9yUmVhZE9ubHko
YmFzZVB0cik7CisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlQdHIgPSBsb2FkQnV0dGVyZmx5UmVh
ZE9ubHkoYmFzZVB0cik7CisgICAgICAgIExWYWx1ZSBhcnJheUJ1ZmZlclB0ciA9IG1fb3V0Lmxv
YWRQdHIoYnV0dGVyZmx5UHRyLCBtX2hlYXBzLkJ1dHRlcmZseV9hcnJheUJ1ZmZlcik7CisgICAg
ICAgIExWYWx1ZSBkYXRhUHRyID0gbV9vdXQubG9hZFB0cihhcnJheUJ1ZmZlclB0ciwgbV9oZWFw
cy5BcnJheUJ1ZmZlcl9kYXRhKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayB3YXN0ZWZ1bE91
dCA9IG1fb3V0LmFuY2hvcihtX291dC5zdWIodmVjdG9yUHRyLCBkYXRhUHRyKSk7CisKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQz
MihtX291dC5waGkobV9vdXQuaW50UHRyLCBzaW1wbGVPdXQsIHdhc3RlZnVsT3V0KSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5l
Z2F0aXZlKGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSksIG1faGVhcHMuQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7CisgICAgICAgICAgICBMVmFsdWUgc3Ry
aW5nID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50
cyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoCisg
ICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihhcmd1bWVudHMsIG1faGVh
cHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAgICAgICAgIHNldEludDMyKG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNf
bGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBhcmd1bWVudHMgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobV9vdXQubG9hZDhaZXJvRXh0
MzIoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19vdmVycm9kZVRoaW5ncykpKTsK
KyAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGFyZ3VtZW50cywg
bV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdG90YWxMZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc1NvbWVUeXBlZEFycmF5VmlldygpKSB7CisgICAg
ICAgICAgICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNBcnJheUJ1ZmZl
clZpZXdfbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBpbGVDaGVja0luQm91bmRzKCkKKyAgICB7CisgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgIE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsCisgICAgICAgICAg
ICBtX291dC5hYm92ZU9yRXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFw
JiBoZWFwID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KKyAg
ICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmlu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgs
IG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaXNIb2xlID0gbV9v
dXQuaXNaZXJvNjQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1v
ZGUoKS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQoCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgaXNIb2xlLCBtX291
dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2Fk
RnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgaXNIb2xlKTsKKyAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQvY29udGlndW91cyBmYXN0IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiR2V0QnlWYWwgaW50L2NvbnRpZ3VvdXMgc2xvdyBjYXNlIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBpbnQvY29udGlndW91cyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisg
ICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICByYXJl
bHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGZhc3RDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIHNsb3dD
YXNlKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJl
c3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBt
X291dC5pc1plcm82NChmYXN0UmVzdWx0VmFsdWUpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCksIG1fY2FsbEZy
YW1lLCBiYXNlLCBpbmRleCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAg
ICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5p
bmRleGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LmxvYWREb3VibGUoCisgICAgICAgICAgICAgICAgICAgIGJhc2VJbmRl
eChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgZG91YmxlIGluIGJvdW5kcyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGJveFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGRvdWJsZSBib3hpbmci
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiR2V0QnlWYWwgZG91YmxlIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgZG91Ymxl
IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAg
ICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCkpLAorICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkoaW5Cb3VuZHMpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgYm94UGF0aCk7CisgICAgICAgICAg
ICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2FkRG91YmxlKAorICAgICAgICAgICAgICAg
IGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVx
dWFsT3JVbm9yZGVyZWQoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAgICAg
ICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGJveFBhdGgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm94UGF0aCwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihib3hEb3VibGUoZG91Ymxl
VmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAor
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsQXJyYXlJbnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVl
KCksIG1fbm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybykpOworICAg
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRy
LAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwobV9vdXQubG9hZFB0cihiYXNlLCBtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
CisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2Us
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xlbmd0aCkpKTsKKworICAgICAgICAgICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFw
cy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzcykpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAg
ICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgICAgIGlu
ZGV4LAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTFZhbHVlIHRhYmxlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c190YWJsZSk7CisgICAgICAgICAgICBMVmFsdWUgbmFtZWRMZW5ndGggPSBtX291
dC5sb2FkMzIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFtZWRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRBcmd1bWVudHMgbmFtZWQgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG92ZXJmbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIG92ZXJmbG93IGNhc2UiKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFNjb3BlZEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
aW5kZXgsIG5hbWVkTGVuZ3RoKSwgdW5zdXJlKG92ZXJmbG93Q2FzZSksIHVuc3VyZShuYW1lZENh
c2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29w
ZWRBcmd1bWVudHNfc2NvcGUpOworICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0
LmxvYWRQdHIodGFibGUsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5i
YXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5zY29wZWRBcmd1bWVudHNUYWJsZUFy
Z3VtZW50cywgYXJndW1lbnRzLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7CisgICAgICAgICAg
ICBMVmFsdWUgc2NvcGVPZmZzZXQgPSBtX291dC5sb2FkMzIoYWRkcmVzcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RN
b2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc2Nv
cGVPZmZzZXQsIG1fb3V0LmNvbnN0SW50MzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisg
ICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcywgc2Nv
cGUsIG1fb3V0Lnplcm9FeHRQdHIoc2NvcGVPZmZzZXQpKTsKKyAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG92ZXJmbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIGJhc2Us
CisgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVk
TGVuZ3RoKSkpOworICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2Fk
NjQoYWRkcmVzcyk7CisgICAgICAgICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9W
YWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihvdmVyZmxv
d1ZhbHVlKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgbmFtZWRSZXN1
bHQsIG92ZXJmbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUg
dHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
VHlwZWRQb2ludGVyIHBvaW50ZXIgPSBUeXBlZFBvaW50ZXIoCisgICAgICAgICAgICAgICAgICAg
IG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5zaGwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuemVy
b0V4dFB0cihpbmRleCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGlzU2lnbmVkKHR5cGUpID8gbV9vdXQubG9hZDhTaWduRXh0MzIocG9pbnRlcikgOiAg
bV9vdXQubG9hZDhaZXJvRXh0MzIocG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gaXNTaWduZWQodHlwZSkgPyBtX291dC5sb2FkMTZTaWduRXh0MzIocG9pbnRl
cikgOiAgbV9vdXQubG9hZDE2WmVyb0V4dDMyKHBvaW50ZXIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmxvYWQzMihwb2ludGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNp
emUiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxk
U3BlY3VsYXRlTWFjaGluZUludCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJp
Y3RJbnQ1MihtX291dC56ZXJvRXh0KHJlc3VsdCwgbV9vdXQuaW50NjQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9E
b3VibGUocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFR5cGVG
bG9hdDMyOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5mbG9hdFRvRG91Ymxl
KG1fb3V0LmxvYWRGbG9hdChwb2ludGVyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fb3V0LmxvYWREb3VibGUocG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzZXREb3VibGUocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlw
ZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKKyAgICB7CisgICAgICAgIElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxpbWl0
OworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFy
YXJncygpKQorICAgICAgICAgICAgbGltaXQgPSBtX291dC5jb25zdEludDMyKGlubGluZUNhbGxG
cmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAo
IWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIg
PSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7CisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LnN1
YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50UmVnaXN0ZXIpKSwgbV9vdXQu
aW50MzJPbmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoRXhvdGlj
T2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxpbWl0
KSk7CisgICAgICAgIAorICAgICAgICBUeXBlZFBvaW50ZXIgYmFzZTsKKyAgICAgICAgaWYgKGlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSA8PSAxKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxy
ZWFkeSBleGl0ZWQgZHVlIHRvIHRoZSBib3VuZHMgY2hlY2ssIGFib3ZlLiBKdXN0IHRlbGwgdGhl
CisgICAgICAgICAgICAgICAgLy8gY29tcGlsZXIgdGhhdCBhbnl0aGluZyBkb21pbmF0ZWQgYnkg
dGhpcyBpbnN0cnVjdGlvbiBpcyBub3QgcmVhY2hhYmxlLCBzbworICAgICAgICAgICAgICAgIC8v
IHRoYXQgd2UgZG9uJ3Qgd2FzdGUgdGltZSBnZW5lcmF0aW5nIHN1Y2ggY29kZS4gVGhpcyB3aWxs
IGFsc28gcGxhbnQgc29tZQorICAgICAgICAgICAgICAgIC8vIGtpbmQgb2YgY3Jhc2hpbmcgaW5z
dHJ1Y3Rpb24gc28gdGhhdCBpZiBieSBzb21lIGZsdWtlIHRoZSBib3VuZHMgY2hlY2sgZGlkbid0
CisgICAgICAgICAgICAgICAgLy8gd29yaywgd2UnbGwgY3Jhc2ggaW4gYW4gZWFzeS10by1zZWUg
d2F5LgorICAgICAgICAgICAgICAgIGRpZEFscmVhZHlUZXJtaW5hdGUoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYXNlID0gYWRkcmVzc0Zv
cihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50c1sxXS52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHBvaW50ZXIgPSBtX291
dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBiYXNlLnZhbHVlKCksIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIG1fb3V0LmludFB0ciksIFNjYWxlRWlnaHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWQ2NChUeXBlZFBvaW50ZXIobV9oZWFwcy52YXJpYWJsZXMuYXRBbnlJbmRleCgpLCBwb2lu
dGVyKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbCgpCisgICAgewor
ICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAg
ICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSk7CisgICAg
ICAgIEVkZ2UgY2hpbGQzID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOworICAgICAg
ICBFZGdlIGNoaWxkNCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsKKyAgICAgICAg
RWRnZSBjaGlsZDUgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCk7CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgICAgIFZfSklUT3BlcmF0aW9uX0VKSkogb3Bl
cmF0aW9uOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbERpcmVjdCkg
eworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlv
blB1dEJ5VmFsRGlyZWN0U3RyaWN0OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3ROb25TdHJpY3Q7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0
TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0OworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxOb25TdHJp
Y3Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB2bUNhbGwo
CisgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b24pLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkMSksIGxv
d0pTVmFsdWUoY2hpbGQyKSwgbG93SlNWYWx1ZShjaGlsZDMpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChjaGls
ZDEpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihjaGlsZDIpOworICAgICAgICBM
VmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UoY2hpbGQ0KTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgY2FzZSBBcnJheTo6
Q29udGlndW91czogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obV9vdXQubV9ibG9j
aywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
CisgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZDMsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgY2hpbGQzLCBTcGVjSW50MzIsIGlzTm90SW50
MzIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBUeXBlZFBvaW50
ZXIgZWxlbWVudFBvaW50ZXIgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAg
IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/CisgICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291
dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoY2hpbGQyKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGVsZW1lbnRQb2ludGVy
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRz
KAorICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkKKyAgICAg
ICAgICAgICAgICAgICAgPyBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0
CisgICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5k
c05vblN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3RvcmFnZSwgaW5kZXgsIHZh
bHVlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQodmFsdWUsIGVsZW1lbnRQb2ludGVyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkRvdWJsZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShj
aGlsZDMpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KAorICAgICAgICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGNoaWxkMywgU3BlY0Rv
dWJsZVJlYWwsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQodmFsdWUsIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
VHlwZWRQb2ludGVyIGVsZW1lbnRQb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KAorICAgICAgICAg
ICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBzdG9yYWdlLCBtX291
dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgcHJvdmVuVmFsdWUoY2hp
bGQyKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+b3Ao
KSA9PSBQdXRCeVZhbEFsaWFzKSB7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91
YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb250
aWd1b3VzUHV0QnlWYWxPdXRPZkJvdW5kcygKKyAgICAgICAgICAgICAgICAgICAgY29kZUJsb2Nr
KCktPmlzU3RyaWN0TW9kZSgpCisgICAgICAgICAgICAgICAgICAgID8gb3BlcmF0aW9uUHV0RG91
YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdAorICAgICAgICAgICAgICAgICAgICA6IG9w
ZXJhdGlvblB1dERvdWJsZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QsCisgICAgICAg
ICAgICAgICAgICAgIGJhc2UsIHN0b3JhZ2UsIGluZGV4LCB2YWx1ZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1
ZSwgZWxlbWVudFBvaW50ZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
ZEFycmF5VHlwZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXco
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IFR5cGVkUG9p
bnRlcigKKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5UHJvcGVydGllcywK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGxvZ0VsZW1lbnRTaXpl
KHR5cGUpKSkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBPdXRwdXQ6OlN0
b3JlVHlwZSBzdG9yZVR5cGU7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlVG9TdG9yZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIGludFZhbHVlOworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGNoaWxkMy51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1
MlJlcFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGNoaWxkMy51c2VLaW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBsb3dJbnQzMihjaGlsZDMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZh
bHVlID0gbV9vdXQuY2FzdFRvSW50MzIobG93U3RyaWN0SW50NTIoY2hpbGQzKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChpc0NsYW1wZWQodHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgYXRMZWFzdFplcm8gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGludCBjbGFt
cCBhdExlYXN0WmVybyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGludCBjbGFt
cCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBpbnRWYWx1ZXM7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNo
b3IobV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihp
bnRWYWx1ZSwgbV9vdXQuaW50MzJaZXJvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShhdExlYXN0WmVybykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oYXRMZWFzdFplcm8sIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuc2VsZWN0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5ncmVhdGVyVGhhbihpbnRWYWx1ZSwgbV9vdXQu
Y29uc3RJbnQzMigyNTUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMigyNTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1
ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZh
bHVlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xhbXBl
ZCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6
ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIGF0TGVhc3RaZXJvIikpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJhbmdlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgd2l0aGluUmFuZ2UiKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gaW50VmFsdWVzOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmludDMyWmVybykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1RoYW5PclVub3JkZXJlZChkb3VibGVW
YWx1ZSwgbV9vdXQuZG91YmxlWmVybyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoYXRMZWFzdFplcm8pKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGF0TGVhc3RaZXJvLCB3aXRoaW5SYW5nZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3Io
bV9vdXQuY29uc3RJbnQzMigyNTUpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVH
cmVhdGVyVGhhbihkb3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUoMjU1KSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUod2l0
aGluUmFuZ2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh3aXRoaW5SYW5nZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hv
cihtX291dC5kb3VibGVUb0ludChkb3VibGVWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUg
PSBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZhbHVlcyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IGRvdWJs
ZVRvSW50MzIoZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWVUb1N0b3JlID0gaW50VmFsdWU7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpT
dG9yZTMyQXM4OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1
dDo6U3RvcmUzMkFzMTY7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0g
T3V0cHV0OjpTdG9yZTMyOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGVsZW1lbnQgc2l6ZSIpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIC8qICFpc0ludCh0eXBlKSAqLyB7CisgICAgICAg
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShjaGlsZDMpOworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBl
RmxvYXQzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IG1fb3V0LmRv
dWJsZVRvRmxvYXQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0g
T3V0cHV0OjpTdG9yZUZsb2F0OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0NjQ6CisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVRvU3RvcmUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlw
ZSA9IE91dHB1dDo6U3RvcmVEb3VibGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSB8fCBtX25v
ZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3Rv
cmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5cGUpOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0luQm91bmRzID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCB0eXBlZCBhcnJheSBpbiBib3VuZHMgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCB0eXBlZCBhcnJheSBjb250aW51YXRpb24iKSk7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIGxvd0ludDMyKGNo
aWxkNSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShpc0luQm91bmRzKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW5Cb3VuZHMsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlKHZhbHVlVG9TdG9y
ZSwgcG9pbnRlciwgc3RvcmVUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHZvaWQgY29tcGlsZVB1dEFjY2Vzc29yQnlJZCgpCisgICAgeworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBhY2Nl
c3NvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGF1dG8gdWlkID0gbV9n
cmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAg
dm1DYWxsKAorICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCisgICAgICAgICAgICBtX291dC5v
cGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1dEdldHRlckJ5SWQgPyBvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlJZCksCisgICAgICAgICAgICBtX2NhbGxGcmFt
ZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUt
PmFjY2Vzc29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOworICAgIH0KKworICAgIHZvaWQgY29t
cGlsZVB1dEdldHRlclNldHRlckJ5SWQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgZ2V0dGVyID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIHNldHRlciA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIGF1dG8gdWlkID0gbV9ncmFwaC5pZGVudGlm
aWVycygpW21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKKyAgICAgICAgdm1DYWxsKAorICAg
ICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIpLAorICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIG1fb3V0LmNvbnN0SW50
UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSks
IGdldHRlciwgc2V0dGVyKTsKKworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVB1dEFjY2Vzc29y
QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBMVmFsdWUgc3Vic2NyaXB0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCisgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFB1dEdldHRlckJ5VmFsID8g
b3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCksCisgICAg
ICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgc3Vic2NyaXB0LCBtX291dC5jb25zdEludDMyKG1f
bm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUFycmF5UHVzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3Rv
cmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTog
eworICAgICAgICAgICAgTFZhbHVlIHZhbHVlOworICAgICAgICAgICAgT3V0cHV0OjpTdG9yZVR5
cGUgc3RvcmVUeXBlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkgeworICAgICAgICAgICAgICAgIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJh
eTo6SW50MzIpIHsKKyAgICAgICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMigpLCBT
cGVjSW50MzIsIGlzTm90SW50MzIodmFsdWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTY0OworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgZG91
YmxlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMigpLCBTcGVjRG91YmxlUmVhbCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRG91YmxlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RI
ZWFwJiBoZWFwID0gbV9oZWFwcy5mb3JBcnJheVR5cGUobV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpOworCisgICAgICAgICAgICBMVmFsdWUgcHJldkxlbmd0aCA9IG1fb3V0LmxvYWQzMihzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJy
YXlQdXNoIGZhc3QgcGF0aCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVB1c2ggc2xvdyBwYXRoIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJh
eVB1c2ggY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAg
ICAgICAgICBwcmV2TGVuZ3RoLCBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJm
bHlfdmVjdG9yTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5z
dXJlKGZhc3RQYXRoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNsb3dQYXRoKTsKKyAgICAgICAgICAg
IG1fb3V0LnN0b3JlKAorICAgICAgICAgICAgICAgIHZhbHVlLCBtX291dC5iYXNlSW5kZXgoaGVh
cCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihwcmV2TGVuZ3RoKSksIHN0b3JlVHlwZSk7Cisg
ICAgICAgICAgICBMVmFsdWUgbmV3TGVuZ3RoID0gbV9vdXQuYWRkKHByZXZMZW5ndGgsIG1fb3V0
LmludDMyT25lKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGJveEludDMyKG5l
d0xlbmd0aCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9u
KTsKKyAgICAgICAgICAgIExWYWx1ZSBvcGVyYXRpb247CisgICAgICAgICAgICBpZiAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkKKyAgICAgICAgICAgICAgICBv
cGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQdXNoKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uQXJyYXlQdXNoRG91YmxlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0
LCBvcGVyYXRpb24sIG1fY2FsbEZyYW1lLCB2YWx1ZSwgYmFzZSkpOworICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlQXJyYXlQb3AoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9u
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAg
ICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmZvckFycmF5VHlwZSht
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGZhc3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBmYXN0
IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJyYXlQb3Agc2xvdyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBjb250aW51
YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2TGVuZ3RoID0g
bV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpKTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5pc1plcm8zMihwcmV2TGVuZ3RoKSwgcmFy
ZWx5KGNvbnRpbnVhdGlvbiksIHVzdWFsbHkoZmFzdENhc2UpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwg
c2xvd0Nhc2UpOworICAgICAgICAgICAgTFZhbHVlIG5ld0xlbmd0aCA9IG1fb3V0LnN1YihwcmV2
TGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBtX291dC5zdG9yZTMyKG5ld0xl
bmd0aCwgc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgIFR5cGVkUG9pbnRlciBwb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2Us
IG1fb3V0Lnplcm9FeHRQdHIobmV3TGVuZ3RoKSk7CisgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OkRvdWJsZSkgeworICAgICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBtX291dC5sb2FkNjQocG9pbnRlcik7CisgICAgICAgICAgICAgICAgbV9v
dXQuc3RvcmU2NChtX291dC5pbnQ2NFplcm8sIHBvaW50ZXIpOworICAgICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm82NChyZXN1bHQpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZShw
b2ludGVyKTsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmNvbnN0SW50NjQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwgcG9pbnRlcik7CisgICAgICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveERvdWJsZShyZXN1bHQpKSk7CisgICAgICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVF
cXVhbChyZXN1bHQsIHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGlu
dWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UG9wQW5kUmVj
b3Zlckxlbmd0aCksIG1fY2FsbEZyYW1lLCBiYXNlKSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigpCisgICAgewor
ICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4o
KTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgSlNWYWx1ZSBpbml0aWFsaXphdGlvblZhbHVlID0gbV9ub2RlLT5pbml0aWFsaXphdGlvblZh
bHVlRm9yQWN0aXZhdGlvbigpOworICAgICAgICBBU1NFUlQoaW5pdGlhbGl6YXRpb25WYWx1ZS5p
c1VuZGVmaW5lZCgpIHx8IGluaXRpYWxpemF0aW9uVmFsdWUgPT0ganNURFpWYWx1ZSgpKTsKKyAg
ICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAg
ICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50NjQsCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0
ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJlKSwK
KyAgICAgICAgICAgICAgICBzY29wZSwgd2Vha1BvaW50ZXIodGFibGUpLCBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24g
Y29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0xleGljYWxFbnZpcm9ubWVu
dD4oCisgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNpemUodGFi
bGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgbWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFz
dC1jcmVhdGVkIHRoZSBhY3RpdmF0aW9uLCBzbyB0aGUKKyAgICAgICAgLy8gYWN0aXZhdGlvbiBt
dXN0IGJlIHlvdW5nLgorICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwg
bV9oZWFwcy5KU1Njb3BlX25leHQpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRl
cih0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1ib2xU
YWJsZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGFibGUt
PnNjb3BlU2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25W
YWx1ZSkpLAorICAgICAgICAgICAgICAgIGZhc3RPYmplY3QsIG1faGVhcHMuSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXNbaV0pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1
ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQg
PSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4m
IGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0
R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlv
blZhbHVlKSkpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNjb3BlKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9v
dXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQo
bV9ub2RlLT5vcCgpID09IE5ld0Z1bmN0aW9uIHx8IG1fbm9kZS0+b3AoKSA9PSBOZXdBcnJvd0Z1
bmN0aW9uIHx8IG1fbm9kZS0+b3AoKSA9PSBOZXdHZW5lcmF0b3JGdW5jdGlvbik7CisgICAgICAg
IGJvb2wgaXNHZW5lcmF0b3JGdW5jdGlvbiA9IG1fbm9kZS0+b3AoKSA9PSBOZXdHZW5lcmF0b3JG
dW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAg
ICAgIGlmIChleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5pc1N0aWxsVmFsaWQoKSkg
eworICAgICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPQorICAgICAgICAgICAgICAgIGlzR2Vu
ZXJhdG9yRnVuY3Rpb24gPyB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50
ZXIoZXhlY3V0YWJsZSkpIDoKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBzY29wZSwg
d2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsUmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPQorICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+Z2VuZXJh
dG9yRnVuY3Rpb25TdHJ1Y3R1cmUoKSA6CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmZ1bmN0aW9uU3RydWN0dXJlKCk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTmV3RnVuY3Rpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0Z1bmN0aW9uIGNvbnRpbnVhdGlvbiIp
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0
TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBmYXN0
T2JqZWN0ID0KKyAgICAgICAgICAgIGlzR2VuZXJhdG9yRnVuY3Rpb24gPyBhbGxvY2F0ZU9iamVj
dDxKU0dlbmVyYXRvckZ1bmN0aW9uPihzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQ
YXRoKSA6CisgICAgICAgICAgICBhbGxvY2F0ZU9iamVjdDxKU0Z1bmN0aW9uPihzdHJ1Y3R1cmUs
IG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAg
ICAvLyBXZSBkb24ndCBuZWVkIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3QtY3Jl
YXRlZCB0aGUgZnVuY3Rpb24sIHNvIGl0CisgICAgICAgIC8vIG11c3QgYmUgeW91bmcuCisgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rpb25f
c2NvcGUpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSwg
ZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX2V4ZWN1dGFibGUpOworICAgICAgICBtX291
dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rp
b25fcmFyZURhdGEpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgVmVjdG9yPExWYWx1ZT4gc2xvd1BhdGhBcmd1bWVudHM7Cisg
ICAgICAgIHNsb3dQYXRoQXJndW1lbnRzLmFwcGVuZChzY29wZSk7CisgICAgICAgIExWYWx1ZSBj
YWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIGlmIChpc0dlbmVyYXRvckZ1bmN0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVh
bGxvY2F0aW9uV2F0Y2hwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlk
YXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQsCisgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVDcmVhdGVEaXJlY3RBcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEEgbW9yZSBlZmZlY3RpdmUgd2F5IG9mIGRlYWxpbmcgd2l0aCB0aGUgYXJndW1lbnQg
Y291bnQgYW5kIGNhbGxlZSBpcyB0byBoYXZlCisgICAgICAgIC8vIHRoZW0gYmUgZXhwbGljaXQg
YXJndW1lbnRzIHRvIHRoaXMgbm9kZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MjIwNworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPQorICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5kaXJlY3RBcmd1bWVudHNTdHJ1Y3R1cmUoKTsKKyAgICAgICAgCisg
ICAgICAgIHVuc2lnbmVkIG1pbkNhcGFjaXR5ID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPm51bVBhcmFtZXRlcnMoKSAtIDE7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q3JlYXRlRGlyZWN0QXJndW1lbnRzIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVu
dHMgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgQXJndW1lbnRzTGVuZ3RoIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aCgpOworICAg
ICAgICAKKyAgICAgICAgTFZhbHVlIGZhc3RPYmplY3Q7CisgICAgICAgIGlmIChsZW5ndGguaXNL
bm93bikgeworICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PERpcmVjdEFy
Z3VtZW50cz4oCisgICAgICAgICAgICAgICAgRGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6
ZShzdGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KSksIHN0cnVjdHVyZSwKKyAgICAg
ICAgICAgICAgICBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBMVmFsdWUgc2l6ZSA9IG1fb3V0LmFkZCgKKyAgICAgICAgICAgICAgICBt
X291dC5zaGwobGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKDMpKSwKKyAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgPSBtX291dC5zZWxlY3QoCisgICAgICAg
ICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQz
MihtaW5DYXBhY2l0eSkpLAorICAgICAgICAgICAgICAgIHNpemUsIG1fb3V0LmNvbnN0SW50MzIo
RGlyZWN0QXJndW1lbnRzOjphbGxvY2F0aW9uU2l6ZShtaW5DYXBhY2l0eSkpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZmFzdE9iamVjdCA9IGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVj
dDxEaXJlY3RBcmd1bWVudHM+KAorICAgICAgICAgICAgICAgIHNpemUsIHN0cnVjdHVyZSwgbV9v
dXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X291dC5zdG9yZTMyKGxlbmd0aC52YWx1ZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG1p
bkNhcGFjaXR5KSwgZmFzdE9iamVjdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbWluQ2FwYWNp
dHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBmYXN0T2JqZWN0
LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpOworICAgICAgICAKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBjYWxsUmVz
dWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7CisgICAgICAgICAg
ICB9LCBsZW5ndGgudmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOworCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKGdldEN1cnJl
bnRDYWxsZWUoKSwgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19jYWxsZWUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKGxlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3RhcnQgPSBBc3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGQ6Om1heChsZW5ndGgua25vd24sIG1pbkNhcGFjaXR5KTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDY0KGFkZHJl
c3NGb3Ioc3RhcnQgKyBpKSksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5E
aXJlY3RBcmd1bWVudHNfc3RvcmFnZVtpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBMVmFsdWUgc3RhY2tCYXNlID0gZ2V0QXJndW1lbnRzU3RhcnQoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0QXJndW1lbnRzIGxvb3AgYm9keSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGVuZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0
QXJndW1lbnRzIGxvb3AgZW5kIikpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmln
aW5hbExlbmd0aDsKKyAgICAgICAgICAgIGlmIChtaW5DYXBhY2l0eSkgeworICAgICAgICAgICAg
ICAgIExWYWx1ZSBjYXBhY2l0eSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMihtaW5DYXBh
Y2l0eSkpLAorICAgICAgICAgICAgICAgICAgICBsZW5ndGgudmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpKTsKKyAgICAgICAgICAgICAgICBM
VmFsdWUgb3JpZ2luYWxMZW5ndGhWYWx1ZSA9IG1fb3V0Lnplcm9FeHRQdHIoY2FwYWNpdHkpOwor
ICAgICAgICAgICAgICAgIG9yaWdpbmFsTGVuZ3RoID0gbV9vdXQuYW5jaG9yKG9yaWdpbmFsTGVu
Z3RoVmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0aFZhbHVlID0g
bV9vdXQuemVyb0V4dFB0cihsZW5ndGgudmFsdWUpOworICAgICAgICAgICAgICAgIG9yaWdpbmFs
TGVuZ3RoID0gbV9vdXQuYW5jaG9yKG9yaWdpbmFsTGVuZ3RoVmFsdWUpOworICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwob3JpZ2luYWxMZW5ndGhWYWx1ZSksIHVuc3Vy
ZShlbmQpLCB1bnN1cmUobG9vcCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3AsIGVuZCk7CisgICAgICAgICAg
ICBMVmFsdWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIG9yaWdpbmFs
TGVuZ3RoKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0lu
ZGV4LCBtX291dC5pbnRQdHJPbmUpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVz
LCBzdGFja0Jhc2UsIGluZGV4KSksCisgICAgICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIHJlc3VsdCwgaW5kZXgpKTsKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAg
ICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKGluZGV4KSwgdW5zdXJlKGVu
ZCksIHVuc3VyZShsb29wKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGVuZCwgbGFzdE5leHQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFy
Z3VtZW50cygpCisgICAgeworICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAg
ICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlU2Nv
cGVkQXJndW1lbnRzKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICB3ZWFrUG9pbnRlcigKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPnNjb3BlZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgIGdldEFyZ3Vt
ZW50c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVl
KCksIHNjb3BlKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUNsb25lZEFyZ3VtZW50cyksIG1fY2FsbEZy
YW1lLAorICAgICAgICAgICAgd2Vha1BvaW50ZXIoCisgICAgICAgICAgICAgICAgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5vdXRPZkJhbmRBcmd1bWVu
dHNTdHJ1Y3R1cmUoKSksCisgICAgICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBnZXRBcmd1
bWVudHNMZW5ndGgoKS52YWx1ZSwgZ2V0Q3VycmVudENhbGxlZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDb3B5UmVz
dCgpCisgICAgeyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBkb0NvcHlSZXN0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJDb3B5UmVzdCBDIGNhbGwiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRmlsbFJlc3RQYXJh
bWV0ZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBhcnJheUxlbmd0aCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKGFycmF5TGVuZ3RoLCBtX291dC5jb25zdEludDMyKDApKSwKKyAg
ICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZG9Db3B5UmVzdCkpOworICAg
ICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
ZG9Db3B5UmVzdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgLy8gQXJndW1lbnRzOiAwOmV4ZWMs
IDE6SlNDZWxsKiBhcnJheSwgMjphcmd1bWVudHMgc3RhcnQsIDM6bnVtYmVyIG9mIGFyZ3VtZW50
cyB0byBza2lwLCA0OmFycmF5IGxlbmd0aAorICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVu
dHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1Nr
aXAoKSk7CisgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25Db3B5UmVzdCksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgbnVtYmVyT2ZB
cmd1bWVudHNUb1NraXAsIGFycmF5TGVuZ3RoKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFJlc3RMZW5ndGgoKQorICAgIHsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm9uWmVyb0xlbmd0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
UmVzdExlbmd0aCBub24gemVybyIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIGNvbnRpbnVhdGlvbiIpKTsK
KyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHplcm9MZW5ndGhSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMigwKSk7CisKKyAgICAgICAgTFZhbHVlIG51bWJlck9m
QXJndW1lbnRzVG9Ta2lwID0gbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKCkpOworICAgICAgICBMVmFsdWUgYXJndW1lbnRzTGVuZ3RoID0gZ2V0QXJndW1l
bnRzTGVuZ3RoKCkudmFsdWU7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZShhcmd1
bWVudHNMZW5ndGgsIG51bWJlck9mQXJndW1lbnRzVG9Ta2lwKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShub25aZXJvTGVuZ3RoKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub25aZXJvTGVuZ3RoLCBj
b250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub25aZXJvTGVuZ3RoUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yihhcmd1bWVudHNMZW5ndGgsIG51bWJlck9mQXJndW1l
bnRzVG9Ta2lwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIHplcm9MZW5ndGhSZXN1bHQsIG5vblpl
cm9MZW5ndGhSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTmV3T2JqZWN0
KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoYWxsb2NhdGVPYmplY3QobV9ub2RlLT5zdHJ1
Y3R1cmUoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVOZXdBcnJheSgpCisgICAg
eworICAgICAgICAvLyBGaXJzdCBzcGVjdWxhdGUgYXBwcm9wcmlhdGVseSBvbiBhbGwgb2YgdGhl
IGNoaWxkcmVuLiBEbyB0aGlzIHVuY29uZGl0aW9uYWxseSB1cCBoZXJlCisgICAgICAgIC8vIGJl
Y2F1c2Ugc29tZSBvZiB0aGUgc2xvdyBwYXRocyBtYXkgb3RoZXJ3aXNlIGZvcmdldCB0byBkbyBp
dC4gSXQncyBzb3J0IG9mIGFyZ3VhYmxlCisgICAgICAgIC8vIHRoYXQgZG9pbmcgdGhlIHNwZWN1
bGF0aW9ucyB1cCBoZXJlIG1pZ2h0IGJlIHVucHJvZml0YWJsZSBmb3IgUkEgLSBzbyB3ZSBjYW4g
Y29uc2lkZXIKKyAgICAgICAgLy8gc2lua2luZyB0aGlzIHRvIGJlbG93IHRoZSBhbGxvY2F0aW9u
IGZhc3QgcGF0aCBpZiB3ZSBmaW5kIHRoYXQgdGhpcyBoYXMgYSBsb3Qgb2YKKyAgICAgICAgLy8g
cmVnaXN0ZXIgcHJlc3N1cmUuCisgICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0g
MDsgb3BlcmFuZEluZGV4IDwgbV9ub2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFu
ZEluZGV4KSk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSk7CisKKyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRp
bWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJyYXlWYWx1ZXMgYXJyYXlWYWx1ZXMgPSBhbGxv
Y2F0ZUpTQXJyYXkoc3RydWN0dXJlLCBudW1FbGVtZW50cyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbV9u
b2RlLT5udW1DaGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgeworICAgICAgICAgICAgICAgIEVk
Z2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5pbmRleGluZ1R5
cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUxMX0JMQU5LX0lOREVYSU5HX1RZUEVTOgor
ICAgICAgICAgICAgICAgIGNhc2UgQUxMX1VOREVDSURFRF9JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmRleGluZyB0
eXBlIik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIEFMTF9ET1VCTEVfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKAorICAgICAgICAgICAgICAgICAgICAgICAg
bG93RG91YmxlKGVkZ2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0
dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW29wZXJhbmRJbmRleF0pOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAg
Y2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5
VmFsdWVzLmJ1dHRlcmZseSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuZm9ySW5k
ZXhpbmdUeXBlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpLT5hdChvcGVyYW5kSW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJDb3JydXB0IGluZGV4aW5nIHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBzZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFtX25vZGUtPm51bUNoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIG1f
b3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSksIG1fY2Fs
bEZyYW1lLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2l6ZV90
IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIG1fbm9kZS0+bnVtQ2hpbGRy
ZW4oKTsKKyAgICAgICAgQVNTRVJUKHNjcmF0Y2hTaXplKTsKKyAgICAgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IHZtKCkuc2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUp
OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpT
VmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51
bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7CisgICAgICAgICAgICBFZGdlIGVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFuZEluZGV4KTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKGJ1ZmZlciAr
IG9wZXJhbmRJbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9y
ZVB0cigKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNjcmF0Y2hTaXplKSwgbV9vdXQu
YWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5KSwgbV9jYWxsRnJhbWUsCisgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291dC5jb25zdEludFB0cihidWZm
ZXIpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5udW1DaGlsZHJlbigp
KSk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCBt
X291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSkpOworICAgICAg
ICAKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVOZXdBcnJheUJ1ZmZlcigpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9u
b2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWdsb2JhbE9iamVj
dC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2Rl
LT5udW1Db25zdGFudHMoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXJyYXlWYWx1ZXMg
YXJyYXlWYWx1ZXMgPSBhbGxvY2F0ZUpTQXJyYXkoc3RydWN0dXJlLCBudW1FbGVtZW50cyk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUqIGRhdGEgPSBjb2RlQmxvY2soKS0+Y29u
c3RhbnRCdWZmZXIobV9ub2RlLT5zdGFydENvbnN0YW50KCkpOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbV9ub2RlLT5udW1Db25zdGFudHMoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICAgICAgaWYg
KGhhc0RvdWJsZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSBiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oZGF0YVtpbmRleF0uYXNOdW1iZXIoKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IEpTVmFsdWU6
OmVuY29kZShkYXRhW2luZGV4XSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCh2YWx1
ZSksCisgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsdWVzLmJ1dHRlcmZseSwKKyAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5pbmRleGluZ1R5cGUo
KSktPmF0KGluZGV4KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAg
IG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlCdWZmZXIpLCBt
X2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSksIG1f
b3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+c3RhcnRDb25zdGFudCgpKSwKKyAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ29uc3RhbnRzKCkpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKQorICAgIHsKKyAgICAgICAgTFZhbHVl
IHB1YmxpY0xlbmd0aCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbigKKyAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55
QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CisgICAgICAgICAgICBBU1NF
UlQoCisgICAgICAgICAgICAgICAgaGFzVW5kZWNpZGVkKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpCisgICAgICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKKyAgICAgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkKKyAgICAgICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZmFzdCBjYXNlIikpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFyZ2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdp
dGhTaXplIGxhcmdlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBmYWlsIGNhc2UiKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TmV3QXJyYXlXaXRoU2l6ZSBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgY29u
dGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHB1YmxpY0xlbmd0aCwgbV9vdXQuY29u
c3RJbnQzMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJVQ1RJT05fTEVOR1RIKSksCisgICAgICAg
ICAgICAgICAgcmFyZWx5KGxhcmdlQ2FzZSksIHVzdWFsbHkoZmFzdENhc2UpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwgbGFy
Z2VDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgcm91bmQgdXAg
dG8gQkFTRV9WRUNUT1JfTEVOIGZvciBuZXcgQXJyYXkoYmxhaCkuCisgICAgICAgICAgICBMVmFs
dWUgdmVjdG9yTGVuZ3RoID0gcHVibGljTGVuZ3RoOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMVmFsdWUgcGF5bG9hZFNpemUgPQorICAgICAgICAgICAgICAgIG1fb3V0LnNobChtX291dC56
ZXJvRXh0KHZlY3Rvckxlbmd0aCwgbV9vdXQuaW50UHRyKSwgbV9vdXQuY29uc3RJbnRQdHIoMykp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5U2l6ZSA9IG1fb3V0
LmFkZCgKKyAgICAgICAgICAgICAgICBwYXlsb2FkU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
ZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoYnV0dGVyZmx5U2l6
ZSwgZmFpbENhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5
ID0gbV9vdXQuc3ViKGVuZE9mU3RvcmFnZSwgcGF5bG9hZFNpemUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oc3RydWN0
dXJlLCBidXR0ZXJmbHksIGZhaWxDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
dXQuc3RvcmUzMihwdWJsaWNMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVi
bGljTGVuZ3RoKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmVjdG9yTGVuZ3RoLCBidXR0
ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChoYXNEb3VibGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBpbml0TG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TmV3QXJyYXlXaXRoU2l6ZSBkb3VibGUgaW5pdCBsb29wIikpOworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGluaXREb25lID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhT
aXplIGRvdWJsZSBpbml0IGRvbmUiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxJbmRleCA9IG1fb3V0LmFuY2hvcih2ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsUG9pbnRlciA9IG1f
b3V0LmFuY2hvcihidXR0ZXJmbHkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKHZlY3Rvckxlbmd0aCksIHVuc3VyZShp
bml0TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGluaXRMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluaXRMb29w
LCBpbml0RG9uZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQucGhpKG1f
b3V0LmludDMyLCBvcmlnaW5hbEluZGV4KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcG9pbnRl
ciA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIG9yaWdpbmFsUG9pbnRlcik7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLAorICAgICAg
ICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIobV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGll
cy5hdEFueUluZGV4KCksIHBvaW50ZXIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBMVmFsdWUgbmV4dEluZGV4ID0gbV9vdXQuc3ViKGluZGV4LCBtX291dC5pbnQzMk9uZSk7
CisgICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleCwgbV9vdXQuYW5j
aG9yKG5leHRJbmRleCkpOworICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGko
cG9pbnRlciwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChwb2ludGVyLCBtX291dC5pbnRQdHJFaWdo
dCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lm5vdFplcm8zMihuZXh0SW5kZXgpLCB1bnN1cmUoaW5pdExvb3ApLCB1bnN1cmUoaW5p
dERvbmUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhpbml0RG9uZSwgaW5pdExhc3ROZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihvYmpl
Y3QpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2UsIGZhaWxDYXNlKTsKKyAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlU3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmNvbnN0SW50UHRyKAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1
cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkp
KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFpbFN0cnVjdHVyZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdElu
dFB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoc2xvd0Nhc2UpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKKyAg
ICAgICAgICAgICAgICBtX291dC5pbnRQdHIsIGxhcmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisg
ICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sy
XS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZVZhbHVlID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFs
KHB1YmxpY0xlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihNSU5fQVJSQVlfU1RPUkFHRV9DT05TVFJV
Q1RJT05fTEVOR1RIKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAg
ICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5n
QWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSwKKyAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHN0cnVjdHVyZSkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5p
bnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUpLCBtX2NhbGxG
cmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCkpOworICAgIH0KKworICAgIHZvaWQg
Y29tcGlsZU5ld1R5cGVkQXJyYXkoKQorICAgIHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IG1fbm9kZS0+dHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUodHlwZSk7CisKKyAg
ICAgICAgICAgIExWYWx1ZSBzaXplID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHNtYWxsRW5vdWdoQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTmV3VHlwZWRBcnJheSBzbWFsbCBlbm91Z2ggY2FzZSIpKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIG5vblplcm9DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFy
cmF5IG5vbi16ZXJvIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBzbG93IGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik5ld1R5cGVkQXJyYXkgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmUoc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihK
U0FycmF5QnVmZmVyVmlldzo6ZmFzdFNpemVMaW1pdCkpLAorICAgICAgICAgICAgICAgIHJhcmVs
eShzbG93Q2FzZSksIHVzdWFsbHkoc21hbGxFbm91Z2hDYXNlKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21hbGxFbm91Z2hDYXNlLCBub25a
ZXJvQ2FzZSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RaZXJvMzIoc2l6
ZSksIHVzdWFsbHkobm9uWmVyb0Nhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm9uWmVyb0Nhc2UsIHNsb3dDYXNlKTsKKworICAgICAgICAgICAg
TFZhbHVlIGJ5dGVTaXplID0KKyAgICAgICAgICAgICAgICBtX291dC5zaGwobV9vdXQuemVyb0V4
dFB0cihzaXplKSwgbV9vdXQuY29uc3RJbnQzMihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpOworICAg
ICAgICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgOCkgeworICAgICAgICAgICAgICAgIGJ5
dGVTaXplID0gbV9vdXQuYml0QW5kKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hZGQoYnl0
ZVNpemUsIG1fb3V0LmNvbnN0SW50UHRyKDcpKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0cl90Pig3KSkpOworICAgICAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3Jh
Z2UoYnl0ZVNpemUsIHNsb3dDYXNlKTsKKworICAgICAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRW
YWx1ZSA9CisgICAgICAgICAgICAgICAgYWxsb2NhdGVPYmplY3Q8SlNBcnJheUJ1ZmZlclZpZXc+
KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBt
X291dC5zdG9yZVB0cihzdG9yYWdlLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1
ZmZlclZpZXdfdmVjdG9yKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIoc2l6ZSwgZmFzdFJl
c3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X2xlbmd0aCk7CisgICAgICAgICAg
ICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5cGVkQXJyYXkpLCBmYXN0UmVz
dWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSk7CisKKyAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVl
KTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIExW
YWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1d
IChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdUeXBlZEFy
cmF5V2l0aFNpemVGb3JUeXBlKHR5cGUpLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgICAgIHNpemUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgYXJn
dW1lbnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoT25lQXJndW1lbnRGb3JUeXBlKHR5
cGUpKSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKHR5cGUpKSwgYXJndW1lbnQpOworCisgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzKSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9u
ID0gbV9ub2RlLT50cmFuc2l0aW9uKCk7CisgICAgICAgIExWYWx1ZSBvYmplY3QgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgb2xkU3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBzZXRTdG9yYWdlKAorICAg
ICAgICAgICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKKyAgICAgICAgICAgICAgICBvYmpl
Y3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLCB0cmFuc2l0aW9uLT5uZXh0KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nT3JDYWxsU3RyaW5nQ29uc3Ry
dWN0b3IoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgeworICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZTogeworICAgICAgICAgICAgTFZhbHVl
IGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nT2JqZWN0Rm9yQ2VsbChtX25vZGUtPmNoaWxkMSgpLCBjZWxsKTsKKyAgICAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZmlsdGVyKG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmdPYmplY3Qp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoY2Vs
bCwgbV9oZWFwcy5KU1dyYXBwZXJPYmplY3RfaW50ZXJuYWxWYWx1ZSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJU
b1N0cmluZyBTdHJpbmdPclN0cmluZ09iamVjdCBub3Qgc3RyaW5nIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRv
U3RyaW5nIFN0cmluZ09yU3RyaW5nT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGNlbGwpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJl
LT5pZCgpKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShu
b3RTdHJpbmcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChtX25vZGUtPmNoaWxkMSgpLCBz
dHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFw
cy5KU1dyYXBwZXJPYmplY3RfaW50ZXJuYWxWYWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCBzaW1wbGVSZXN1bHQsIHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIobV9ub2RlLT5jaGlsZDEoKSwg
U3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3QpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZTsKKyAgICAgICAgICAgIGlm
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgICAg
IHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVkVXNlIGlzIGNlbGwiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3Ry
aW5nIENlbGxVc2UvVW50eXBlZFVzZSBub3Qgc3RyaW5nIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBDZWxs
VXNlL1VudHlwZWRVc2UgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMVmFsdWUgaXNDZWxsUHJlZGljYXRlOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICAgICAgaXNDZWxsUHJlZGljYXRl
ID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aXNDZWxsUHJlZGljYXRlID0gdGhpcy0+aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+
Y2hpbGQxKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGxQcmVkaWNhdGUsIHVu
c3VyZShpc0NlbGwpLCB1bnN1cmUobm90U3RyaW5nKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsLCBub3RTdHJp
bmcpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2ltcGxlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKHZhbHVlKTsKKyAgICAgICAgICAgIExWYWx1ZSBpc1N0cmluZ1ByZWRpY2F0ZTsKKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkgJiBTcGVjU3RyaW5nKSB7
CisgICAgICAgICAgICAgICAgaXNTdHJpbmdQcmVkaWNhdGUgPSBpc1N0cmluZyh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZ1ByZWRpY2F0ZSwgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShub3RTdHJpbmcpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90U3RyaW5nLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIG9wZXJh
dGlvbjsKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxs
VXNlKQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihtX25vZGUt
Pm9wKCkgPT0gVG9TdHJpbmcgPyBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbCA6IG9wZXJhdGlvbkNh
bGxTdHJpbmdDb25zdHJ1Y3Rvck9uQ2VsbCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmlu
ZyA/IG9wZXJhdGlvblRvU3RyaW5nIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yKTsK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNpbXBsZVJlc3VsdCwgY29udmVy
dGVkUmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlVG9QcmltaXRpdmUoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJp
bWl0aXZlIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNPYmplY3RDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJUb1ByaW1pdGl2ZSBvYmplY3QgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1By
aW1pdGl2ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDM+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZCht
X291dC5hbmNob3IodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzT2JqZWN0Q2FzZSk7
CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkpOworICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICB1bnN1cmUoaXNPYmplY3RDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNPYmpl
Y3RDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3Iodm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25Ub1ByaW1pdGl2ZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpKTsKKyAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1ha2VSb3Bl
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBraWRzWzNdOworICAgICAgICB1bnNpZ25lZCBudW1L
aWRzOworICAgICAgICBraWRzWzBdID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAga2lkc1sxXSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICBraWRzWzJdID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIG51bUtpZHMgPSAzOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAga2lkc1syXSA9IDA7CisgICAgICAgICAgICBudW1LaWRzID0gMjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk1ha2VSb3BlIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYWtlUm9wZSBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBNYXJrZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9CisgICAgICAgICAgICB2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2Jq
ZWN0V2l0aERlc3RydWN0b3Ioc2l6ZW9mKEpTUm9wZVN0cmluZykpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKCZhbGxvY2F0b3IpLAorICAgICAgICAgICAgdm0oKS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCksCisgICAgICAgICAgICBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9y
ZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtS2lkczsgKytpKQorICAgICAgICAg
ICAgbV9vdXQuc3RvcmVQdHIoa2lkc1tpXSwgcmVzdWx0LCBtX2hlYXBzLkpTUm9wZVN0cmluZ19m
aWJlcnNbaV0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1LaWRzOyBpIDwgSlNSb3Bl
U3RyaW5nOjpzX21heEludGVybmFsUm9wZUxlbmd0aDsgKytpKQorICAgICAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgcmVzdWx0LCBtX2hlYXBzLkpTUm9wZVN0cmluZ19m
aWJlcnNbaV0pOworICAgICAgICBMVmFsdWUgZmxhZ3MgPSBtX291dC5sb2FkMzIoa2lkc1swXSwg
bV9oZWFwcy5KU1N0cmluZ19mbGFncyk7CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5s
b2FkMzIoa2lkc1swXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgbnVtS2lkczsgKytpKSB7CisgICAgICAgICAgICBmbGFncyA9IG1f
b3V0LmJpdEFuZChmbGFncywgbV9vdXQubG9hZDMyKGtpZHNbaV0sIG1faGVhcHMuSlNTdHJpbmdf
ZmxhZ3MpKTsKKyAgICAgICAgICAgIENoZWNrVmFsdWUqIGxlbmd0aENoZWNrID0gbV9vdXQuc3Bl
Y3VsYXRlQWRkKAorICAgICAgICAgICAgICAgIGxlbmd0aCwgbV9vdXQubG9hZDMyKGtpZHNbaV0s
IG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7CisgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9u
KGxlbmd0aENoZWNrLCBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7
CisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGhDaGVjazsKKyAgICAgICAgfQorICAgICAgICBt
X291dC5zdG9yZTMyKAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKG1fb3V0LmNvbnN0SW50MzIo
SlNTdHJpbmc6OklzOEJpdCksIGZsYWdzKSwKKyAgICAgICAgICAgIHJlc3VsdCwgbV9oZWFwcy5K
U1N0cmluZ19mbGFncyk7CisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLCByZXN1bHQsIG1f
aGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IocmVzdWx0KTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWU7CisgICAgICAg
IHN3aXRjaCAobnVtS2lkcykgeworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtlUm9wZTIsIGxvY2F0aW9uc1sw
XS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LCBr
aWRzWzBdLCBraWRzWzFdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAg
ICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtl
Um9wZTMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbM10uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNb
MV0sIGtpZHNbMl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIG51bWJlciBvZiBjaGlsZHJl
biIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
bV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBm
YXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGZhc3QgcGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0Lmxv
YWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSksCisgICAgICAg
ICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwg
c2xvd1BhdGgpOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9v
dXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBpczhCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFN0cmluZyA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBpczE2Qml0ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgMTYtYml0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGJpdHNDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyBiaXRuZXNzIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgYmlnQ2hhcmFjdGVyID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBT
dHJpbmcgYmlnIGNoYXJhY3RlciIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgp
KSksCisgICAgICAgICAgICB1bnN1cmUoaXMxNkJpdCksIHVuc3VyZShpczhCaXQpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOworICAgICAg
ICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXI4Qml0ID0gbV9vdXQuYW5jaG9yKAor
ICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAorICAgICAg
ICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpLAorICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkp
OworICAgICAgICBtX291dC5qdW1wKGJpdHNDb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzMTZCaXQsIGJpZ0NoYXJhY3Rlcik7CisKKyAgICAgICAg
TFZhbHVlIGNoYXIxNkJpdFZhbHVlID0gbV9vdXQubG9hZDE2WmVyb0V4dDMyKAorICAgICAgICAg
ICAgbV9vdXQuYmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2
LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICBwcm92
ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFy
MTZCaXQgPSBtX291dC5hbmNob3IoY2hhcjE2Qml0VmFsdWUpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoY2hhcjE2Qml0VmFsdWUsIG1fb3V0
LmNvbnN0SW50MzIoMHgxMDApKSwKKyAgICAgICAgICAgIHJhcmVseShiaWdDaGFyYWN0ZXIpLCB1
c3VhbGx5KGJpdHNDb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhiaWdDaGFyYWN0ZXIsIGJpdHNDb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgND4gcmVzdWx0czsKKyAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKSwKKyAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLCBjaGFyMTZCaXRWYWx1ZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpdHND
b250aW51YXRpb24sIHNsb3dQYXRoKTsKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgY2hh
cmFjdGVyID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBjaGFyOEJpdCwgY2hhcjE2Qml0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICBMVmFsdWUgc21hbGxTdHJpbmdzID0gbV9vdXQuY29uc3RJbnRQ
dHIodm0oKS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubG9hZFB0ciht
X291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmlu
Z3MsIHNtYWxsU3RyaW5ncywgbV9vdXQuemVyb0V4dFB0cihjaGFyYWN0ZXIpKSkpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgc3Bl
Y3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnRQdHJaZXJvKSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGdsb2JhbE9iamVjdC0+c3RyaW5nUHJv
dG90eXBlQ2hhaW5Jc1NhbmUoKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNv
dWxkIGJlIGNhcHR1cmVkIHVzaW5nIGEgU3BlY3VsYXRpb24gbW9kZSB0aGF0IG1lYW5zCisgICAg
ICAgICAgICAgICAgLy8gIm91dC1vZi1ib3VuZHMgbG9hZHMgcmV0dXJuIGEgdHJpdmlhbCB2YWx1
ZSIsIHNvbWV0aGluZyBsaWtlCisgICAgICAgICAgICAgICAgLy8gU2FuZUNoYWluT3V0T2ZCb3Vu
ZHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDY2OAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fZ3JhcGgu
d2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGUoKS0+
c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5lZ2F0aXZlSW5kZXggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBuZWdhdGl2ZSBpbmRleCIpKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybyksCisgICAgICAgICAgICAgICAg
ICAgIHJhcmVseShuZWdhdGl2ZUluZGV4KSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmVnYXRpdmVJ
bmRleCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAg
ICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbFN0cmlu
Z0ludCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgpCisgICAgeworICAgICAgICBMQmFzaWNC
bG9jayBpczhCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgOC1i
aXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXMxNkJpdCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiU3RyaW5nQ2hhckNvZGVBdCAxNi1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29k
ZUF0IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBVbmNv
dW50YWJsZSwgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAor
ICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCkpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8z
MigKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJp
bmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihT
dHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpczE2Qml0KSwg
dW5zdXJlKGlzOEJpdCkpOworICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBt
X2hlYXBzLmNoYXJhY3RlcnM4LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAg
ICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlzMTZCaXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2hhcjE2Qml0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQu
bG9hZDE2WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBz
LmNoYXJhY3RlcnMxNiwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCisgICAgICAg
ICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAgICAgc2V0SW50MzIobV9vdXQu
cGhpKG1fb3V0LmludDMyLCBjaGFyOEJpdCwgY2hhcjE2Qml0KSk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlU3RyaW5nRnJvbUNoYXJDb2RlKCkKKyAgICB7CisgICAgICAgIEVkZ2UgY2hpbGRF
ZGdlID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjaGlsZEVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2
bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25TdHJpbmdGcm9tQ2hhckNvZGVVbnR5cGVkKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAg
ICAgICAgbG93SlNWYWx1ZShjaGlsZEVkZ2UpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCBjaGlsZEVkZ2UudXNlS2luZCgpID09IEludDMyVXNlKTsKKwor
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihjaGlsZEVkZ2UpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc21hbGxJbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
dHJpbmdGcm9tQ2hhckNvZGUgc21hbGwgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdGcm9tQ2hhckNvZGUgc2xv
dyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKHZhbHVlLCBt
X291dC5jb25zdEludDMyKDB4ZmYpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkoc21hbGxJbnRDYXNlKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhzbWFsbEludENhc2UsIHNsb3dDYXNlKTsKKworICAgICAgICBMVmFsdWUg
c21hbGxTdHJpbmdzID0gbV9vdXQuY29uc3RJbnRQdHIodm0oKS5zbWFsbFN0cmluZ3Muc2luZ2xl
Q2hhcmFjdGVyU3RyaW5ncygpKTsKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1f
b3V0LmxvYWRQdHIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzLCBzbWFsbFN0cmluZ3MsIG1fb3V0Lnplcm9FeHRQdHIodmFsdWUpKSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJl
c3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgIExWYWx1
ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJpbmdGcm9tQ2hhckNvZGUpLCBtX2NhbGxGcmFtZSwg
dmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRCeU9mZnNldCgpCisgICAgewor
ICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGEoKTsKKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUobG9hZFByb3BlcnR5KAorICAgICAg
ICAgICAgbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVy
LCBkYXRhLm9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIo
KQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0dGVyX2dldHRlcikpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuR2V0dGVyU2V0
dGVyX3NldHRlcikpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNdWx0aUdldEJ5T2Zm
c2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgCisgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9u
b2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOworCisgICAgICAgIGlmIChkYXRhLmNhc2VzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhp
IGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAg
ICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ssIDI+IGJsb2NrcyhkYXRh
LmNhc2VzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6
ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNdWx0aUdldEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBleGl0
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGZhaWwiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVs
dGlHZXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
U3dpdGNoQ2FzZSwgMj4gY2FzZXM7CisgICAgICAgIFN0cnVjdHVyZVNldCBiYXNlU2V0OworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBnZXRDYXNlLnNldCgpLnNpemUoKTsgai0tOykgewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2V0Q2FzZS5zZXQoKVtqXTsK
KyAgICAgICAgICAgICAgICBiYXNlU2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9j
a3NbaV0sIFdlaWdodCgxKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1f
b3V0LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwgY2FzZXMsIGV4aXQsIFdlaWdodCgwKSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1bHRzOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldENhc2UgZ2V0Q2FzZSA9IGRhdGEuY2FzZXNbaV07CisgICAg
ICAgICAgICBHZXRCeU9mZnNldE1ldGhvZCBtZXRob2QgPSBnZXRDYXNlLm1ldGhvZCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS5jYXNlcy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3
aXRjaCAobWV0aG9kLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhv
ZDo6SW52YWxpZDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobWV0aG9kLmNvbnN0YW50KCktPnZh
bHVlKCkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQ6CisgICAgICAgICAgICBjYXNlIEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkRnJvbVByb3RvdHlwZTogeworICAgICAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eUJhc2U7CisgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5raW5kKCkgPT0g
R2V0QnlPZmZzZXRNZXRob2Q6OkxvYWQpCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFz
ZSA9IGJhc2U7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eUJhc2UgPSB3ZWFrUG9pbnRlcihtZXRob2QucHJvdG90eXBlKCktPnZhbHVlKCkuYXNDZWxs
KCkpOworICAgICAgICAgICAgICAgIGlmICghaXNJbmxpbmVPZmZzZXQobWV0aG9kLm9mZnNldCgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gbG9hZEJ1dHRlcmZseVJlYWRP
bmx5KHByb3BlcnR5QmFzZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbG9hZFByb3BlcnR5
KAorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UsIGRhdGEuaWRlbnRpZmllck51bWJl
ciwgbWV0aG9kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3IocmVzdWx0KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkp
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1f
b3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1dEJ5
T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbV9ub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgc3RvcmVQcm9wZXJ0eSgK
KyAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSksCisgICAgICAgICAgICBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIGRhdGEu
b2Zmc2V0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgp
CisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIAorICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVs
dGlQdXRCeU9mZnNldERhdGEoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9j
aywgMj4gYmxvY2tzKGRhdGEudmFyaWFudHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0QnlPZmZzZXQgY2FzZSAiLCBpKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0
QnlPZmZzZXQgZmFpbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKKyAgICAgICAgU3Ry
dWN0dXJlU2V0IGJhc2VTZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCB2YXJpYW50ID0g
ZGF0YS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHZhcmlhbnQu
b2xkU3RydWN0dXJlKCkuc2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpW2pdOworICAgICAgICAgICAgICAg
IGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3
aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1
Y3Rpb24oCisgICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRhdGEudmFyaWFudHMuc2l6
ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBQ
dXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKKworICAgICAgICAgICAg
Y2hlY2tJbmZlcnJlZFR5cGUobV9ub2RlLT5jaGlsZDIoKSwgdmFsdWUsIHZhcmlhbnQucmVxdWly
ZWRUeXBlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZTsKKyAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
eworICAgICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkK
KyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGJhc2U7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVy
KGJhc2UpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
cGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9j
aygpLCBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCksIHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0b3Jh
Z2UgPSBzdG9yYWdlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgdmFy
aWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5vbGRTdHJ1Y3R1cmVG
b3JUcmFuc2l0aW9uKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworCisgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5pbmRleGluZ1R5
cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBl
SW5mbygpLmlubGluZVR5cGVGbGFncygpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkuaW5saW5lVHlwZUZsYWdzKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUluZm8oKS50eXBlKCkgPT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS50eXBlKCkpOworICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh2YXJpYW50
Lm5ld1N0cnVjdHVyZSgpKSwgYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVl
LCBzdG9yYWdlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24pOworICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1
YnNldE9mKGJhc2VTZXQpKQorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgp
CisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSht
X25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVQdXRHbG9iYWxWYXJpYWJsZSgpCisgICAgeworICAgICAgICBtX291dC5zdG9yZTY0KAorICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuYWJzb2x1dGUobV9u
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVO
b3RpZnlXcml0ZSgpCisgICAgeworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUt
PndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52
YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIG5vdCBpbnZhbGlk
YXRlZCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmFic29sdXRl
KHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5lcXVhbChzdGF0ZSwgbV9vdXQuY29uc3RJbnQzMihJc0ludmFsaWRhdGVkKSks
CisgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc05vdEludmFsaWRh
dGVkKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSwgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNldCkp
OworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRDYWxsZWUoKQorICAgIHsKKyAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoSlNTdGFjazo6Q2FsbGVlKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRBcmd1bWVudENvdW50KCkKKyAgICB7Cisg
ICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFNjb3BlKCkKKyAgICB7
CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpLCBtX2hlYXBzLkpTRnVuY3Rpb25fc2NvcGUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlU2tpcFNjb3BlKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0
cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTU2NvcGVfbmV4dCkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRDbG9zdXJlVmFyKCkKKyAgICB7CisgICAgICAg
IHNldEpTVmFsdWUoCisgICAgICAgICAgICBtX291dC5sb2FkNjQoCisgICAgICAgICAgICAgICAg
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW21fbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKV0p
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0Q2xvc3VyZVZhcigpCisgICAgewor
ICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMigpKSwKKyAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW21fbm9kZS0+c2NvcGVP
ZmZzZXQoKS5vZmZzZXQoKV0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRGcm9t
QXJndW1lbnRzKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoCisgICAgICAgICAgICBtX291
dC5sb2FkNjQoCisgICAgICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAg
ICAgICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2Fw
dHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgK
KyAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfc3RvcmFnZVttX25vZGUtPmNhcHR1cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUVxKCkKKyAgICB7CisgICAg
ICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKKyAgICAgICAgICAgIHx8
IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDUyUmVwVXNlKQorICAgICAgICAgICAgfHwgbV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoRG91YmxlUmVwVXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0Jp
bmFyeVVzZUtpbmQoQm9vbGVhblVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKFN5bWJvbFVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFN0cmluZ0lkZW50VXNlKQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3RyaW5nVXNlKSkgeworICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlLCBPYmplY3RPck90aGVyVXNlKSkgeworICAgICAg
ICAgICAgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCksIG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0T3JPdGhlclVzZSwg
T2JqZWN0VXNlKSkgeworICAgICAgICAgICAgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0
KG1fbm9kZS0+Y2hpbGQxKCksIG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZSgKKyAg
ICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVFcSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gT3RoZXJVc2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMSgpLCBTcGVjT3RoZXIpKTsKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDIoKSwgQWxsQ2Vs
bHNBcmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE90aGVyVXNlKSB7CisgICAgICAgICAgICBBU1NFUlQo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDIoKSwgU3BlY090aGVy
KSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+
Y2hpbGQxKCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpCisgICAgeworICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CisgICAgICAgICAgICBz
ZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50NTJSZXBVc2UpKSB7CisgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKKyAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwg
a2luZCk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBraW5kKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwobGVmdCwgcmln
aHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKERvdWJsZVJlcFVzZSkpIHsKKyAgICAgICAgICAg
IHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNlKSkgeworICAgICAgICAgICAgc2V0Qm9vbGVh
bigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dTdHJpbmdJZGVudChtX25vZGUtPmNo
aWxkMSgpKSwgbG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChTdHJpbmdVc2UpKSB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RUcml2aWFsbHlFcXVhbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcS9TdHJpbmcgbm90IHRy
aXZpYWxseSBlcXVhbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEvU3RyaW5nIGNvbnRp
bnVhdGlvbiIpKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG1fbm9kZS0+Y2hpbGQx
KCksIGxlZnQpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsZWZ0LCByaWdodCksIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobm90VHJpdmlhbGx5RXF1YWxDYXNlKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5RXF1YWxDYXNl
LCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcobV9ub2RlLT5j
aGlsZDIoKSwgcmlnaHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHN0cmluZ3NFcXVhbChsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChPYmplY3RVc2UsIFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29s
ZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBs
b3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5
cGVkVXNlLCBPYmplY3RVc2UpKSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0
KG1fbm9kZS0+Y2hpbGQyKCkpLAorICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoT2JqZWN0VXNlKSkgeworICAgICAgICAgICAg
c2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAg
ICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAg
ICAgICAgbG93Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoQm9vbGVhblVzZSkpIHsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAg
ICAgICAgICAgbV9vdXQuZXF1YWwobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgbG93Qm9v
bGVhbihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN5bWJvbFVzZSkpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICAgICAgTFZhbHVlIGxlZnRTdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihsZWZ0LCBtX2hl
YXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRTdHJpbmdJ
bXBsID0gbV9vdXQubG9hZFB0cihyaWdodCwgbV9oZWFwcy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwor
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0U3RyaW5nSW1wbCwgcmlnaHRT
dHJpbmdJbXBsKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChNaXNjVXNlLCBVbnR5cGVkVXNlKQor
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSwgTWlzY1Vz
ZSkpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRV
c2UsIE5vdFN0cmluZ1ZhclVzZSkKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKE5vdFN0cmluZ1ZhclVzZSwgU3RyaW5nSWRlbnRVc2UpKSB7CisgICAgICAgICAgICBFZGdl
IGxlZnRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihTdHJpbmdJZGVudFVzZSk7CisgICAgICAgICAg
ICBFZGdlIHJpZ2h0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3IoTm90U3RyaW5nVmFyVXNlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dTdHJpbmdJZGVudChsZWZ0
RWRnZSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHRWYWx1ZSA9IGxvd0pTVmFsdWUocmlnaHRF
ZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJl
U3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1ZhciBpcyBzdHJpbmcg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1Zh
ciBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0NlbGwocmlnaHRWYWx1
ZSwgcHJvdmVuVHlwZShyaWdodEVkZ2UpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXNDZWxs
Q2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmlu
Z0Nhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90U3RyaW5nUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICAgICAgaXNTdHJpbmcocmlnaHRWYWx1ZSwgcHJvdmVuVHlwZShyaWdodEVk
Z2UpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0
cmluZ0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291
dC5sb2FkUHRyKHJpZ2h0VmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQocmlnaHRFZGdlLCByaWdodFZhbHVlLCByaWdodCk7Cisg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpc1N0cmluZ1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0
LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIG5vdFN0cmluZ1Jlc3VsdCwgaXNTdHJpbmdSZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAg
SlNWYWx1ZSBjb25zdGFudCA9IG1fbm9kZS0+Y2hpbGQyKCktPmFzSlNWYWx1ZSgpOworCisgICAg
ICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAg
ICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50KSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlQ29tcGFyZUxlc3MoKQorICAgIHsKKyAgICAgICAgY29tcGFyZSgKKyAgICAg
ICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sZXNzVGhhbihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmRvdWJsZUxlc3NUaGFuKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlTGVzcyk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVMZXNzRXEoKQorICAgIHsKKyAgICAgICAgY29tcGFyZSgKKyAg
ICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX291dC5sZXNzVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgfSwKKyAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlcigpCisgICAgewor
ICAgICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmdyZWF0ZXJUaGFuKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRlclRo
YW4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0
ZXJFcSgpCisgICAgeworICAgICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmdyZWF0
ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
WyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5sb2dpY2FsTm90KGJvb2xpZnkobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKQorICAgIHsKKyAgICAgICAgTm9kZSog
bm9kZSA9IG1fbm9kZTsKKyAgICAgICAgdW5zaWduZWQgbnVtQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOworCisgICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisKKyAgICAgICAgdW5zaWduZWQgZnJhbWVTaXplID0g
SlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIG51bUFyZ3M7CisgICAgICAgIHVuc2lnbmVk
IGFsaWduZWRGcmFtZVNpemUgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1l
bnRSZWdpc3RlcnMoKSwgZnJhbWVTaXplKTsKKworICAgICAgICAvLyBKUy0+SlMgY2FsbGluZyBj
b252ZW50aW9uIHJlcXVpcmVzIHRoYXQgdGhlIGNhbGxlciBhbGxvd3MgdGhpcyBtdWNoIHNwYWNl
IG9uIHRvcCBvZiBzdGFjayB0bworICAgICAgICAvLyBnZXQgdHJhc2hlZCBieSB0aGUgY2FsbGVl
LCBldmVuIGlmIG5vdCBhbGwgb2YgdGhhdCBzcGFjZSBpcyB1c2VkIHRvIHBhc3MgYXJndW1lbnRz
LiBXZSB0ZWxsCisgICAgICAgIC8vIEIzIHRoaXMgZXhwbGljaXRseSBmb3IgdHdvIHJlYXNvbnM6
CisgICAgICAgIC8vCisgICAgICAgIC8vIC0gV2Ugd2lsbCBvbmx5IHBhc3MgZnJhbWVTaXplIHdv
cnRoIG9mIHN0dWZmLgorICAgICAgICAvLyAtIFRoZSB0cmFzaGVkIHN0YWNrIGd1YXJhbnRlZSBp
cyBsb2dpY2FsbHkgc2VwYXJhdGUgZnJvbSB0aGUgYWN0IG9mIHBhc3NpbmcgYXJndW1lbnRzLCBz
byB3ZQorICAgICAgICAvLyAgIHNob3VsZG4ndCByZWx5IG9uIEFpciB0byBpbmZlciB0aGUgdHJh
c2hlZCBzdGFjayBwcm9wZXJ0eSBiYXNlZCBvbiB0aGUgYXJndW1lbnRzIGl0IGVuZHMKKyAgICAg
ICAgLy8gICB1cCBzZWVpbmcuCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KGFsaWduZWRGcmFtZVNpemUpOworCisgICAgICAgIC8vIENvbGxlY3QgdGhlIGFyZ3VtZW50cywg
c2luY2UgdGhpcyBjYW4gZ2VuZXJhdGUgY29kZSBhbmQgd2Ugd2FudCB0byBnZW5lcmF0ZSBpdCBi
ZWZvcmUgd2UgZW1pdAorICAgICAgICAvLyB0aGUgY2FsbC4KKyAgICAgICAgVmVjdG9yPENvbnN0
cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
Y2FsbGVlIGdvZXMgaW50byBHUFIwIGJlY2F1c2UgdGhhdCdzIHdoZXJlIHRoZSBzbG93IHBhdGgg
dGh1bmtzIGV4cGVjdCB0aGUKKyAgICAgICAgLy8gY2FsbGVlIHRvIGJlLgorICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6cmVnVDApKSk7CisKKyAgICAgICAgYXV0byBhZGRBcmd1bWVudCA9IFsmXSAoTFZhbHVl
IHZhbHVlLCBWaXJ0dWFsUmVnaXN0ZXIgcmVnLCBpbnQgb2Zmc2V0KSB7CisgICAgICAgICAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tU1AgPQorICAgICAgICAgICAgICAgIChyZWcub2Zmc2V0KCkgLSBK
U1N0YWNrOjpDYWxsZXJGcmFtZUFuZFBDU2l6ZSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsg
b2Zmc2V0OworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHZh
bHVlLCBWYWx1ZVJlcDo6c3RhY2tBcmd1bWVudChvZmZzZXRGcm9tU1ApKSk7CisgICAgICAgIH07
CisKKyAgICAgICAgYWRkQXJndW1lbnQoanNDYWxsZWUsIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNr
OjpDYWxsZWUpLCAwKTsKKyAgICAgICAgYWRkQXJndW1lbnQobV9vdXQuY29uc3RJbnQzMihudW1B
cmdzKSwgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpLCBQYXlsb2FkT2Zm
c2V0KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKKyAg
ICAgICAgICAgIGFkZEFyZ3VtZW50KGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxICsgaSkpLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSwgMCk7CisKKyAgICAgICAg
UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Cisg
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFZlY3Rvcihhcmd1bWVudHMpOworCisgICAgICAgIFJl
ZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAg
ICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworICAgICAg
ICAKKyAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNo
UmVnaXN0ZXJzKCkpOworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNl
dDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJl
c3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsK
KworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25P
ZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBzdGF0ZS0+
aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CisKKyAg
ICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uRm9yVW53
aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7CisKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmUz
MigKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKworICAgICAgICAg
ICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVs
UHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNs
b3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisK
KyAgICAgICAgICAgICAgICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAg
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUklu
Zm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwg
PSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3QgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdCA6IENh
bGxMaW5rSW5mbzo6Q2FsbCwKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtcGFyYW1zLnByb2Mo
KS5mcmFtZVNpemUoKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAgICAg
ICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVm
ZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbGlua0NhbGwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIo
bGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2Fs
bChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor
CisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlVGFpbENhbGwoKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAg
ICAgdW5zaWduZWQgbnVtQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworCisgICAgICAg
IExWYWx1ZSBqc0NhbGxlZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIAorICAgICAgICAvLyBXZSB3YW50IEIzIHRvIGdpdmUgdXMgYWxsIG9mIHRo
ZSBhcmd1bWVudHMgdXNpbmcgd2hhdGV2ZXIgbWVjaGFuaXNtIGl0IHRoaW5rcyBpcworICAgICAg
ICAvLyBjb252ZW5pZW50LiBUaGUgZ2VuZXJhdG9yIHRoZW4gc2h1ZmZsZXMgdGhvc2UgYXJndW1l
bnRzIGludG8gb3VyIG93biBjYWxsIGZyYW1lLAorICAgICAgICAvLyBkZXN0cm95aW5nIG91ciBm
cmFtZSBpbiB0aGUgcHJvY2Vzcy4KKworICAgICAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2
ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBleGNlcHRpb25zLiBBIHRhaWwgY2FsbCBpcyBv
bmx5IGEKKyAgICAgICAgLy8gdGFpbCBjYWxsIGlmIGl0IGlzIG5vdCBpbnNpZGUgYSB0cnkgYmxv
Y2suCisKKyAgICAgICAgVmVjdG9yPENvbnN0cmFpbmVkVmFsdWU+IGFyZ3VtZW50czsKKworICAg
ICAgICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoanNDYWxsZWUsIFZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6cmVnVDApKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG51bUFyZ3M7ICsraSkgeworICAgICAgICAgICAgLy8gTm90ZTogd2UgY291bGQgbGV0IHRo
ZSBzaHVmZmxlciBkbyBib3hpbmcgZm9yIHVzLCBidXQgaXQncyBub3Qgc3VwZXIgY2xlYXIgdGhh
dCB0aGlzCisgICAgICAgICAgICAvLyB3b3VsZCBiZSBiZXR0ZXIuIEFsc28sIGlmIHdlIHdhbnRl
ZCB0byBkbyB0aGF0LCB0aGVuIHdlJ2QgaGF2ZSB0byB0ZWFjaCB0aGUgc2h1ZmZsZXIKKyAgICAg
ICAgICAgIC8vIHRoYXQgMzItYml0IHZhbHVlcyBjb3VsZCBsYW5kIGF0IDQtYnl0ZSBhbGlnbm1l
bnQgYnV0IG5vdCA4LWJ5dGUgYWxpZ25tZW50LgorICAgICAgICAgICAgCisgICAgICAgICAgICBD
b25zdHJhaW5lZFZhbHVlIGNvbnN0cmFpbmVkVmFsdWUoCisgICAgICAgICAgICAgICAgbG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksCisgICAgICAgICAgICAgICAg
VmFsdWVSZXA6Oldhcm1BbnkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdHJh
aW5lZFZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hw
b2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZFZlY3Rvcihhcmd1bWVudHMpOworCisgICAgICAgIC8vIFByZXZlbnQgYW55IG9mIHRoZSBhcmd1
bWVudHMgZnJvbSB1c2luZyB0aGUgc2NyYXRjaCByZWdpc3Rlci4KKyAgICAgICAgcGF0Y2hwb2lu
dC0+Y2xvYmJlckVhcmx5KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisK
KyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0ZWxsIHRoZSBwYXRjaHBvaW50IHRoYXQgd2Ug
d2lsbCBjbG9iYmVyIHJlZ2lzdGVycywgc2luY2Ugd2Ugd29uJ3QgcmV0dXJuCisgICAgICAgIC8v
IGFueXdheS4KKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luRGVz
Y3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRl
OworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1Nj
cmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgg
PSBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdp
bik7CisKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsK
KyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBzdGF0ZS0+aml0Q29kZS0+
Y29tbW9uLmZyYW1lUmVnaXN0ZXJDb3VudDsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5j
YWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihHUFJJbmZvOjpyZWdUMCwgRGF0YUZvcm1hdEpT
KTsKKworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyAr
K2kpCisgICAgICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MuYXBwZW5kKHBhcmFtc1sx
ICsgaV0ucmVjb3ZlcnlGb3JKU1ZhbHVlKCkpOworCisgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CisKKyAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKCk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJl
bFB0ciB0YXJnZXRUb0NoZWNrOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBz
bG93UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5w
cmVwYXJlRm9yVGFpbENhbGwoKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2Fs
bCBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwoKTsKKworICAgICAgICAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBZZXMsIHRoaXMgaXMgcmVhbGx5
IG5lY2Vzc2FyeS4gWW91IGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBhIGhvc3QgY2FsbCBv
biB0aGUKKyAgICAgICAgICAgICAgICAvLyBzbG93IHBhdGguIFRoYXQnbGwgcm91dGUgdXMgdG8g
bG9va3VwRXhjZXB0aW9uSGFuZGxlcigpLCB3aGljaCB1bndpbmRzIHN0YXJ0aW5nCisgICAgICAg
ICAgICAgICAgLy8gd2l0aCB0aGUgY2FsbCBzaXRlIGluZGV4IG9mIG91ciBmcmFtZS4gQmFkIHRo
aW5ncyBoYXBwZW4gaWYgaXQncyBub3Qgc2V0LgorICAgICAgICAgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0
ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworCisgICAgICAgICAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdz
KEpTVmFsdWVSZWdzKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICAgICAgc2xvd1BhdGhT
aHVmZmxlci5wcmVwYXJlRm9yU2xvd1BhdGgoKTsKKworICAgICAgICAgICAgICAgIGppdC5tb3Zl
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdU
Mik7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0gaml0Lm5l
YXJDYWxsKCk7CisKKyAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJl
dHVybkZyb21UYWlsQ2FsbCk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVw
Q2FsbChDYWxsTGlua0luZm86OlRhaWxDYWxsLCBjb2RlT3JpZ2luLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5j
b2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGws
IEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxs
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFy
Z2V0VG9DaGVjayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mTmVhckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKQorICAgIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHRoaXNBcmcgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGpz
QXJndW1lbnRzID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBmb3J3YXJkaW5nID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgorICAgICAgICAgICAgZm9yd2FyZGluZyA9IHRydWU7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiYmFkIG5vZGUgdHlwZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNo
cG9pbnQoSW50NjQpOworCisgICAgICAgIC8vIEFwcGVuZCB0aGUgZm9ybXMgb2YgdGhlIGFyZ3Vt
ZW50cyB0aGF0IHdlIHdpbGwgdXNlIGJlZm9yZSBhbnkgY2xvYmJlcmluZyBoYXBwZW5zLgorICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICAgICAgaWYgKGpzQXJndW1lbnRzKQorICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kU29tZVJlZ2lzdGVyKGpzQXJndW1lbnRzKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kU29tZVJlZ2lzdGVyKHRoaXNBcmcpOworCisgICAgICAgIGlmICghZm9yd2FyZGluZykg
eworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGVtIGFnYWluIGZvciBhZnRlciBjbG9iYmVy
aW5nLiBOb3RlIHRoYXQgdGhlIGNvbXBpbGVyIG1heSBhc2sgdXMgdG8gdXNlIGEKKyAgICAgICAg
ICAgIC8vIGRpZmZlcmVudCByZWdpc3RlciBmb3IgdGhlIGxhdGUgZm9yIHRoZSBwb3N0LWNsb2Ji
ZXJpbmcgdmVyc2lvbiBvZiB0aGUgdmFsdWUuIFRoaXMgZ2l2ZXMKKyAgICAgICAgICAgIC8vIHRo
ZSBjb21waWxlciBhIGNoYW5jZSB0byBzcGlsbCB0aGVzZSB2YWx1ZXMgd2l0aG91dCBoYXZpbmcg
dG8gYnVybiBhbnkgY2FsbGVlLXNhdmVzLgorICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5k
KGpzQ2FsbGVlLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworICAgICAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKGpzQXJndW1lbnRzLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKHRoaXNBcmcsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Cisg
ICAgICAgIH0KKworICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhj
ZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9u
cyhwYXRjaHBvaW50KTsKKyAgICAgICAgCisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwor
ICAgICAgICBwYXRjaHBvaW50LT5yZXN1bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgbWluaW11bSBh
bW91bnQgb2YgY2FsbCBhcmcgYXJlYSBzdGFjayBzcGFjZSB0aGF0IGFsbCBKUy0+SlMgY2FsbHMg
YWx3YXlzIGhhdmUuCisgICAgICAgIHVuc2lnbmVkIG1pbmltdW1KU0NhbGxBcmVhU2l6ZSA9Cisg
ICAgICAgICAgICBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKworICAgICAgICAgICAgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpOworCisgICAgICAgIG1fcHJvYy5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKG1p
bmltdW1KU0NhbGxBcmVhU2l6ZSk7CisgICAgICAgIAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCk7CisgICAgICAgIFN0YXRl
KiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
CisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNo
UmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAgICAgICBDYWxsU2l0
ZUluZGV4IGNhbGxTaXRlSW5kZXggPQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29k
ZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgoY29kZU9yaWdpbik7CisKKyAgICAgICAg
ICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1z
KS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1
bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAgICAg
ICAgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOworCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBq
aXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworICAgICAgICAgICAgICAgIENhbGxW
YXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmNhbGxWYXJhcmdzRGF0YSgpOworCisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgYXJnSW5kZXggPSAxOworICAgICAgICAgICAgICAgIEdQUlJlZyBjYWxs
ZWVHUFIgPSBwYXJhbXNbYXJnSW5kZXgrK10uZ3ByKCk7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGNhbGxlZUdQUiA9PSBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFy
Z3VtZW50c0dQUiA9IGpzQXJndW1lbnRzID8gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpIDogSW52
YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBHUFJSZWcgdGhpc0dQUiA9IHBhcmFtc1thcmdJ
bmRleCsrXS5ncHIoKTsKKworICAgICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCBjYWxsZWVMYXRl
UmVwOworICAgICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCBhcmd1bWVudHNMYXRlUmVwOworICAg
ICAgICAgICAgICAgIEIzOjpWYWx1ZVJlcCB0aGlzTGF0ZVJlcDsKKyAgICAgICAgICAgICAgICBp
ZiAoIWZvcndhcmRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGZv
cndhcmRpbmcgdGhlbiB3ZSdsbCBuZWVkIGNhbGxlZSwgYXJndW1lbnRzLCBhbmQgdGhpcyBhZnRl
ciB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIHBvdGVudGlhbGx5IGNsb2JiZXJlZCBj
YWxsZWVHUFIsIGFyZ3VtZW50c0dQUiwgYW5kIHRoaXNHUFIuIE91ciB0ZWNobmlxdWUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gZm9yIHRoaXMgaXMgdG8gc3VwcGx5IGFsbCBvZiB0aG9zZSBvcGVy
YW5kcyBhcyBsYXRlIHVzZXMgaW4gYWRkaXRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
c3BlY2lmeWluZyB0aGVtIGFzIGVhcmx5IHVzZXMuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbGF0
ZSB1c2UgdXNlcyBhIHNwaWxsCisgICAgICAgICAgICAgICAgICAgIC8vIHdoaWxlIHRoZSBlYXJs
eSB1c2UgdXNlcyBhIHJlZ2lzdGVyLCBhbmQgaXQncyBwb3NzaWJsZSBmb3IgdGhlIGxhdGUgYW5k
IGVhcmx5CisgICAgICAgICAgICAgICAgICAgIC8vIHVzZXMgdG8gdXNlIGRpZmZlcmVudCByZWdp
c3RlcnMuIFdlIGRvIGtub3cgdGhhdCB0aGUgbGF0ZSB1c2VzIGludGVyZmVyZSB3aXRoCisgICAg
ICAgICAgICAgICAgICAgIC8vIGFsbCB2b2xhdGlsZSByZWdpc3RlcnMgYW5kIHNvIHdvbid0IHVz
ZSB0aG9zZSwgYnV0IHRoZSBlYXJseSB1c2VzIG1heSB1c2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdm9sYXRpbGUgcmVnaXN0ZXJzIGFuZCBpbiB0aGUgY2FzZSBvZiBjYWxsZWVHUFIsIGl0J3Mg
cGlubmVkIHRvIHJlZ1QwIHNvIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluaXRlbHkg
d2lsbC4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IHdlIGhhdmUgdG8gYmUgc3VwZXIgY2FyZWZ1bCB3aXRoIHRoZXNlLiBJdCdzIHBvc3Np
YmxlIHRoYXQgdGhlc2UKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGEgc2h1ZmZsaW5nIG9m
IHRoZSByZWdpc3RlcnMgdXNlZCBmb3IgY2FsbGVlR1BSLCBhcmd1bWVudHNHUFIsIGFuZAorICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzR1BSLiBJZiB0aGF0IGhhcHBlbnMgYW5kIHdlIGRvIGZv
ciBleGFtcGxlOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAv
LyAgICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGNhbGxlZUdQUik7CisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICBhcmd1bWVudHNMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgY2Fs
bGVlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8g
VGhlbiB3ZSBtaWdodCBlbmQgdXAgd2l0aCBnYXJiYWdlIGlmIGNhbGxlZUxhdGVSZXAuZ3ByKCkg
PT0gYXJndW1lbnRzR1BSIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRl
UmVwLmdwcigpID09IGNhbGxlZUdQUi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgZG8gYSB2YXJpZXR5IG9mIHRoaW5ncyB0byBwcmV2ZW50IHRoaXMg
ZnJvbSBoYXBwZW5pbmcuIEZvciBleGFtcGxlLCB3ZSB1c2UKKyAgICAgICAgICAgICAgICAgICAg
Ly8gYXJndW1lbnRzTGF0ZVJlcCBiZWZvcmUgbmVlZGluZyB0aGUgb3RoZXIgdHdvIGFuZCBhZnRl
ciB3ZSd2ZSBhbHJlYWR5IHN0b3BwZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgdGhl
ICpHUFJzLiBBbHNvLCB3ZSBwaW4gY2FsbGVlR1BSIHRvIHJlZ1QwLCBhbmQgcmVseSBvbiB0aGUg
ZmFjdCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAqTGF0ZVJlcHMgY2Fubm90IHVz
ZSB2b2xhdGlsZSByZWdpc3RlcnMgKHNvIHRoZXkgY2Fubm90IGJlIHJlZ1QwLCBzbworICAgICAg
ICAgICAgICAgICAgICAvLyBjYWxsZWVHUFIgIT0gYXJndW1lbnRzTGF0ZVJlcC5ncHIoKSBhbmQg
Y2FsbGVlR1BSICE9IHRoaXNMYXRlUmVwLmdwcigpKS4KKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gQW4gYWx0ZXJuYXRpdmUgd291bGQgaGF2ZSBiZWVuIHRv
IGp1c3QgdXNlIGVhcmx5IHVzZXMgYW5kIGVhcmx5LWNsb2JiZXIgYWxsCisgICAgICAgICAgICAg
ICAgICAgIC8vIHZvbGF0aWxlIHJlZ2lzdGVycy4gQnV0IHRoYXQgd291bGQgZm9yY2UgY2FsbGVl
LCBhcmd1bWVudHMsIGFuZCB0aGlzIGludG8KKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsbGVl
LXNhdmUgcmVnaXN0ZXJzIGV2ZW4gaWYgd2UgaGF2ZSB0byBzcGlsbCB0aGVtLiBXZSBkb24ndCB3
YW50IHNwaWxsaW5nIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB1cCB0aHJlZSBjYWxs
ZWUtc2F2ZXMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
IFRMO0RSOiBUaGUgd2F5IHdlIHVzZSBMYXRlUmVwcyBoZXJlIGlzIGRhbmdlcm91cyBhbmQgYmFy
ZWx5IHdvcmtzIGJ1dCBhY2hpZXZlcworICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGRlc2ly
YWJsZSBwZXJmb3JtYW5jZSBwcm9wZXJ0aWVzLCBzbyBkb24ndCBtaXN0YWtlIHRoZSBjbGV2ZXJu
ZXNzIGZvcgorICAgICAgICAgICAgICAgICAgICAvLyBlbGVnYW5jZS4KKyAgICAgICAgICAgICAg
ICAgICAgY2FsbGVlTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsrXTsKKyAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsrXTsKKyAgICAgICAgICAg
ICAgICAgICAgdGhpc0xhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gR2V0IHNvbWUgc2NyYXRjaCByZWdpc3RlcnMuCisg
ICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgICAgICAg
ICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhh
cmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2Uo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5zZXQoY2FsbGVlR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRz
R1BSICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMu
c2V0KGFyZ3VtZW50c0dQUik7CisgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQodGhp
c0dQUik7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZUxhdGVSZXAuaXNSZWcoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoY2FsbGVlTGF0ZVJlcC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0xhdGVSZXAuaXNSZWcoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzTGF0ZVJlcC5yZWcoKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHRoaXNMYXRlUmVwLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNMYXRlUmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgYWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjIgPSBhbGxvY2F0b3IuYWxs
b2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIzID0g
Zm9yd2FyZGluZyA/IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKSA6IEludmFsaWRHUFJS
ZWc7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWFsbG9jYXRvci5udW1iZXJPZlJl
dXNlZFJlZ2lzdGVycygpKTsKKworICAgICAgICAgICAgICAgIGF1dG8gY2FsbFdpdGhFeGNlcHRp
b25DaGVjayA9IFsmXSAodm9pZCogY2FsbGVlKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsZWUpLCBHUFJJbmZvOjpub25QcmVz
ZXJ2ZWROb25Bcmd1bWVudEdQUik7CisgICAgICAgICAgICAgICAgICAgIGppdC5jYWxsKEdQUklu
Zm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAgICAgZXhj
ZXB0aW9ucy0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soQXNzZW1ibHlIZWxwZXJzOjpO
b3JtYWxFeGNlcHRpb25DaGVjaywgQXNzZW1ibHlIZWxwZXJzOjpGYXJKdW1wV2lkdGgpKTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byBhZGp1c3RTdGFjayA9IFsm
XSAoR1BSUmVnIGFtb3VudCkgeworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGFtb3VudCwg
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsU3RhY2tIZWlnaHQgPSBwYXJhbXMu
cHJvYygpLmZyYW1lU2l6ZSgpOworCisgICAgICAgICAgICAgICAgaWYgKGZvcndhcmRpbmcpIHsK
KyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
b3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BS
Mik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IHNsb3dDYXNlOworICAgICAgICAgICAgICAgICAgICBlbWl0U2V0dXBWYXJh
cmdzRnJhbWVGYXN0Q2FzZShqaXQsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIzLCBub2RlLT5jaGlsZDIoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNh
bGxGcmFtZSwgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQsIHNsb3dDYXNlKTsKKworICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIGpp
dC5zZXR1cEFyZ3VtZW50c0V4ZWNTdGF0ZSgpOworICAgICAgICAgICAgICAgICAgICBjYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uVGhyb3dTdGFja092
ZXJmbG93Rm9yVmFyYXJncykpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVh
c29uKERGR1ZhcmFyZ3NUaHJvd2luZ1BhdGhEaWROb3RUaHJvdyk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgYWRqdXN0U3RhY2soc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgc2NyYXRj
aEdQUjEpOworICAgICAgICAgICAgICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZ3VtZW50c0dQUiwgc2NyYXRjaEdQUjEsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRo
RXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50
c0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBhcmd1bWVudHNHUFIpOworICAgICAgICAgICAgICAg
ICAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKGppdCwgc2NyYXRjaEdQUjEsIGZhbHNlLCBzY3JhdGNo
R1BSMiwgc2NyYXRjaEdQUjIpOworICAgICAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKC1taW5pbXVtSlNDYWxsQXJlYVNpemUpLCBzY3JhdGNoR1BS
MiwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAg
ICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoc2NyYXRjaEdQUjIsIGFyZ3VtZW50
c0dQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQp
LCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25TZXR1cFZhcmFyZ3NGcmFtZSkpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgYWRqdXN0U3RhY2soR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgICAgICAgICAgICAgIGNhbGxlZUxhdGVSZXAu
ZW1pdFJlc3RvcmUoaml0LCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBtYXkgbm90IGVtaXQgY29kZSBpZiB0aGlzR1BSIGdvdCBhIGNhbGxlZS1zYXZlLiBB
bHNvLCB3ZSdyZSBndWFyYW50ZWVkCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhpc0dQ
UiAhPSBHUFJJbmZvOjpyZWdUMCBiZWNhdXNlIHJlZ1QwIGludGVyZmVyZXMgd2l0aCBpdC4KKyAg
ICAgICAgICAgICAgICAgICAgdGhpc0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCB0aGlzR1BSKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaml0
LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2FsbGVlRnJhbWVTbG90KEpT
U3RhY2s6OkNhbGxlZSkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZTY0KHRoaXNHUFIsIEND
YWxsSGVscGVyczo6Y2FsbGVlQXJndW1lbnRTbG90KDApKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOworICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5vcCgpID09IENvbnN0cnVjdFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncykKKyAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUg
PSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5r
SW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGJvb2wgaXNUYWlsQ2FsbCA9IENhbGxMaW5rSW5mbzo6
Y2FsbE1vZGVGb3IoY2FsbFR5cGUpID09IENhbGxNb2RlOjpUYWlsOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hl
Y2s7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaCgKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RF
cXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6SnVtcCBkb25lOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIChpc1RhaWxDYWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICAgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENh
bGxTbG93KCk7CisgICAgICAgICAgICAgICAgICAgIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2Fs
bCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZhc3RD
YWxsID0gaml0Lm5lYXJDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBqaXQuanVt
cCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aC5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
CisgICAgICAgICAgICAgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5r
SW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNh
bGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0
aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigtb3JpZ2luYWxTdGFja0hlaWdodCksCisgICAgICAgICAgICAgICAgICAg
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxpbmtDYWxsID0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLnZtKCkuZ2V0Q1RJU3R1Yihs
aW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxpbmtDYWxsLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVj
ayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVh
ckNhbGwoZmFzdENhbGwpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUxvYWRWYXJh
cmdzKCkKKyAgICB7CisgICAgICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9h
ZFZhcmFyZ3NEYXRhKCk7CisgICAgICAgIExWYWx1ZSBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gdm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25T
aXplT2ZWYXJhcmdzKSwgbV9jYWxsRnJhbWUsIGpzQXJndW1lbnRzLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1F
OiBUaGVyZSBpcyBhIGNoYW5jZSB0aGF0IHdlIHdpbGwgY2FsbCBhbiBlZmZlY3RmdWwgbGVuZ3Ro
IHByb3BlcnR5IHR3aWNlLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgLy8gZnJvbSB0aGUgc3RhbmRw
b2ludCBvZiB0aGUgVk0ncyBpbnRlZ3JpdHksIGJ1dCBpdCdzIHN1YnRseSB3cm9uZyBmcm9tIGEg
c3BlYyBjb21wbGlhbmNlCisgICAgICAgIC8vIHN0YW5kcG9pbnQuIFRoZSBiZXN0IHNvbHV0aW9u
IHdvdWxkIGJlIG9uZSB3aGVyZSB3ZSBjYW4gZXhpdCAqaW50byogdGhlIG9wX2NhbGxfdmFyYXJn
cyByaWdodAorICAgICAgICAvLyBwYXN0IHRoZSBzaXppbmcuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE0NDgKKyAgICAgICAgCisgICAgICAg
IExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuaW50
MzJPbmUpOworICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1
ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAg
ICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+
bWFjaGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb21wdXRh
dGlvbiBpcyByYXRoZXIgc2lsbHkuIElmIG9wZXJhdGlvbkxhb2RWYXJhcmdzIGp1c3QgdG9vayBh
IHBvaW50ZXIgaW5zdGVhZAorICAgICAgICAvLyBvZiBhIFZpcnR1YWxSZWdpc3Rlciwgd2Ugd291
bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNjYwCisgICAgICAgIExWYWx1ZSBtYWNoaW5lU3RhcnQgPSBt
X291dC5sU2hyKAorICAgICAgICAgICAgbV9vdXQuc3ViKGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZVN0YXJ0Lm9mZnNldCgpKS52YWx1ZSgpLCBtX2NhbGxGcmFtZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludFB0cigzKSk7CisgICAgICAgIAorICAgICAgICB2bUNhbGwoCisgICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkxvYWRWYXJhcmdzKSwg
bV9jYWxsRnJhbWUsCisgICAgICAgICAgICBtX291dC5jYXN0VG9JbnQzMihtYWNoaW5lU3RhcnQp
LCBqc0FyZ3VtZW50cywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5vZmZzZXQpLAorICAgICAgICAg
ICAgbGVuZ3RoLCBtX291dC5jb25zdEludDMyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKQorICAgIHsKKyAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAg
ICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxkMSgp
LT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IGdldEFyZ3VtZW50c0xlbmd0aChpbmxpbmVDYWxsRnJhbWUpLnZhbHVlOwor
ICAgICAgICBMVmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1f
b3V0LmNvbnN0SW50MzIoMSAtIGRhdGEtPm9mZnNldCkpOworICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRlKAorICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
CisgICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRpbmdUaGlzLCBtX291dC5jb25z
dEludDMyKGRhdGEtPmxpbWl0KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmUzMihs
ZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVDb3VudCkpOworICAg
ICAgICAKKyAgICAgICAgTFZhbHVlIHNvdXJjZVN0YXJ0ID0gZ2V0QXJndW1lbnRzU3RhcnQoaW5s
aW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgTFZhbHVlIHRhcmdldFN0YXJ0ID0gYWRkcmVzc0Zvcihk
YXRhLT5tYWNoaW5lU3RhcnQpLnZhbHVlKCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZp
bmVkTG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgdW5kZWZpbmVk
IGxvb3AgYm9keSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWFpbkxvb3BFbnRyeSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgbWFpbiBsb29wIGVudHJ5IikpOworICAg
ICAgICBMQmFzaWNCbG9jayBtYWluTG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2Fy
ZFZhcmFyZ3MgbWFpbiBsb29wIGJvZHkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRm9yd2FyZFZhcmFyZ3MgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEFzUHRyID0gbV9vdXQuemVyb0V4
dFB0cihsZW5ndGgpOworICAgICAgICBMVmFsdWUgbG9vcEJvdW5kVmFsdWUgPSBtX291dC5jb25z
dEludFB0cihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bG9vcEJvdW5kID0gbV9vdXQuYW5jaG9yKGxvb3BCb3VuZFZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUobG9vcEJvdW5kVmFsdWUsIGxlbmd0aEFz
UHRyKSwgdW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmRl
ZmluZWRMb29wLCBtYWluTG9vcEVudHJ5KTsKKyAgICAgICAgTFZhbHVlIHByZXZpb3VzSW5kZXgg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBsb29wQm91bmQpOworICAgICAgICBMVmFsdWUgY3Vy
cmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBjdXJyZW50SW5kZXgpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1cnJlbnRJbmRleCk7Cisg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuYWJvdmUoY3VycmVudElu
ZGV4LCBsZW5ndGhBc1B0ciksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKG1haW5Mb29w
RW50cnkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5Mb29wRW50cnks
IG1haW5Mb29wKTsKKyAgICAgICAgbG9vcEJvdW5kID0gbV9vdXQuYW5jaG9yKGxlbmd0aEFzUHRy
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwobGVuZ3RoQXNQdHIpLCB1bnN1
cmUobWFpbkxvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhtYWluTG9vcCwgY29udGludWF0aW9uKTsKKyAgICAgICAgcHJldmlvdXNJ
bmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGxvb3BCb3VuZCk7CisgICAgICAgIGN1cnJl
bnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBtX291dC5pbnRQdHJPbmUpOworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5sb2FkNjQoCisgICAgICAgICAgICBtX291dC5iYXNl
SW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy52YXJpYWJsZXMsIHNvdXJjZVN0YXJ0LAor
ICAgICAgICAgICAgICAgIG1fb3V0LmFkZChjdXJyZW50SW5kZXgsIG1fb3V0LmNvbnN0SW50UHRy
KGRhdGEtPm9mZnNldCkpKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIG1fb3V0LmJh
c2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwor
ICAgICAgICBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKKyAgICAgICAg
bV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOworICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKGN1cnJlbnRJbmRleCksIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobWFpbkxvb3ApKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUp1
bXAoKQorICAgIHsKKyAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX25vZGUtPnRhcmdldEJs
b2NrKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQnJhbmNoKCkKKyAgICB7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGJvb2xpZnkobV9ub2RlLT5jaGlsZDEo
KSksCisgICAgICAgICAgICBXZWlnaHRlZFRhcmdldCgKKyAgICAgICAgICAgICAgICBsb3dCbG9j
ayhtX25vZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uYmxvY2spLAorICAgICAgICAgICAgICAgIG1f
bm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5jb3VudCksCisgICAgICAgICAgICBXZWlnaHRlZFRh
cmdldCgKKyAgICAgICAgICAgICAgICBsb3dCbG9jayhtX25vZGUtPmJyYW5jaERhdGEoKS0+bm90
VGFrZW4uYmxvY2spLAorICAgICAgICAgICAgICAgIG1fbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RU
YWtlbi5jb3VudCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTd2l0Y2goKQorICAg
IHsKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG1fbm9kZS0+c3dpdGNoRGF0YSgpOworICAg
ICAgICBzd2l0Y2ggKGRhdGEtPmtpbmQpIHsKKyAgICAgICAgY2FzZSBTd2l0Y2hJbW06IHsKKyAg
ICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gaW50VmFsdWVzOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgc3dpdGNoT25JbnRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoSW1tIGludCBjYXNlIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG1fb3V0Lm1fYmxvY2ssIHN3aXRjaE9u
SW50cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAg
ICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRzKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
SW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoSW1tIGlzIGludCIpKTsK
KyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiU3dpdGNoL1N3aXRjaEltbSBpcyBub3QgaW50IikpOworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzRG91YmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNo
SW1tIGlzIGRvdWJsZSIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFs
dWUgYm94ZWRWYWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYm94ZWRWYWx1ZSksIHVuc3VyZShpc05vdElu
dCksIHVuc3VyZShpc0ludCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0ludCwgaXNOb3RJbnQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9v
dXQuYW5jaG9yKHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBtX291
dC5qdW1wKHN3aXRjaE9uSW50cyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXNOb3RJbnQsIGlzRG91YmxlKTsKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyhib3hlZFZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdXN1YWxs
eShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCByYXJlbHkoaXNEb3VibGUpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc0RvdWJs
ZSwgaW5uZXJMYXN0TmV4dCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0g
dW5ib3hEb3VibGUoYm94ZWRWYWx1ZSk7CisgICAgICAgICAgICAgICAgTFZhbHVlIGludEluRG91
YmxlID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpOworICAgICAgICAgICAgICAgIGlu
dFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGludEluRG91YmxlKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbCht
X291dC5pbnRUb0RvdWJsZShpbnRJbkRvdWJsZSksIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAg
ICAgICAgICAgdW5zdXJlKHN3aXRjaE9uSW50cyksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxs
VGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhzd2l0Y2hPbkludHMsIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIGJ1aWxkU3dp
dGNoKGRhdGEsIG1fb3V0LmludDMyLCBtX291dC5waGkobV9vdXQuaW50MzIsIGludFZhbHVlcykp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNl
IFN3aXRjaENoYXI6IHsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdWYWx1ZTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB1c2Ugc29tZXRoaW5nIG90aGVy
IHRoYW4gdW5zdXJlKCkgZm9yIHRoZSBicmFuY2ggd2VpZ2h0CisgICAgICAgICAgICAvLyBvZiB0
aGUgZmFsbFRocm91Z2ggYmxvY2suIFRoZSBtYWluIGNoYWxsZW5nZSBpcyBqdXN0IHRoYXQgd2Ug
aGF2ZSBtdWx0aXBsZQorICAgICAgICAgICAgLy8gYnJhbmNoZXMgdG8gZmFsbFRocm91Z2ggYnV0
IGEgc2luZ2xlIGNvdW50LCBzbyB3ZSB3b3VsZCBuZWVkIHRvIGRpdnZ5IGl0IHVwCisgICAgICAg
ICAgICAvLyBhbW9uZyB0aGUgZGlmZmVyZW50IGxvd2VyZWQgYnJhbmNoZXMuCisgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MDgyCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7CisgICAgICAgICAgICAgICAgc3RyaW5n
VmFsdWUgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFVu
dHlwZWRVc2U6IHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gv
U3dpdGNoQ2hhciBpcyBjZWxsIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3Ry
aW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgaXMgc3Ry
aW5nIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgaXNOb3RDZWxsKHVuYm94ZWRWYWx1ZSwgcHJvdmVuVHlwZSht
X25vZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhk
YXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUoaXNDZWxsQ2FzZSkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUg
Y2VsbFZhbHVlID0gdW5ib3hlZFZhbHVlOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgICAgICAgICAgaXNOb3RTdHJpbmcoY2VsbFZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRh
dGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGNlbGxWYWx1ZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsZW5ndGhJczEgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGxlbmd0aCBpcyAxIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbmVlZFJlc29sdXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIHJlc29sdXRpb24iKSk7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayByZXNvbHZlZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIg
cmVzb2x2ZWQiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpczhCaXQgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIDhiaXQiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBpczE2Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hh
ciAxNmJpdCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmludDMyT25lKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGxlbmd0aElzMSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlbmd0
aElzMSwgbmVlZFJlc29sdXRpb24pOworICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
LCAyPiB2YWx1ZXM7CisgICAgICAgICAgICBMVmFsdWUgZmFzdFZhbHVlID0gbV9vdXQubG9hZFB0
cihzdHJpbmdWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgICAgICB2YWx1
ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihmYXN0VmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc051bGwoZmFzdFZhbHVlKSwgcmFyZWx5KG5lZWRSZXNvbHV0aW9uKSwgdXN1
YWxseShyZXNvbHZlZCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhuZWVkUmVzb2x1dGlvbiwgcmVzb2x2ZWQpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCht
X291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludFB0ciwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblJlc29sdmVSb3BlKSwgbV9jYWxsRnJhbWUsIHN0cmluZ1ZhbHVl
KSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChyZXNvbHZlZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlc29sdmVkLCBpczhCaXQpOworICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgdmFsdWVzKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBjaGFyYWN0ZXJEYXRhID0gbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5T
dHJpbmdJbXBsX2RhdGEpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
ICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQz
Mih2YWx1ZSwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCisgICAg
ICAgICAgICAgICAgdW5zdXJlKGlzOEJpdCksIHVuc3VyZShpczE2Qml0KSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gY2hhcmFjdGVyczsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7CisgICAgICAgICAgICBj
aGFyYWN0ZXJzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubG9hZDhaZXJvRXh0MzIoY2hhcmFj
dGVyRGF0YSwgbV9oZWFwcy5jaGFyYWN0ZXJzOFswXSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oaXMxNkJpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5k
KG1fb3V0LmFuY2hvcihtX291dC5sb2FkMTZaZXJvRXh0MzIoY2hhcmFjdGVyRGF0YSwgbV9oZWFw
cy5jaGFyYWN0ZXJzMTZbMF0pKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50MzIs
IG1fb3V0LnBoaShtX291dC5pbnQzMiwgY2hhcmFjdGVycykpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzogeworICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAg
ICAgY2FzZSBTdHJpbmdJZGVudFVzZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSBzdHJpbmdJ
bXBsID0gbG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5jb25zdEludFB0cihkYXRh
LT5jYXNlc1tpXS52YWx1ZS5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBibG9jayA9IGxvd0Jsb2NrKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgIFdlaWdodCB3ZWlnaHQgPSBXZWlnaHQoZGF0YS0+Y2FzZXNbaV0u
dGFyZ2V0LmNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENh
c2UodmFsdWUsIGJsb2NrLCB3ZWlnaHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAg
ICAgICAgICAgICAgIHN0cmluZ0ltcGwsIGNhc2VzLCBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayksCisgICAgICAgICAgICAgICAgICAgIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5j
b3VudCkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7CisgICAgICAgICAgICAgICAg
c3dpdGNoU3RyaW5nKGRhdGEsIGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaFN0cmluZyBVbnR5cGVkIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpc1N0cmluZ0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoU3RyaW5nIFVudHlwZWQgc3RyaW5nIGNhc2UiKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc0Nl
bGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAgICAgICAg
ICAgICB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91
Z2guYmxvY2spKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jaywgaXNTdHJpbmdCbG9jayk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgp
KSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc1N0cmluZ0Jsb2NrKSwgdW5zdXJlKGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQmxvY2ssIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwgdmFsdWUp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgU3dpdGNoQ2VsbDogeworICAgICAgICAgICAgTFZhbHVlIGNlbGw7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAg
ICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgICAgICBjZWxsID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlN3aXRjaC9Td2l0Y2hDZWxsIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjZWxsQ2FzZSksIHVu
c3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSk7CisgICAgICAgICAgICAgICAgY2VsbCA9IHZhbHVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBidWlsZFN3aXRjaChtX25vZGUt
PnN3aXRjaERhdGEoKSwgbV9vdXQuaW50UHRyLCBjZWxsKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfSB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHN3aXRjaCBraW5kIik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVJldHVy
bigpCisgICAgeworICAgICAgICBtX291dC5yZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUZvcmNlT1NSRXhpdCgpCisgICAgewor
ICAgICAgICB0ZXJtaW5hdGUoSW5hZGVxdWF0ZUNvdmVyYWdlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlVGhyb3coKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW52YWxpZGF0aW9uUG9pbnQoKQorICAg
IHsKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2
YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1
ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiBkZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgp
LCBudWxscHRyKTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGRlc2NyaXB0
b3IsIG9yaWdpbi5mb3JFeGl0LCBub1ZhbHVlKCkpKTsKKyAgICAgICAgCisgICAgICAgIFN0YXRl
KiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworCisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIC8vIFRoZSBNYWNy
b0Fzc2VtYmxlciBrbm93cyBtb3JlIGFib3V0IHRoaXMgdGhhbiBCMyBkb2VzLiBUaGUgd2F0Y2hw
b2ludExhYmVsKCkgbWV0aG9kCisgICAgICAgICAgICAgICAgLy8gd2lsbCBlbnN1cmUgdGhhdCB0
aGlzIGlzIGZvbGxvd2VkIGJ5IGEgbm9wIHNoYWRvdyBidXQgb25seSB3aGVuIHRoaXMgaXMgYWN0
dWFsbHkKKyAgICAgICAgICAgICAgICAvLyBuZWNlc3NhcnkuCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBsYWJlbCA9IGppdC53YXRjaHBvaW50TGFiZWwoKTsKKworICAgICAg
ICAgICAgICAgIFJlZlB0cjxPU1JFeGl0SGFuZGxlPiBoYW5kbGUgPSBkZXNjcmlwdG9yLT5lbWl0
T1NSRXhpdExhdGVyKAorICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIFVuY291bnRhYmxlSW52
YWxpZGF0aW9uLCBvcmlnaW4sIHBhcmFtcyk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8SklU
Q29kZT4gaml0Q29kZSA9IHN0YXRlLT5qaXRDb2RlLmdldCgpOworCisgICAgICAgICAgICAgICAg
aml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEp1bXBSZXBsYWNlbWVudCBqdW1w
UmVwbGFjZW1lbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGxhYmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaGFuZGxlLT5sYWJlbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29k
ZS0+Y29tbW9uLmp1bXBSZXBsYWNlbWVudHMuYXBwZW5kKGp1bXBSZXBsYWNlbWVudCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgLy8gU2V0IHNv
bWUgb2J2aW91cyB0aGluZ3MuCisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMudGVybWluYWwg
PSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0g
ZmFsc2U7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNMb2NhbFN0YXRlID0gZmFs
c2U7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIGhvdyB3ZSB0ZWxsIEIzIGFib3V0IHRo
ZSBwb3NzaWJpbGl0eSBvZiBqdW1wIHJlcGxhY2VtZW50LgorICAgICAgICBwYXRjaHBvaW50LT5l
ZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBu
b3QgcG9zc2libGUgZm9yIHNvbWUgcHJpb3IgYnJhbmNoIHRvIGRldGVybWluZSB0aGUgc2FmZXR5
IG9mIHRoaXMgb3BlcmF0aW9uLiBJdCdzIGFsd2F5cworICAgICAgICAvLyBmaW5lIHRvIGV4ZWN1
dGUgdGhpcyBvbiBzb21lIHBhdGggdGhhdCB3b3VsZG4ndCBoYXZlIG9yaWdpbmFsbHkgZXhlY3V0
ZWQgaXQgYmVmb3JlCisgICAgICAgIC8vIG9wdGltaXphdGlvbi4KKyAgICAgICAgcGF0Y2hwb2lu
dC0+ZWZmZWN0cy5jb250cm9sRGVwZW5kZW50ID0gZmFsc2U7CisKKyAgICAgICAgLy8gSWYgdGhp
cyBmYWxscyB0aHJvdWdoIHRoZW4gaXQgd29uJ3Qgd3JpdGUgYW55dGhpbmcuCisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzID0gSGVhcFJhbmdlKCk7CisKKyAgICAgICAgLy8gV2hl
biB0aGlzIGFicnVwdGx5IHRlcm1pbmF0ZXMsIGl0IGNvdWxkIHJlYWQgYW55IGhlYXAgbG9jYXRp
b24uCisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJc1VuZGVmaW5lZCgpCisgICAgeworICAg
ICAgICBzZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQxKCksIEFs
bENlbGxzQXJlRmFsc2UsIEVxdWFsVW5kZWZpbmVkKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUlzQm9vbGVhbigpCisgICAgeworICAgICAgICBzZXRCb29sZWFuKGlzQm9vbGVhbihs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUlzTnVtYmVyKCkKKyAgICB7CisgICAg
ICAgIHNldEJvb2xlYW4oaXNOdW1iZXIobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVJc1N0cmluZygpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNTdHJpbmcgY2VsbCBjYXNlIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzU3Ry
aW5nIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
dENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IoaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGNlbGxS
ZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc09iamVjdCgpCisgICAgeworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2Jq
ZWN0IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdCBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IoaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBjZWxs
UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQorICAg
IHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIEVk
Z2UgY2hpbGQgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGNoaWxkKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBjZWxsIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
SXNPYmplY3RPck51bGwgbm90IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG9iamVj
dCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSXNPYmplY3RPck51bGwgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgbm90
IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSks
IHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVu
Y3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNGdW5jdGlvblJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBvYmplY3RDYXNl
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90T2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCisgICAgICAgICAgICB1bnN1cmUo
b2JqZWN0Q2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG9iamVjdENhc2UsIHNsb3dQYXRoKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgb2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNFeG90aWNGb3JUeXBlb2YodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHko
Y29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0
aCwgbm90Q2VsbENhc2UpOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uT2JqZWN0SXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxv
Y2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90WmVybzY0
KHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgTFZhbHVlIG5vdENlbGxSZXN1bHRWYWx1ZSA9IG1fb3V0LmVxdWFsKHZhbHVl
LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihub3RDZWxsUmVzdWx0
VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sCisgICAg
ICAgICAgICBpc0Z1bmN0aW9uUmVzdWx0LCBub3RPYmplY3RSZXN1bHQsIG9iamVjdFJlc3VsdCwg
c2xvd1Jlc3VsdCwgbm90Q2VsbFJlc3VsdCk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSXNGdW5jdGlvbigpCisgICAgeworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgRWRnZSBjaGlsZCA9
IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hp
bGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gbm90
IGZ1bmN0aW9uIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIGNv
bnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdEZ1bmN0
aW9uQ2FzZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZ1bmN0aW9uUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAg
dW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgc2xvd1BhdGgpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNFeG90aWNG
b3JUeXBlb2YodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAgICAgICAgICAgIHJhcmVseShz
bG93UGF0aCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dS
ZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk9iamVjdElzRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAg
ICB9LCB2YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQubm90TnVsbChzbG93UmVzdWx0VmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoCisg
ICAgICAgICAgICBtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBmdW5jdGlvblJlc3VsdCwg
b2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUeXBlT2YoKQorICAgIHsKKyAgICAgICAgRWRn
ZSBjaGlsZCA9IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoY2hpbGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUeXBlT2YgY29udGludWF0aW9uIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1
bHRzOworICAgICAgICAKKyAgICAgICAgYnVpbGRUeXBlT2YoCisgICAgICAgICAgICBjaGlsZCwg
dmFsdWUsCisgICAgICAgICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgeworICAgICAgICAgICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih3ZWFrUG9pbnRlcih2bSgpLnNtYWxsU3Ry
aW5ncy50eXBlU3RyaW5nKHR5cGUpKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUluKCkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIEVkZ2Ug
YmFzZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoYmFz
ZSk7CisgICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigpKSB7CisgICAgICAgICAgICBpZiAoc3RyaW5nLT50
cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpLT5pc0F0b21pYygp
KSB7CisgICAgICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9IGJpdHdpc2VfY2Fz
dDxVbmlxdWVkU3RyaW5nSW1wbCo+KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOworICAgICAg
ICAgICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoY2VsbCk7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHBhcmFtc1sxXS5ncHIoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBwYXJhbXNbMF0uZ3By
KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
byA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLT5hZGRTdHVi
SW5mbyhBY2Nlc3NUeXBlOjpJbik7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+
Y2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENv
ZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1h
bnRpYzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5iYXNlR1BSID0g
c3RhdGljX2Nhc3Q8aW50OF90PihiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5wYXRjaC52YWx1ZUdQUiA9IHN0YXRpY19jYXN0PGludDhfdD4ocmVzdWx0R1BSKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC51c2VkUmVnaXN0ZXJzID0g
cGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBqdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5s
YWJlbCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNh
Z2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
anVtcC5tX2p1bXAubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVsKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0
YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBudWxscHRyLCBvcGVy
YXRpb25Jbk9wdGltaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0R1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBiYXNlR1BSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0cikpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0
Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGhDYWxsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lID0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxU
b0p1bXAgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihqdW1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxs
VG9TbG93Q2FzZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKHNsb3dQYXRoQmVnaW4pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9IAorCisgICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uR2VuZXJpY0luKSwgbV9jYWxsRnJhbWUsIGNlbGwsIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVPdmVycmlkZXNIYXNJbnN0YW5jZSgp
CisgICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obV9ub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKKwor
ICAgICAgICBMVmFsdWUgY29uc3RydWN0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBMVmFsdWUgaGFzSW5zdGFuY2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGRlZmF1bHRIYXNJbnN0YW5jZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiT3ZlcnJpZGVzSGFzSW5zdGFuY2UgU3ltYm9sLmhhc0luc3RhbmNlIGlzIGRl
ZmF1bHQiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiT3ZlcnJpZGVzSGFzSW5zdGFuY2UgY29udGludWF0aW9uIikpOworCisgICAg
ICAgIC8vIFVubGlrZSBpbiB0aGUgREZHLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBjbGVhbmluZyB0
aGlzIGNvZGUgdXAgZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgcHJvdmVuIHRoZSBoYXNJbnN0
YW5jZVZhbHVlIGlzIGEgY29uc3RhbnQgYXMgTExWTSBzaG91bGQgZml4IGl0IGZvciB1cy4KKwor
ICAgICAgICBBU1NFUlQoIW1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpLT5pc0NlbGxDb25zdGFudCgp
IHx8IGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uID09IG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
LT5hc0NlbGwoKSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90RGVmYXVsdEhhc0luc3Rh
bmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGhhc0luc3RhbmNlLCBtX291dC5jb25zdEludFB0cihk
ZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbikpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJl
KGRlZmF1bHRIYXNJbnN0YW5jZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oZGVmYXVsdEhhc0luc3RhbmNlLCBjb250aW51YXRpb24pOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNvbnN0cnVjdG9yLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShtX291dC5ib29sZWFuLCBpbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlUmVzdWx0LCBub3RE
ZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVDaGVj
a1R5cGVJbmZvRmxhZ3MoKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
QmFkVHlwZUluZm9GbGFncywgbm9WYWx1ZSgpLCAwLAorICAgICAgICAgICAgbV9vdXQudGVzdElz
WmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT50eXBlSW5mb09wZXJhbmQoKSkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZigpCisgICAgeworICAgICAgICBM
VmFsdWUgY2VsbDsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBVbnR5cGVkVXNlKQorICAgICAgICAgICAgY2VsbCA9IGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNlbGwgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHByb3RvdHlwZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBp
c0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGNlbGwgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5z
dGFuY2VPZiBsb29wIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RZZXRJbnN0YW5jZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBub3QgeWV0IGluc3RhbmNlIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklu
c3RhbmNlT2YgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGNvbmRp
dGlvbjsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRV
c2UpCisgICAgICAgICAgICBjb25kaXRpb24gPSBpc0NlbGwoY2VsbCwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1f
b3V0LmJvb2xlYW5UcnVlOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2Vs
bFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291
dC5icmFuY2goY29uZGl0aW9uLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRp
b24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQ2FzZSwgbG9vcCk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwgbm9WYWx1ZSgpLCAwLCBpc05vdE9iamVjdChwcm90b3R5cGUsIHByb3ZlblR5cGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdp
bmFsVmFsdWUgPSBtX291dC5hbmNob3IoY2VsbCk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wLCBub3RZZXRJbnN0YW5jZSk7
CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQ2NCwgb3JpZ2luYWxW
YWx1ZSk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKHZhbHVlKTsK
KyAgICAgICAgTFZhbHVlIGN1cnJlbnRQcm90b3R5cGUgPSBtX291dC5sb2FkNjQoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9wcm90b3R5cGUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBp
c0luc3RhbmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoY3VycmVudFByb3RvdHlw
ZSwgcHJvdG90eXBlKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
bm90WWV0SW5zdGFuY2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFll
dEluc3RhbmNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RJbnN0
YW5jZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKHZhbHVlLCBtX291dC5hbmNob3IoY3VycmVudFByb3RvdHlw
ZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGN1cnJlbnRQcm90b3R5cGUpLCB1bnN1
cmUobG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKAor
ICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGlzSW5z
dGFuY2VSZXN1bHQsIG5vdEluc3RhbmNlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlSW5zdGFuY2VPZkN1c3RvbSgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgY29uc3RydWN0b3IgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgaGFzSW5zdGFuY2UgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIHNldEJvb2xlYW4obV9vdXQu
bG9naWNhbE5vdChtX291dC5lcXVhbChtX291dC5jb25zdEludDMyKDApLCB2bUNhbGwobV9vdXQu
aW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tKSwgbV9jYWxs
RnJhbWUsIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2UpKSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpCisgICAgeworICAgICAgICBUeXBlZFBv
aW50ZXIgY291bnRlciA9IG1fb3V0LmFic29sdXRlKG1fbm9kZS0+ZXhlY3V0aW9uQ291bnRlcigp
LT5hZGRyZXNzKCkpOworICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmFkZChtX291dC5sb2Fk
NjQoY291bnRlciksIG1fb3V0LmNvbnN0SW50NjQoMSkpLCBjb3VudGVyKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlU3RvcmVCYXJyaWVyKCkKKyAgICB7CisgICAgICAgIGVtaXRTdG9y
ZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSk7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBs
b3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgICAgICBJbmRleGVkQWJzdHJh
Y3RIZWFwJiBoZWFwID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ID8KKyAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hl
YXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY2hlY2tIb2xlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkg
aW50L2NvbnRpZ3VvdXMgY2hlY2sgaG9sZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgaW50L2Nv
bnRpZ3VvdXMgc2xvdyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgaW50L2NvbnRp
Z3VvdXMgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2Fz
ZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xlLCBzbG93Q2FzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgY2hlY2tIb2xlUmVzdWx0VmFsdWUgPQorICAgICAgICAgICAgICAgIG1fb3V0Lm5v
dFplcm82NChtX291dC5sb2FkNjQoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25v
ZGUtPmNoaWxkMigpKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hlY2tIb2xlUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGNoZWNrSG9sZVJlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChjaGVja0hvbGVSZXN1bHRWYWx1ZSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7CisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBM
VmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExW
YWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhl
ZERvdWJsZVByb3BlcnRpZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNoZWNrSG9sZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGRv
dWJsZSBjaGVjayBob2xlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3VibGUgc2xvdyBjYXNl
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCkpLAorICAgICAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNo
ZWNrSG9sZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjaGVja0hvbGUpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGNoZWNrSG9sZSwgc2xvd0Nhc2UpOworICAgICAgICAgICAgTFZhbHVlIGRvdWJs
ZVZhbHVlID0gbV9vdXQubG9hZERvdWJsZShiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgs
IG1fbm9kZS0+Y2hpbGQyKCkpKTsKKyAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVSZXN1bHRW
YWx1ZSA9IG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSk7CisgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2hl
Y2tIb2xlUmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJl
c3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAorICAgICAgICAgICAgICAgIHZtQ2FsbChtX291
dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1f
Y2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291
dC5ib29sZWFuLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSGFzR2VuZXJpY1Byb3BlcnR5KCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkp
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAg
eworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkhhc1N0cnVjdHVyZVByb3BlcnR5IGNvcnJlY3Qgc3RydWN0dXJlIikpOworICAgICAgICBM
QmFzaWNCbG9jayB3cm9uZ1N0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3Ry
dWN0dXJlUHJvcGVydHkgd3Jvbmcgc3RydWN0dXJlIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc1N0cnVjdHVyZVByb3BlcnR5
IGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1YWwo
CisgICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpLAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisgICAgICAgICAgICByYXJl
bHkod3JvbmdTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvcnJlY3RTdHJ1Y3R1cmUpKTsKKworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUs
IHdyb25nU3RydWN0dXJlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVy
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyh3cm9uZ1N0cnVj
dHVyZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgd3JvbmdTdHJ1Y3R1
cmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSwgCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3Bl
cnR5KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQsIHdyb25nU3Ry
dWN0dXJlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKSk7CisgICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1l
cmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY2hlY2tPZmZzZXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldERp
cmVjdFBuYW1lIGNoZWNrIG9mZnNldCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9h
ZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgaW5saW5lIGxvYWQiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldERpcmVjdFBuYW1lIG91dC1vZi1saW5lIGxvYWQiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFtZSBzbG93
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNl
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5sb2FkMzIo
ZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0
dXJlSUQpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY2hlY2tPZmZz
ZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNo
ZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3Zl
T3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSksCisgICAgICAgICAgICB1bnN1
cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaW5saW5lTG9hZCwgb3V0T2ZMaW5lTG9hZCk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGlubGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2
NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIAorICAg
ICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludDY0KSwgU2Nh
bGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZM
aW5lTG9hZCwgc2xvd0Nhc2UpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvYWRCdXR0ZXJm
bHlSZWFkT25seShiYXNlKTsKKyAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25F
eHQzMlRvNjQoCisgICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5s
b2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
SW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBvdXRPZkxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2Fk
NjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9y
YWdlLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93Q2Fz
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsKSwgbV9jYWxsRnJhbWUsIGJhc2UsIHBy
b3BlcnR5KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBz
bG93Q2FzZVJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVM
ZW5ndGgoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgpKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3Bl
cnR5RW51bWVyYXRvciksIG1fY2FsbEZyYW1lLCBiYXNlKSk7CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxv
Y2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSBpbiBib3VuZHMiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUgb3V0IG9m
IGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUgY29udGludWF0aW9uIikp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXgpKSwKKyAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHko
b3V0T2ZCb3VuZHMpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0g
bV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5C
b3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkUHRyKG1f
b3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVOdWxsKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91
bmRzUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSgpCisgICAgeworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lIGluIGJvdW5kcyIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVu
dW1lcmF0b3JHZW5lcmljUG5hbWUgb3V0IG9mIGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
YmVsb3coaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRleCkpLAorICAgICAgICAgICAgdXN1
YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3IpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9u
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBp
bkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlVG9JbmRleFN0cmluZygpCisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9v
dXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4U3RyaW5nKSwgbV9jYWxs
RnJhbWUsIGluZGV4KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0
dXJlSW1tZWRpYXRlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBjaGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAg
IHN0cnVjdHVyZSwgbm9WYWx1ZSgpLCBCYWRDYWNoZSwgbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKSwK
KyAgICAgICAgICAgIFt0aGlzXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCkKKyAgICB7
CisgICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVj
dE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKKyAgICAgICAgCisgICAgICAgIC8vIExvd2VyIHRoZSB2
YWx1ZXMgZmlyc3QsIHRvIGF2b2lkIGNyZWF0aW5nIHZhbHVlcyBpbnNpZGUgYSBjb250cm9sIGZs
b3cgZGlhbW9uZC4KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUo
KTsgKytpKQorICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxICsgaSkpKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0ID0gbV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxMQmFzaWNCbG9jaywgMT4gYmxvY2tzKHNldC5zaXplKCkpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgYmxvY2tzW2ldID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjYXNlICIsIGkpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgZHVtbXlEZWZhdWx0ID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJNYXRlcmlhbGl6ZU5ld09iamVjdCBkZWZhdWx0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIG91dGVyQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZU5ld09iamVjdCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMT4gY2FzZXMoc2V0LnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHNldC5zaXplKCk7IGktLTspCisgICAgICAgICAgICBjYXNlc1tpXSA9IFN3aXRjaENhc2Uod2Vh
a1N0cnVjdHVyZShzZXRbaV0pLCBibG9ja3NbaV0sIFdlaWdodCgxKSk7CisgICAgICAgIG1fb3V0
LnN3aXRjaEluc3RydWN0aW9uKAorICAgICAgICAgICAgbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBjYXNlcywgZHVtbXlEZWZhdWx0LCBXZWlnaHQoMCkpOworICAgICAg
ICAKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2Nr
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAxPiByZXN1bHRzOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IHNldC5zaXplKCkg
PyBibG9ja3NbaSArIDFdIDogZHVtbXlEZWZhdWx0KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzZXRbaV07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIExWYWx1ZSBvYmplY3Q7CisgICAgICAgICAgICBMVmFsdWUgYnV0dGVyZmx5OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CisgICAgICAgICAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBhbGxvY2F0aW9uIHNs
b3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0
IGFsbG9jYXRpb24gY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3Jl
KHNsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZW5k
T2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAq
IHNpemVvZihKU1ZhbHVlKSksCisgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMVmFsdWUgZmFzdEJ1dHRlcmZseVZhbHVlID0g
bV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2Yo
SW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgZmFzdE9iamVjdFZhbHVlID0gYWxsb2NhdGVPYmplY3QoCisgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwg
ZmFzdEJ1dHRlcmZseVZhbHVlLCBzbG93UGF0aCk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0T2JqZWN0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3RWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihm
YXN0QnV0dGVyZmx5VmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBzbG93T2Jq
ZWN0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3RX
aXRoQnV0dGVyZmx5LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOworICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
T2JqZWN0ID0gbV9vdXQuYW5jaG9yKHNsb3dPYmplY3RWYWx1ZSk7CisgICAgICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93T2JqZWN0VmFsdWUsIG1faGVhcHMuSlNPYmplY3Rf
YnV0dGVyZmx5KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG9iamVjdCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RPYmplY3Qs
IHNsb3dPYmplY3QpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG1fb3V0LnBoaShtX291
dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUgZWFzeSBjYXNlIHdoZXJlIHdlIGNhbiBk
byBhIG9uZS1zaG90IGFsbG9jYXRpb24sIHdlIHNpbXBseSBhbGxvY2F0ZSB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBvYmplY3QgdG8gZGlyZWN0bHkgaGF2ZSB0aGUgZGVzaXJlZCBzdHJ1Y3R1cmUu
CisgICAgICAgICAgICAgICAgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Qoc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBudWxscHRyOyAvLyBEb24ndCBoYXZlIG9uZSwgZG9u
J3QgbmVlZCBvbmUuCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoUHJvcGVydHlNYXBFbnRyeSBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1
cnJlbnRseSgpKSB7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5tX3By
b3BlcnRpZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIFBoYW50b21Qcm9w
ZXJ0eVZhbHVlIHZhbHVlID0gZGF0YS5tX3Byb3BlcnRpZXNbaV07CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmlkZW50aWZpZXJzKClbdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyXSAh
PSBlbnRyeS5rZXkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gaXNJbmxpbmVP
ZmZzZXQoZW50cnkub2Zmc2V0KSA/IG9iamVjdCA6IGJ1dHRlcmZseTsKKyAgICAgICAgICAgICAg
ICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZXNbaV0sIGJhc2UsIHZhbHVlLm1faWRlbnRpZmllck51
bWJlciwgZW50cnkub2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3Iob2JqZWN0KSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KG91dGVyQ29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oZHVtbXlEZWZhdWx0LCBvdXRlckNvbnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRlckNv
bnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludFB0ciwgcmVzdWx0cykpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZU1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbigpCisgICAgeworICAgICAgICBPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhKCk7CisK
KyAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVzOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2
YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIgKyBp
KSkpOworCisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKKyAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0
T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7CisgICAgICAgIEFTU0VSVCh0YWJsZSA9PSBtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMCktPmNhc3RDb25zdGFudDxTeW1ib2xUYWJsZSo+KCkpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6
ZUNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZh
dGlvbiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworCisgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAorICAgICAg
ICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHRhYmxlKSwgc3RydWN0
dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisKKyAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoc2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTY29wZV9uZXh0KTsKKyAgICAgICAgbV9v
dXQuc3RvcmVQdHIod2Vha1BvaW50ZXIodGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU3lt
Ym9sVGFibGVPYmplY3Rfc3ltYm9sVGFibGUpOworCisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOworICAgICAgICAvLyBXZSBlbnN1cmUgYWxsb2NhdGlvbiBzaW5raW5nIGV4cGxp
Y3RseSBzZXRzIGJvdHRvbSB2YWx1ZXMgZm9yIGFsbCBmaWVsZCBtZW1iZXJzLiAKKyAgICAgICAg
Ly8gVGhlcmVmb3JlLCBpdCBkb2Vzbid0IG1hdHRlciB3aGF0IEpTVmFsdWUgd2UgcGFzcyBpbiBh
cyB0aGUgaW5pdGlhbGl6YXRpb24gdmFsdWUKKyAgICAgICAgLy8gYmVjYXVzZSBhbGwgZmllbGRz
IHdpbGwgYmUgb3ZlcndyaXR0ZW4uCisgICAgICAgIC8vIEZJWE1FOiBJdCBtYXkgYmUgd29ydGgg
Y3JlYXRpbmcgYW4gb3BlcmF0aW9uIHRoYXQgY2FsbHMgYSBjb25zdHJ1Y3RvciBvbiBKU0xleGlj
YWxFbnZpcm9ubWVudCB0aGF0IAorICAgICAgICAvLyBkb2Vzbid0IGluaXRpYWxpemUgZXZlcnkg
c2xvdCBiZWNhdXNlIHdlIGFyZSBndWFyYW50ZWVkIHRvIGRvIHRoYXQgaGVyZS4KKyAgICAgICAg
TFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSkpOworICAgICAgICAgICAgfSwgc2NvcGUpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gIG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgYWN0aXZhdGlvbiA9IG1f
b3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChkYXRhLm1fcHJvcGVydGllcy5zaXplKCkgPT0gdGFibGUtPnNjb3BlU2l6
ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlc1tpXSwKKyAg
ICAgICAgICAgICAgICBhY3RpdmF0aW9uLAorICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZp
cm9ubWVudFJlY29yZF92YXJpYWJsZXNbZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVy
TnVtYmVyXSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkg
eworICAgICAgICAgICAgLy8gVmFsaWRhdGUgdG8gbWFrZSBzdXJlIGV2ZXJ5IHNsb3QgaW4gdGhl
IHNjb3BlIGhhcyBvbmUgdmFsdWUuCisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcih0YWJsZS0+bV9sb2NrKTsKKyAgICAgICAgICAgIGZvciAoYXV0byBpdGVyID0gdGFibGUt
PmJlZ2luKGxvY2tlciksIGVuZCA9IHRhYmxlLT5lbmQobG9ja2VyKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLnNjb3BlT2Zmc2V0KCku
b2Zmc2V0KCkgPT0gZGF0YS5tX3Byb3BlcnRpZXNbaV0ubV9pZGVudGlmaWVyTnVtYmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGZvdW5kLCBmb3VuZCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcigpCisgICAgeworICAgICAgICBMQmFz
aWNCbG9jayB0aW1lckRpZEZpcmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrV2F0Y2hk
b2dUaW1lciB0aW1lciBkaWQgZmlyZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1dhdGNoZG9nVGltZXIgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDhaZXJv
RXh0MzIobV9vdXQuYWJzb2x1dGUodm0oKS53YXRjaGRvZygpLT50aW1lckRpZEZpcmVBZGRyZXNz
KCkpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKHN0YXRlKSwKKyAgICAg
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHRpbWVyRGlkRmlyZSkpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odGltZXJEaWRGaXJl
LCBjb250aW51YXRpb24pOworCisgICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcihv
cGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyLCBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisKKyAgICBM
VmFsdWUgZGlkT3ZlcmZsb3dTdGFjaygpCisgICAgeworICAgICAgICAvLyBUaGlzIGRvZXMgYSB2
ZXJ5IHNpbXBsZSBsZWFmIGZ1bmN0aW9uIGFuYWx5c2lzLiBUaGUgaW52YXJpYW50IG9mIEZUTCBj
YWxsCisgICAgICAgIC8vIGZyYW1lcyBpcyB0aGF0IHRoZSBjYWxsZXIgaGFkIGFscmVhZHkgZG9u
ZSBlbm91Z2ggb2YgYSBzdGFjayBjaGVjayB0bworICAgICAgICAvLyBwcm92ZSB0aGF0IHRoaXMg
Y2FsbCBmcmFtZSBoYXMgZW5vdWdoIHN0YWNrIHRvIHJ1biwgYW5kIGFsc28gZW5vdWdoIHN0YWNr
CisgICAgICAgIC8vIHRvIG1ha2UgcnVudGltZSBjYWxscy4gU28sIHdlIG9ubHkgbmVlZCB0byBz
dGFjayBjaGVjayB3aGVuIG1ha2luZyBjYWxscworICAgICAgICAvLyB0byBvdGhlciBKUyBmdW5j
dGlvbnMuIElmIHdlIGRvbid0IGZpbmQgc3VjaCBjYWxscyB0aGVuIHdlIGRvbid0IG5lZWQgdG8K
KyAgICAgICAgLy8gZG8gYW55IHN0YWNrIGNoZWNrcy4KKyAgICAgICAgCisgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tz
KCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5SWQ6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRCeUlkOgorICAgICAg
ICAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KAorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKHZtKCkuYWRkcmVz
c09mRlRMU3RhY2tMaW1pdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X291dC5ib29sZWFuRmFsc2U7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcmd1bWVudHNMZW5n
dGggeworICAgICAgICBBcmd1bWVudHNMZW5ndGgoKQorICAgICAgICAgICAgOiBpc0tub3duKGZh
bHNlKQorICAgICAgICAgICAgLCBrbm93bihVSU5UX01BWCkKKyAgICAgICAgICAgICwgdmFsdWUo
bnVsbHB0cikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlz
S25vd247CisgICAgICAgIHVuc2lnbmVkIGtub3duOworICAgICAgICBMVmFsdWUgdmFsdWU7Cisg
ICAgfTsKKyAgICBBcmd1bWVudHNMZW5ndGggZ2V0QXJndW1lbnRzTGVuZ3RoKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgQXJndW1lbnRzTGVuZ3RoIGxl
bmd0aDsKKworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lICYmICFpbmxpbmVDYWxsRnJhbWUt
PmlzVmFyYXJncygpKSB7CisgICAgICAgICAgICBsZW5ndGgua25vd24gPSBpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxOworICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSB0
cnVlOworICAgICAgICAgICAgbGVuZ3RoLnZhbHVlID0gbV9vdXQuY29uc3RJbnQzMihsZW5ndGgu
a25vd24pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gVUlO
VF9NQVg7CisgICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IGZhbHNlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAg
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgYXJndW1lbnRD
b3VudFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOworICAgICAgICAgICAgbGVu
Z3RoLnZhbHVlID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKGFyZ3VtZW50Q291
bnRSZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBsZW5ndGg7CisgICAgfQorICAgIAorICAgIEFyZ3VtZW50c0xlbmd0aCBnZXRB
cmd1bWVudHNMZW5ndGgoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50c0xlbmd0
aChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgZ2V0Q3VycmVudENhbGxlZSgpCisgICAgeworICAgICAgICBpZiAoSW5saW5l
Q2FsbEZyYW1lKiBmcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSkgeworICAgICAgICAgICAgaWYgKGZyYW1lLT5pc0Nsb3N1cmVDYWxsKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoZnJhbWUtPmNhbGxlZVJlY292ZXJ5
LnZpcnR1YWxSZWdpc3RlcigpKSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha1BvaW50ZXIoZnJh
bWUtPmNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkuYXNDZWxsKCkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX291dC5sb2FkUHRyKGFkZHJlc3NGb3IoSlNTdGFjazo6Q2FsbGVlKSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBnZXRBcmd1bWVudHNTdGFydChJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSkKKyAgICB7CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9
IEFzc2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQoaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Ioc3RhcnQpLnZhbHVlKCk7CisgICAgfQorICAgIAorICAgIExW
YWx1ZSBnZXRBcmd1bWVudHNTdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gZ2V0QXJndW1l
bnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGNoZWNrU3Ry
dWN0dXJlKAorICAgICAgICBMVmFsdWUgc3RydWN0dXJlRGlzY3JpbWluYW50LCBjb25zdCBGb3Jt
YXR0ZWRWYWx1ZSYgZm9ybWF0dGVkVmFsdWUsIEV4aXRLaW5kIGV4aXRLaW5kLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCwgY29uc3QgRnVuY3RvciYgd2Vha1N0cnVjdHVyZURpc2Ny
aW1pbmFudCkKKyAgICB7CisgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICB0ZXJtaW5hdGUoZXhpdEtpbmQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHNldC5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVEaXNjcmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVE
aXNjcmltaW5hbnQoc2V0WzBdKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZXQuc2l6ZSgp
IC0gMTsgKytpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVj
dHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbaV0pKSwKKyAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5leHRTdHJ1Y3R1cmUp
KTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5leHRTdHJ1Y3R1cmUpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBleGl0S2luZCwgZm9y
bWF0dGVkVmFsdWUsIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVEaXNj
cmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVEaXNjcmltaW5hbnQoc2V0Lmxhc3QoKSkpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBu
dW1iZXJPck5vdENlbGxUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVU
b0ludDMyIGludCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RJbnRDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgbm90IGludCBjYXNlIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gMDsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90TnVt
YmVyQ2FzZSA9IDA7CisgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlKSB7
CisgICAgICAgICAgICBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRv
SW50MzIgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBub3ROdW1iZXJDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgbm90IG51bWJlciBjYXNlIikpOworICAgICAg
ICB9CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiVmFsdWVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIFZl
Y3RvcjxWYWx1ZUZyb21CbG9jaz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdEludDMyKHZhbHVlKSwgdW5zdXJlKG5vdEludENhc2UpLCB1bnN1cmUoaW50Q2Fz
ZSkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbnRDYXNlLCBub3RJbnRDYXNlKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQu
YW5jaG9yKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIGlmIChlZGdlLnVzZUtpbmQoKSA9PSBOdW1iZXJVc2Up
IHsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEludENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsIGlzQ2VsbE9yTWlzYyh2YWx1ZSkpOworICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRvSW50MzIodW5ib3hEb3VibGUodmFsdWUp
KSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90SW50Q2FzZSwgZG91YmxlQ2FzZSk7
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXNDZWxsT3JNaXNj
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpLCB1bnN1cmUo
ZG91YmxlQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhk
b3VibGVDYXNlLCBub3ROdW1iZXJDYXNlKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihkb3VibGVUb0ludDMyKHVuYm94RG91YmxlKHZhbHVlKSkpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwg
flNwZWNDZWxsLCBpc0NlbGwodmFsdWUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHNwZWNpYWxSZXN1bHQgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgbV9vdXQu
ZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSkpKSwKKyAgICAgICAgICAgICAgICBtX291dC5pbnQzMk9uZSwgbV9vdXQuaW50MzJaZXJv
KTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihzcGVjaWFsUmVzdWx0
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKTsKKyAgICB9CisK
KyAgICB2b2lkIGNoZWNrSW5mZXJyZWRUeXBlKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlLCBjb25z
dCBJbmZlcnJlZFR5cGU6OkRlc2NyaXB0b3ImIHR5cGUpCisgICAgeworICAgICAgICAvLyBUaGlz
IGNhbm5vdCB1c2UgRlRMX1RZUEVfQ0hFQ0sgb3IgdHlwZUNoZWNrKCkgYmVjYXVzZSBpdCBpcyBj
YWxsZWQgcGFydGlhbGx5LCBhcyBpbiBhIG5vZGUgbGlrZToKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gICAgIE11bHRpUHV0QnlPZmZzZXQoLi4uKQorICAgICAgICAvLworICAgICAgICAvLyBtYXkg
YmUgbG93ZXJlZCB0bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIHN3aXRjaCAob2JqZWN0
LT5zdHJ1Y3R1cmUpIHsKKyAgICAgICAgLy8gICAgIGNhc2UgNDI6CisgICAgICAgIC8vICAgICAg
ICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMSk7CisgICAgICAgIC8vICAgICAgICAgLi4u
CisgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vICAgICBjYXNlIDQzOgorICAg
ICAgICAvLyAgICAgICAgIGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTIpOworICAgICAgICAv
LyAgICAgICAgIC4uLgorICAgICAgICAvLyAgICAgICAgIGJyZWFrOworICAgICAgICAvLyAgICAg
fQorICAgICAgICAvLworICAgICAgICAvLyB3aGVyZSB0eXBlMSBhbmQgdHlwZTIgYXJlIGRpZmZl
cmVudC4gVXNpbmcgdHlwZUNoZWNrKCkgd291bGQgbWVhbiB0aGF0IHRoZSBlZGdlIHdvdWxkIGJl
CisgICAgICAgIC8vIGZpbHRlcmVkIGJ5IHR5cGUxICYgdHlwZTIsIGluc3RlYWQgb2YgdHlwZTEg
fCB0eXBlMi4KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodHlwZS5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvdHRvbToKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgbV9vdXQuYm9vbGVhblRydWUp
OworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpCb29s
ZWFuOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLCBpc05vdEJvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T3RoZXI6Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6SW50MzI6CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6TnVtYmVyOgorICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE51bWJl
cih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpTdHJpbmc6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFk
VHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFs
dWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdFN0cmluZyh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpTeW1ib2w6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVk
Z2Uubm9kZSgpLCBpc05vdFN5bWJvbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3Ry
dWN0dXJlOgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1
ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKKyAg
ICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9m
KFN0cnVjdHVyZVNldCh0eXBlLnN0cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSks
IGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3Ry
dWN0dXJlSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUu
c3RydWN0dXJlKCkpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyOiB7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIG5vdCBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RD
ZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIGlmICghYWJzdHJh
Y3RWYWx1ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldCh0eXBlLnN0
cnVjdHVyZSgpKSkpIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHR5cGUuc3RydWN0dXJlKCkpKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0OgorICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6T2JqZWN0T3JPdGhlcjogeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY2Vs
bCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjb250aW51YXRp
b24iKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5
cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwg
bm90Q2VsbENhc2UpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAg
ICAgaXNOb3RPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCkpOworCisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBzcGVj
dWxhdGUoCisgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSAmIH5TcGVjQ2VsbCkpOworCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBJbmZlcnJl
ZFR5cGU6OlRvcDoKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgaW5mZXJyZWQgdHlwZSIpOworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgbG9hZFByb3BlcnR5KExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1
cm4gbV9vdXQubG9hZDY0KGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1i
ZXIsIG9mZnNldCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlUHJvcGVydHkoCisgICAg
ICAgIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlNjQo
dmFsdWUsIGFkZHJlc3NPZlByb3BlcnR5KHN0b3JhZ2UsIGlkZW50aWZpZXJOdW1iZXIsIG9mZnNl
dCkpOworICAgIH0KKyAgICAKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc09mUHJvcGVydHkoCisg
ICAgICAgIExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcygKKyAg
ICAgICAgICAgIG1faGVhcHMucHJvcGVydGllc1tpZGVudGlmaWVyTnVtYmVyXSwgc3RvcmFnZSwg
b2Zmc2V0UmVsYXRpdmVUb0Jhc2Uob2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBz
dG9yYWdlRm9yVHJhbnNpdGlvbigKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAorICAgICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1
cmUqIG5leHRTdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIAorICAgICAgICBpZiAo
cHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gbmV4dFN0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkQnV0dGVyZmx5V2l0
aEJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAg
ICAgIGlmICghcHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpCisgICAgICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIHByZXZpb3VzU3Ry
dWN0dXJlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAorICAgICAgICAgICAgICAgIG9iamVjdCwgbG9hZEJ1dHRlcmZseVdp
dGhCYXJyaWVyKG9iamVjdCksCisgICAgICAgICAgICAgICAgcHJldmlvdXNTdHJ1Y3R1cmUsIG5l
eHRTdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbWl0U3RvcmVCYXJy
aWVyKG9iamVjdCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTFZhbHVlIG9iamVjdCwgU3Ry
dWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChwcmV2aW91c1N0
cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgICAgICAgICAgcmV0dXJu
IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnRQdHIsCisgICAgICAgICAgICAgICAg
bV9vdXQub3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZWFsbG9jYXRl
QnV0dGVyZmx5VG9IYXZlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCisgICAg
ICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1w
bChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpOworICAgICAgICBtX291dC5zdG9yZVB0cihyZXN1
bHQsIG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSgKKyAgICAgICAgTFZhbHVlIG9iamVjdCwgTFZhbHVlIG9sZFN0b3JhZ2UsIFN0cnVjdHVyZSog
cHJldmlvdXMsIFN0cnVjdHVyZSogbmV4dCkKKyAgICB7CisgICAgICAgIHNpemVfdCBvbGRTaXpl
ID0gcHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gb2xkU2l6ZSAqIG91dE9mTGluZUdyb3d0aEZhY3RvcjsgCisKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChuZXh0LCBuZXdTaXplID09IG5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgICAg
ICAKKyAgICAgICAgaWYgKHByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Cisg
ICAgICAgICAgICBMVmFsdWUgbmV3QWxsb2NTaXplID0gbV9vdXQuY29uc3RJbnRQdHIobmV3U2l6
ZSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB2bUNhbGwobV9vdXQu
aW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVhbGxvY2F0ZUJ1dHRlcmZseVRvR3Jv
d1Byb3BlcnR5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBvYmplY3QsIG5ld0FsbG9jU2l6ZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZVdpdGhTaXplSW1wbChuZXdTaXplKTsKKworICAgICAgICBwdHJkaWZmX3QgaGVh
ZGVyU2l6ZSA9IC1zaXplb2YoSW5kZXhpbmdIZWFkZXIpIC0gc2l6ZW9mKHZvaWQqKTsKKyAgICAg
ICAgcHRyZGlmZl90IGVuZFN0b3JhZ2UgPSBoZWFkZXJTaXplIC0gc3RhdGljX2Nhc3Q8cHRyZGlm
Zl90PihvbGRTaXplICogc2l6ZW9mKEpTVmFsdWUpKTsKKworICAgICAgICBmb3IgKHB0cmRpZmZf
dCBvZmZzZXQgPSBoZWFkZXJTaXplOyBvZmZzZXQgPiBlbmRTdG9yYWdlOyBvZmZzZXQgLT0gc2l6
ZW9mKHZvaWQqKSkgeworICAgICAgICAgICAgTFZhbHVlIGxvYWRlZCA9IAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgb2xkU3RvcmFnZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBtX291dC5zdG9yZVB0
cihsb2FkZWQsIG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCks
IHJlc3VsdCwgb2Zmc2V0KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0
b3JlUHRyKHJlc3VsdCwgbV9vdXQuYWRkcmVzcyhvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0
dGVyZmx5KSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwoc2l6ZV90IHNp
emVJblZhbHVlcykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBzbG93
IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5p
bnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzICogc2l6ZW9mKEpTVmFsdWUpKSwgc2xv
d1BhdGgpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9
IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmFkZChtX291dC5jb25zdEludFB0cihz
aXplb2YoSW5kZXhpbmdIZWFkZXIpKSwgZW5kT2ZTdG9yYWdlKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBz
bG93QnV0dGVyZmx5VmFsdWU7CisgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0gaW5pdGlhbE91
dE9mTGluZUNhcGFjaXR5KSB7CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5
U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2Fw
YWNpdHksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xv
d0J1dHRlcmZseVZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2UsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVy
Zmx5ID0gbV9vdXQuYW5jaG9yKHNsb3dCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIGdldEJ5SWQoTFZhbHVlIGJhc2UpCisgICAgeworICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0g
bV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07CisKKyAgICAg
ICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50
NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisKKyAg
ICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBHZXRCeUlkRmx1c2gsIHdlIG1pZ2h0IGdldCBz
b21lIHBlcmZvcm1hbmNlIGJvb3N0IGlmIHdlIGNsYWltIHRoYXQgaXQKKyAgICAgICAgLy8gY2xv
YmJlcnMgdm9sYXRpbGUgcmVnaXN0ZXJzIGxhdGUuIEl0J3Mgbm90IG5lY2Vzc2FyeSBmb3IgY29y
cmVjdG5lc3MsIHRob3VnaCwgc2luY2UgdGhlCisgICAgICAgIC8vIElDIGNvZGUgaXMgc3VwZXIg
c21hcnQgYWJvdXQgc2F2aW5nIHJlZ2lzdGVycy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjg0OAorICAgICAgICAKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworCisg
ICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUg
PQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQp
OworCisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBv
aW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAg
ICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAg
ICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2Rl
LT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZGly
ZWN0IGV4aXQgdGFyZ2V0IGZvciBvcGVyYXRpb24gY2FsbHMuCisgICAgICAgICAgICAgICAgQm94
PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGpp
dCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBleGl0IGZvciBjYWxsIElDJ3Mg
Y3JlYXRlZCBieSB0aGUgZ2V0QnlJZCBmb3IgZ2V0dGVycy4gV2UgZG9uJ3QgaGF2ZQorICAgICAg
ICAgICAgICAgIC8vIHRvIGRvIGFueXRoaW5nIHdlaXJkIG90aGVyIHRoYW4gY2FsbCB0aGlzLCBz
aW5jZSBpdCB3aWxsIGFzc29jaWF0ZSB0aGUgZXhpdCB3aXRoCisgICAgICAgICAgICAgICAgLy8g
dGhlIGNhbGxzaXRlIGluZGV4LgorICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2No
ZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVEdldEJ5SWRHZW5lcmF0b3I+Ojpj
cmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2lu
LnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwKKyAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CisKKyAgICAgICAg
ICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAg
ICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFy
YW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBw
YXJhbXNbMV0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHVpZCkpLmNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnJlcG9ydFNsb3dQYXRoQ2FsbChzbG93UGF0aEJlZ2luLCBzbG93UGF0aENhbGwp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZmluYWxpemUobGlua0J1ZmZlcik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CisgICAgfQor
CisgICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihMVmFsdWUgb2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgb2JqZWN0LCBtX291
dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpLCBvcGVyYXRpb25H
ZXRCdXR0ZXJmbHkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZFZlY3RvcldpdGhCYXJy
aWVyKExWYWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVl
ID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVjdG9y
KTsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgZmFzdFJlc3VsdFZh
bHVlLAorICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7CisgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JXaXRo
QmFycmllciBzbG93IHBhdGgiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yV2l0aEJhcnJpZXIgY29u
dGludWF0aW9uIikpOworCisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChpc0Zhc3RUeXBlZEFycmF5KG9iamVjdCksIHJhcmVseShzbG93UGF0aCksIHVzdWFs
bHkoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgICAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAg
ICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkdldEFycmF5QnVmZmVyVmVjdG9yLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwor
ICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBv
YmplY3QsIExWYWx1ZSBwb2ludGVyLCBQX0pJVE9wZXJhdGlvbl9FQyBzbG93UGF0aEZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvcHlCYXJyaWVyKAorICAgICAgICAgICAgcG9pbnRl
ciwKKyAgICAgICAgICAgIFsmXSAoKSAtPiBMVmFsdWUgeworICAgICAgICAgICAgICAgIHJldHVy
biBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG93UGF0aEZ1bmN0aW9uLCBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0sIG9iamVjdCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBjb3B5QmFycmllcihMVmFsdWUgcG9pbnRl
ciwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBzbG93IHBhdGgiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiY29weUJhcnJpZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IocG9pbnRlcik7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc0luVG9TcGFjZShwb2ludGVyKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xv
d1BhdGgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoZnVuY3RvcigpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CisgICAgfQorCisgICAgTFZhbHVlIGlzSW5Ub1NwYWNlKExWYWx1ZSBwb2lu
dGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm9QdHIocG9pbnRlciwg
bV9vdXQuY29uc3RJbnRQdHIoQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKTsKKyAgICB9CisK
KyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVJlYWRPbmx5KExWYWx1ZSBvYmplY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVtb3ZlU3BhY2VCaXRzKG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hl
YXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkVmVjdG9y
UmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0
VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192
ZWN0b3IpOworCisgICAgICAgIExCYXNpY0Jsb2NrIHBvc3NpYmx5RnJvbVNwYWNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yUmVhZE9ubHkgcG9zc2libHkgZnJvbSBzcGFjZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJsb2FkVmVjdG9yUmVhZE9ubHkgY29udGludWF0aW9uIikpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKwor
ICAgICAgICBtX291dC5icmFuY2goaXNJblRvU3BhY2UoZmFzdFJlc3VsdFZhbHVlKSwgdXN1YWxs
eShjb250aW51YXRpb24pLCByYXJlbHkocG9zc2libHlGcm9tU3BhY2UpKTsKKworICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHBvc3NpYmx5RnJvbVNwYWNlLCBj
b250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBtX291dC5z
ZWxlY3QoCisgICAgICAgICAgICBpc0Zhc3RUeXBlZEFycmF5KG9iamVjdCksIHJlbW92ZVNwYWNl
Qml0cyhmYXN0UmVzdWx0VmFsdWUpLCBmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisKKyAgICBM
VmFsdWUgcmVtb3ZlU3BhY2VCaXRzKExWYWx1ZSBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb3V0LmJpdEFuZCgKKyAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRy
KH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oQ29weUJhcnJpZXJCYXNlOjpzcGFjZUJpdHMpKSk7Cisg
ICAgfQorCisgICAgTFZhbHVlIGlzRmFzdFR5cGVkQXJyYXkoTFZhbHVlIG9iamVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihv
YmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbW9kZSksCisgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9p
bnRlciBiYXNlSW5kZXgoSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCwgTFZhbHVlIHN0b3JhZ2Us
IExWYWx1ZSBpbmRleCwgRWRnZSBlZGdlLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBoZWFwLCBzdG9yYWdl
LCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwgcHJvdmVuVmFsdWUoZWRnZSksIG9mZnNldCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50RnVuY3RvciwgdHlwZW5hbWUgRG91Ymxl
RnVuY3Rvcj4KKyAgICB2b2lkIGNvbXBhcmUoCisgICAgICAgIGNvbnN0IEludEZ1bmN0b3ImIGlu
dEZ1bmN0b3IsIGNvbnN0IERvdWJsZUZ1bmN0b3ImIGRvdWJsZUZ1bmN0b3IsCisgICAgICAgIFNf
SklUT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKKyAgICB7CisgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oaW50
RnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50NTJSZXBVc2Up
KSB7CisgICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAg
ICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBraW5kKTsKKyAgICAg
ICAgICAgIHNldEJvb2xlYW4oaW50RnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoRG91YmxlUmVwVXNlKSkgeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGRvdWJsZUZ1
bmN0b3IobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7
CisgICAgICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBhcmUoaW50RnVuY3RvciwgaGVscGVyRnVu
Y3Rpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdChFZGdlIGxlZnRDaGls
ZCwgRWRnZSByaWdodENoaWxkKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJpZ2h0Q2VsbCA9IGxv
d0NlbGwocmlnaHRDaGlsZCk7CisgICAgICAgIExWYWx1ZSBsZWZ0VmFsdWUgPSBsb3dKU1ZhbHVl
KGxlZnRDaGlsZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0ZVRydXRoeU9iamVjdChyaWdodENoaWxkLCByaWdodENlbGwsIFNwZWNPYmplY3Qp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVmdENlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QgbGVmdCBjZWxsIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxlZnROb3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGxlZnQgbm90IGNlbGwg
Y2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKGxl
ZnRWYWx1ZSwgcHJvdmVuVHlwZShsZWZ0Q2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShsZWZ0
Q2VsbENhc2UpLCB1bnN1cmUobGVmdE5vdENlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlZnRDZWxsQ2FzZSwgbGVmdE5v
dENlbGxDYXNlKTsKKyAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KGxlZnRDaGlsZCwgbGVm
dFZhbHVlLCBTcGVjT2JqZWN0IHwgKH5TcGVjQ2VsbCkpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKHJpZ2h0Q2VsbCwgbGVmdFZh
bHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGxlZnROb3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUobGVmdFZhbHVlKSwg
bGVmdENoaWxkLCBTcGVjT3RoZXIgfCBTcGVjQ2VsbCwgaXNOb3RPdGhlcihsZWZ0VmFsdWUpKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgY2VsbFJlc3VsdCwgbm90
Q2VsbFJlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVRydXRoeU9iamVj
dChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSBmaWx0ZXIpCisgICAgewor
ICAgICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQo
KSkgeworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdl
LCBmaWx0ZXIsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwp
LCBlZGdlLCBmaWx0ZXIsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLm5vZGUoKSwKKyAg
ICAgICAgICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludEZ1bmN0b3I+CisgICAgdm9pZCBub25TcGVj
dWxhdGl2ZUNvbXBhcmUoY29uc3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgU19KSVRPcGVyYXRp
b25fRUpKIGhlbHBlckZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVm
dElzSW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBsZWZ0IGlz
IGludCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFzdFBhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGZhc3QgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIHNs
b3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBjb250aW51YXRpb24iKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihsZWZ0KSwgcmFyZWx5KHNsb3dQYXRo
KSwgdXN1YWxseShsZWZ0SXNJbnQpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVmdElzSW50LCBmYXN0UGF0aCk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChpc05vdEludDMyKHJpZ2h0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShm
YXN0UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNs
b3dQYXRoKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihpbnRGdW5jdG9yKHVuYm94SW50MzIobGVmdCksIHVuYm94SW50MzIocmlnaHQpKSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdE51bGwodm1DYWxsKAorICAgICAgICAg
ICAgbV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24oaGVscGVyRnVuY3Rpb24pLCBtX2NhbGxG
cmFtZSwgbGVmdCwgcmlnaHQpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KSk7CisgICAgfQorCisgICAgTFZhbHVlIHN0cmluZ3NFcXVhbChMVmFsdWUg
bGVmdEpTU3RyaW5nLCBMVmFsdWUgcmlnaHRKU1N0cmluZykKKyAgICB7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdFRyaXZpYWxseVVuZXF1YWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgbm90IHRyaXZpYWxseSB1bmVxdWFsIGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEVtcHR5Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFs
IG5vdCBlbXB0eSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBsZWZ0UmVhZHlDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbGVmdCByZWFkeSBjYXNlIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayByaWdodFJlYWR5Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaW5nc0VxdWFsIHJpZ2h0IHJlYWR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxlZnQ4Qml0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxlZnQg
OC1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgcmlnaHQ4Qml0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHJpZ2h0IDgtYml0IGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVh
bCBsb29wIikpOworICAgICAgICBMQmFzaWNCbG9jayBieXRlc0VxdWFsID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJzdHJpbmdzRXF1YWwgYnl0ZXMgZXF1YWwiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgdHJ1ZSBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBmYWxzZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInN0cmluZ3NFcXVhbCBmYWxzZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBz
bG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHNsb3cgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBsZW5n
dGggPSBtX291dC5sb2FkMzIobGVmdEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobGVu
Z3RoLCBtX291dC5sb2FkMzIocmlnaHRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgp
KSwKKyAgICAgICAgICAgIHVuc3VyZShmYWxzZUNhc2UpLCB1bnN1cmUobm90VHJpdmlhbGx5VW5l
cXVhbENhc2UpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKG5vdFRyaXZpYWxseVVuZXF1YWxDYXNlLCBub3RFbXB0eUNhc2UpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5pc1plcm8zMihsZW5ndGgpLCB1bnN1cmUodHJ1ZUNhc2UpLCB1bnN1
cmUobm90RW1wdHlDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RW1wdHlDYXNl
LCBsZWZ0UmVhZHlDYXNlKTsKKworICAgICAgICBMVmFsdWUgbGVmdCA9IG1fb3V0LmxvYWRQdHIo
bGVmdEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHJp
Z2h0ID0gbV9vdXQubG9hZFB0cihyaWdodEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVl
KTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChsZWZ0KSwgdXN1YWxseShs
ZWZ0UmVhZHlDYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obGVmdFJlYWR5Q2FzZSwgcmlnaHRSZWFkeUNhc2UpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwocmlnaHQpLCB1c3VhbGx5KHJpZ2h0UmVhZHlDYXNlKSwg
cmFyZWx5KHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmlnaHRSZWFkeUNh
c2UsIGxlZnQ4Qml0Q2FzZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihsZWZ0LCBt
X2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJl
KHNsb3dDYXNlKSwgdW5zdXJlKGxlZnQ4Qml0Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGxlZnQ4Qml0Q2FzZSwgcmlnaHQ4Qml0Q2FzZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihyaWdodCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAg
ICAgICAgICAgIHVuc3VyZShzbG93Q2FzZSksIHVuc3VyZShyaWdodDhCaXRDYXNlKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocmlnaHQ4Qml0Q2FzZSwgbG9vcCk7CisKKyAgICAgICAgTFZh
bHVlIGxlZnREYXRhID0gbV9vdXQubG9hZFB0cihsZWZ0LCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0
YSk7CisgICAgICAgIExWYWx1ZSByaWdodERhdGEgPSBtX291dC5sb2FkUHRyKHJpZ2h0LCBtX2hl
YXBzLlN0cmluZ0ltcGxfZGF0YSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhBdFN0
YXJ0ID0gbV9vdXQuYW5jaG9yKGxlbmd0aCk7CisKKyAgICAgICAgbV9vdXQuanVtcChsb29wKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wLCBieXRlc0VxdWFsKTsKKworICAgICAgICBM
VmFsdWUgaW5kZXhBdExvb3BUb3AgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGluZGV4QXRTdGFy
dCk7CisgICAgICAgIExWYWx1ZSBpbmRleEluTG9vcCA9IG1fb3V0LnN1YihpbmRleEF0TG9vcFRv
cCwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIExWYWx1ZSBsZWZ0Qnl0ZSA9IG1fb3V0Lmxv
YWQ4WmVyb0V4dDMyKAorICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFj
dGVyczgsIGxlZnREYXRhLCBtX291dC56ZXJvRXh0UHRyKGluZGV4SW5Mb29wKSkpOworICAgICAg
ICBMVmFsdWUgcmlnaHRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCisgICAgICAgICAgICBt
X291dC5iYXNlSW5kZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgcmlnaHREYXRhLCBtX291dC56ZXJv
RXh0UHRyKGluZGV4SW5Mb29wKSkpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RF
cXVhbChsZWZ0Qnl0ZSwgcmlnaHRCeXRlKSwgdW5zdXJlKGZhbHNlQ2FzZSksIHVuc3VyZShieXRl
c0VxdWFsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnl0ZXNFcXVhbCwgdHJ1ZUNhc2Up
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4Rm9yTmV4dEl0ZXJhdGlvbiA9IG1fb3V0
LmFuY2hvcihpbmRleEluTG9vcCk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5k
ZXhBdExvb3BUb3AsIGluZGV4Rm9yTmV4dEl0ZXJhdGlvbik7CisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5ub3RaZXJvMzIoaW5kZXhJbkxvb3ApLCB1bnN1cmUobG9vcCksIHVuc3VyZSh0cnVl
Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRydWVDYXNlLCBmYWxzZUNhc2UpOwor
ICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdHJ1ZVJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhmYWxzZUNhc2UsIHNsb3dDYXNlKTsKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYWxzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHNs
b3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxKSwgbV9jYWxsRnJhbWUsCisgICAgICAg
ICAgICBsZWZ0SlNTdHJpbmcsIHJpZ2h0SlNTdHJpbmcpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbihzbG93UmVzdWx0VmFsdWUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmJvb2xlYW4sIHRydWVSZXN1bHQsIGZhbHNlUmVzdWx0LCBzbG93UmVzdWx0KTsKKyAg
ICB9CisKKyAgICBlbnVtIFNjcmF0Y2hGUFJVc2FnZSB7CisgICAgICAgIERvbnROZWVkU2NyYXRj
aEZQUiwKKyAgICAgICAgTmVlZFNjcmF0Y2hGUFIKKyAgICB9OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJpbmFyeUFyaXRoT3BHZW5lcmF0b3IsIFNjcmF0Y2hGUFJVc2FnZSBzY3JhdGNoRlBSVXNh
Z2UgPSBEb250TmVlZFNjcmF0Y2hGUFI+CisgICAgdm9pZCBlbWl0QmluYXJ5U25pcHBldChKX0pJ
VE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG5vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3Vs
dFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lz
dGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDI7
CisgICAgICAgIGlmIChzY3JhdGNoRlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIpCisgICAgICAg
ICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMrKzsKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0
R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAg
ICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAgICAg
ICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+
anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEJpbmFy
eUFyaXRoT3BHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxlZnRPcGVy
YW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBh
cmFtc1syXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMCks
IHBhcmFtcy5mcFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2goMCksCisgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hGUFJVc2FnZSA9PSBOZWVkU2NyYXRjaEZQUiA/IHBhcmFtcy5mcFNjcmF0
Y2goMikgOiBJbnZhbGlkRlBSUmVnKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2Vu
ZXJhdGVGYXN0UGF0aChqaXQpOworCisgICAgICAgICAgICAgICAgaWYgKGdlbmVyYXRvci0+ZGlk
RW1pdEZhc3RQYXRoKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5lbmRKdW1w
TGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93
TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PnNsb3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBz
bG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVu
Y3Rpb24sIHBhcmFtc1swXS5ncHIoKSwgcGFyYW1zWzFdLmdwcigpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJpbmFyeUJpdE9wR2VuZXJhdG9yPgorICAgIHZvaWQgZW1pdEJpbmFy
eUJpdE9wU25pcHBldChKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogTWFrZSB0aGlzIGRvIGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE2ODYKKyAgICAgICAgICAgIAorICAgICAgICBMVmFs
dWUgbGVmdCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmln
aHQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFu
ZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUo
KSk7CisgICAgICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAg
ICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJl
ZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9p
bnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Cisg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24o
cGFyYW1zKS0+anVtcHMoaml0KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8QmluYXJ5Qml0T3BHZW5lcmF0b3I+OjpjcmVhdGUoCisg
ICAgICAgICAgICAgICAgICAgIGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIEpTVmFsdWVSZWdz
KHBhcmFtc1swXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFt
c1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIoKSksIHBhcmFtcy5ncFNjcmF0
Y2goMCkpOworCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGpp
dCk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7
CisKKyAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+
c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1z
LnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rp
b24sIHBhcmFtc1swXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
MV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICB9KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgIH0KKwor
ICAgIHZvaWQgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNo
aWZ0VHlwZSBzaGlmdFR5cGUpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBkbyBleGNlcHRpb25zLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjg2Cisg
ICAgICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7
CisKKyAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkpOworICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdo
dE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRUeXBlKCkpOwor
ICAgICAgICAgICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0
LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIobGVmdCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihyaWdodCk7
CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVlUmVwOjpyZWcoR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3Rh
Z1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KSk7CisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25I
YW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNo
cG9pbnQpOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwor
ICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOworICAgICAgICBw
YXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7
CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICBwYXRjaHBvaW50
LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIEFs
bG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+
IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVk
dWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFJpZ2h0U2hpZnRHZW5l
cmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGxlZnRPcGVyYW5kLCByaWdodE9w
ZXJhbmQsIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSksCisgICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksIEpTVmFsdWVSZWdzKHBhcmFtc1syXS5ncHIo
KSksCisgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5mcFNjcmF0Y2goMCksIHBhcmFtcy5ncFNj
cmF0Y2goMCksIEludmFsaWRGUFJSZWcsIHNoaWZ0VHlwZSk7CisKKyAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRo
RnVuY3Rpb24gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0VHlwZSA9PSBKSVRS
aWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gb3BlcmF0aW9uVmFsdWVCaXRSU2hpZnQgOiBvcGVyYXRpb25WYWx1ZUJpdFVSU2hpZnQ7
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5h
dmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwg
cGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5n
cHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1w
KCkubGlua1RvKGRvbmUsICZqaXQpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7CisgICAgfQorCisgICAg
TFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIm9iamVjdCBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CisgICAgCisgICAgICAgIExWYWx1
ZSByZXN1bHQ7CisgICAgICAgIExWYWx1ZSBjb25kaXRpb247CisgICAgICAgIGlmIChPcHRpb25z
Ojpmb3JjZUdDU2xvd1BhdGhzKCkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmludFB0
clplcm87CisgICAgICAgICAgICBjb25kaXRpb24gPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkUHRyKAorICAgICAg
ICAgICAgICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFk
KTsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1fb3V0Lm5vdE51bGwocmVzdWx0KTsKKyAgICAg
ICAgfQorICAgICAgICBtX291dC5icmFuY2goY29uZGl0aW9uLCB1c3VhbGx5KHN1Y2Nlc3MpLCBy
YXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN1Y2Nl
c3MpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoCisgICAgICAgICAgICBtX291
dC5sb2FkUHRyKHJlc3VsdCwgbV9oZWFwcy5KU0NlbGxfZnJlZUxpc3ROZXh0KSwKKyAgICAgICAg
ICAgIGFsbG9jYXRvciwgbV9oZWFwcy5NYXJrZWRBbGxvY2F0b3JfZnJlZUxpc3RIZWFkKTsKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHN0b3JlU3RydWN0
dXJlKExWYWx1ZSBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSksIG9iamVjdCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291dC5zdG9yZTMyKAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPm9iamVjdEluaXRpYWxpemF0aW9u
QmxvYigpKSwKKyAgICAgICAgICAgIG9iamVjdCwgbV9oZWFwcy5KU0NlbGxfdXNlZnVsQnl0ZXMp
OworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlQ2VsbChhbGxvY2F0b3IsIHNsb3dQYXRoKTsKKyAgICAg
ICAgc3RvcmVTdHJ1Y3R1cmUocmVzdWx0LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKKyAgICAgICAgTFZhbHVl
IGFsbG9jYXRvciwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRl
Q2VsbChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5zdG9y
ZVB0cihidXR0ZXJmbHksIHJlc3VsdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
bGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KAorICAgICAgICBzaXplX3Qgc2l6
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0o
KS5oZWFwLmFsbG9jYXRvckZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+KHNpemUpOworICAgICAg
ICByZXR1cm4gYWxsb2NhdGVPYmplY3QobV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3Ry
dWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAg
eworICAgICAgICByZXR1cm4gYWxsb2NhdGVPYmplY3Q8Q2xhc3NUeXBlPigKKyAgICAgICAgICAg
IENsYXNzVHlwZTo6YWxsb2NhdGlvblNpemUoMCksIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93
UGF0aCk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KKyAg
ICBMVmFsdWUgYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0KAorICAgICAgICBMVmFsdWUgc2l6
ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZFNwYWNlOjpwcmVj
aXNlU3RlcCAmIChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6
cHJlY2lzZVN0ZXAgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydCghKE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjppbXByZWNp
c2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgbXVzdCBiZSBhIHBvd2Vy
IG9mIHR3by4iKTsKKworICAgICAgICBMVmFsdWUgc3Vic3BhY2UgPSBtX291dC5jb25zdEludFB0
cigmdm0oKS5oZWFwLnN1YnNwYWNlRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oKSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbWFsbENhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IHNtYWxsIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGxhcmdlIG9yIG92ZXJzaXplIGNh
c2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhcmdlQ2FzZUJsb2NrID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgbGFyZ2UgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJh
bGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIHVwcm91bmRlZFNpemUgPSBtX291dC5hZGQoc2l6ZSwgbV9vdXQuY29uc3RJ
bnQzMihNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXAgLSAxKSk7CisgICAgICAgIExWYWx1ZSBpc1Nt
YWxsID0gbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihNYXJrZWRT
cGFjZTo6cHJlY2lzZUN1dG9mZikpOworICAgICAgICBtX291dC5icmFuY2goaXNTbWFsbCwgdW5z
dXJlKHNtYWxsQ2FzZUJsb2NrKSwgdW5zdXJlKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhz
bWFsbENhc2VCbG9jaywgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKTsKKyAgICAgICAgVHlwZWRQ
b2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLk1h
cmtlZFNwYWNlX1N1YnNwYWNlX3ByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFjZSwKKyAgICAgICAg
ICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXplLCBtX291dC5jb25z
dEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6cHJlY2lzZVN0ZXApKSkpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc21hbGxBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1
ZSgpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrLCBsYXJnZUNhc2VCbG9j
ayk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmJlbG93KHVwcm91
bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3BhY2U6OmltcHJlY2lzZUN1dG9mZikp
LAorICAgICAgICAgICAgdXN1YWxseShsYXJnZUNhc2VCbG9jayksIHJhcmVseShzbG93UGF0aCkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlQmxvY2ssIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAg
ICBtX2hlYXBzLk1hcmtlZFNwYWNlX1N1YnNwYWNlX2ltcHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNw
YWNlLAorICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRlZFNp
emUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVw
KSkpKSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGxhcmdlQWxsb2NhdG9yID0gbV9vdXQuYW5j
aG9yKGFkZHJlc3MudmFsdWUoKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICBMVmFsdWUgYWxsb2NhdG9yID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgc21h
bGxBbGxvY2F0b3IsIGxhcmdlQWxsb2NhdG9yKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBh
bGxvY2F0ZU9iamVjdChhbGxvY2F0b3IsIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7
CisgICAgfQorICAgIAorICAgIC8vIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhl
IGFsbG9jYXRpb24uCisgICAgTFZhbHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKExW
YWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIENvcGllZEFs
bG9jYXRvciYgYWxsb2NhdG9yID0gdm0oKS5oZWFwLnN0b3JhZ2VBbGxvY2F0b3IoKTsKKyAgICAg
ICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHN1Y2Nlc3MgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InN0b3JhZ2UgYWxsb2NhdGlvbiBzdWNjZXNzIikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHJlbWFpbmluZyA9IG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1
cnJlbnRSZW1haW5pbmcpKTsKKyAgICAgICAgTFZhbHVlIG5ld1JlbWFpbmluZyA9IG1fb3V0LnN1
YihyZW1haW5pbmcsIHNpemUpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgbV9vdXQubGVzc1RoYW4obmV3UmVtYWluaW5nLCBtX291dC5pbnRQdHJaZXJvKSwK
KyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoc3VjY2VzcykpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3VjY2Vzcyk7CisgICAgICAgIAorICAgICAgICBt
X291dC5zdG9yZVB0cihuZXdSZW1haW5pbmcsIG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9j
dXJyZW50UmVtYWluaW5nKSk7CisgICAgICAgIHJldHVybiBtX291dC5zdWIoCisgICAgICAgICAg
ICBtX291dC5sb2FkUHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJyZW50UGF5bG9h
ZEVuZCkpLCBuZXdSZW1haW5pbmcpOworICAgIH0KKworICAgIExWYWx1ZSBhbGxvY2F0ZUJhc2lj
U3RvcmFnZShMVmFsdWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9vdXQuc3ViKGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKHNpemUsIHNs
b3dQYXRoKSwgc2l6ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7CisgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5h
bGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYWxsb2NhdGVPYmplY3Qgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlT2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
aW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYWxsb2NhdGVPYmplY3QoCisgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIG1fb3V0Lmlu
dFB0clplcm8sIHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKKworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uTmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNs
b3dSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7CisgICAgfQorICAgIAorICAgIHN0cnVjdCBBcnJheVZhbHVlcyB7CisgICAgICAgIEFycmF5
VmFsdWVzKCkKKyAgICAgICAgICAgIDogYXJyYXkoMCkKKyAgICAgICAgICAgICwgYnV0dGVyZmx5
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJyYXlWYWx1ZXMo
TFZhbHVlIGFycmF5LCBMVmFsdWUgYnV0dGVyZmx5KQorICAgICAgICAgICAgOiBhcnJheShhcnJh
eSkKKyAgICAgICAgICAgICwgYnV0dGVyZmx5KGJ1dHRlcmZseSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYXJyYXk7CisgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHk7CisgICAgfTsKKyAgICBBcnJheVZhbHVlcyBhbGxvY2F0ZUpTQXJyYXkoCisgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cywgTEJhc2ljQmxvY2sg
c2xvd1BhdGgpCisgICAgeworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICBoYXNVbmRlY2lk
ZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCisgICAgICAgICAgICB8fCBoYXNEb3VibGUoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgdmVjdG9y
TGVuZ3RoID0gc3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBudW1FbGVtZW50cyk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplb2YoSlNWYWx1ZSkgKiB2
ZWN0b3JMZW5ndGggKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSwKKyAgICAgICAgICAgIHNsb3dQ
YXRoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoCisg
ICAgICAgICAgICBlbmRPZlN0b3JhZ2UsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVl
KSAqIHZlY3Rvckxlbmd0aCkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIG9iamVjdCA9IGFs
bG9jYXRlT2JqZWN0PEpTQXJyYXk+KAorICAgICAgICAgICAgc3RydWN0dXJlLCBidXR0ZXJmbHks
IHNsb3dQYXRoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJ
bnQzMihudW1FbGVtZW50cyksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVu
Z3RoKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKHZlY3Rvckxlbmd0
aCksIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChoYXNEb3VibGUoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUVsZW1lbnRzOyBpIDwgdmVjdG9yTGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCisgICAg
ICAgICAgICAgICAgICAgIGJ1dHRlcmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGll
c1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBBcnJheVZhbHVlcyhvYmplY3QsIGJ1dHRlcmZseSk7CisgICAgfQorICAgIAorICAgIEFycmF5
VmFsdWVzIGFsbG9jYXRlSlNBcnJheShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVt
RWxlbWVudHMpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSlNBcnJheSBhbGxvY2F0aW9uIHNsb3cgcGF0aCIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0FycmF5
IGFsbG9jYXRpb24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAg
ICAgICAKKyAgICAgICAgQXJyYXlWYWx1ZXMgZmFzdFZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShz
dHJ1Y3R1cmUsIG51bUVsZW1lbnRzLCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RBcnJheSA9IG1fb3V0LmFuY2hvcihmYXN0VmFsdWVzLmFycmF5KTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmFzdEJ1dHRlcmZseSA9IG1fb3V0LmFuY2hvcihmYXN0VmFsdWVzLmJ1dHRl
cmZseSk7CisgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICBMVmFsdWUgc2xvd0FycmF5VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdBcnJheVdpdGhT
aXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihudW1FbGVtZW50cykpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dBcnJheSA9IG1fb3V0LmFuY2hvcihzbG93QXJyYXlWYWx1ZSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBt
X291dC5sb2FkUHRyKHNsb3dBcnJheVZhbHVlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkp
OworCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIEFycmF5VmFsdWVzKAorICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdEFycmF5LCBzbG93QXJyYXkpLAorICAgICAgICAgICAgbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSkpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgYm9vbGlmeShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzd2l0Y2ggKGVkZ2UudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJv
b2xlYW5Vc2U6CisgICAgICAgICAgICByZXR1cm4gbG93Qm9vbGVhbihlZGdlKTsKKyAgICAgICAg
Y2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ub3RaZXJvMzIobG93SW50
MzIoZWRnZSkpOworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5kb3VibGVOb3RFcXVhbEFuZE9yZGVyZWQobG93RG91YmxlKGVkZ2UpLCBtX291dC5k
b3VibGVaZXJvKTsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoCisgICAgICAgICAgICAgICAgZXF1YWxOdWxsT3JVbmRl
ZmluZWQoCisgICAgICAgICAgICAgICAgICAgIGVkZ2UsIENlbGxDYXNlU3BlY3VsYXRlc09iamVj
dCwgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkLAorICAgICAgICAgICAgICAgICAgICBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKKyAgICAgICAg
ICAgIExWYWx1ZSBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyhlZGdlKTsKKyAgICAgICAgICAgIExW
YWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdHJpbmdWYWx1ZSwgbV9oZWFw
cy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKGxl
bmd0aCwgbV9vdXQuaW50MzJaZXJvKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBjb250cm9s
IGZsb3cgc3RydWN0dXJlOgorICAgICAgICAgICAgLy8gaWYgKHZhbHVlIGlzIGNlbGwpIHsKKyAg
ICAgICAgICAgIC8vICAgICBpZiAodmFsdWUgaXMgc3RyaW5nKQorICAgICAgICAgICAgLy8gICAg
ICAgICByZXN1bHQgPSAhIXZhbHVlLT5sZW5ndGgKKyAgICAgICAgICAgIC8vICAgICBlbHNlIHsK
KyAgICAgICAgICAgIC8vICAgICAgICAgZG8gZXZpbCB0aGluZ3MgZm9yIG1hc3F1ZXJhZGVzLWFz
LXVuZGVmaW5lZAorICAgICAgICAgICAgLy8gICAgICAgICByZXN1bHQgPSB0cnVlCisgICAgICAg
ICAgICAvLyAgICAgfQorICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSBpcyBpbnQzMikg
eworICAgICAgICAgICAgLy8gICAgIHJlc3VsdCA9ICEhdW5ib3hJbnQzMih2YWx1ZSkKKyAgICAg
ICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgbnVtYmVyKSB7CisgICAgICAgICAgICAvLyAg
ICAgcmVzdWx0ID0gISF1bmJveERvdWJsZSh2YWx1ZSkKKyAgICAgICAgICAgIC8vIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyAgICAgcmVzdWx0ID0gdmFsdWUgPT0ganNUcnVlCisgICAgICAgICAg
ICAvLyB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgY2VsbCBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgc3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bm90U3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5v
dCBzdHJpbmcgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90IGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludDMyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQm9vbGlmeSB1bnR5cGVkIGludDMyIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBub3RJbnQzMkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBu
b3QgaW50MzIgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBkb3VibGUgY2FzZSIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdERvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBub3QgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50
eXBlZCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZlY3RvcjxW
YWx1ZUZyb21CbG9jaz4gcmVzdWx0czsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSks
IHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBzdHJpbmdDYXNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoc3Ry
aW5nQ2FzZSksIHVuc3VyZShub3RTdHJpbmdDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIG5vdFN0cmluZ0Nhc2UpOworICAgICAgICAg
ICAgTFZhbHVlIG5vbkVtcHR5U3RyaW5nID0gbV9vdXQubm90WmVybzMyKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0
aCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG5vbkVtcHR5U3Ry
aW5nKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZ0Nhc2UsIG5vdENlbGxDYXNl
KTsKKyAgICAgICAgICAgIExWYWx1ZSBpc1RydXRoeU9iamVjdDsKKyAgICAgICAgICAgIGlmICht
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKQorICAgICAgICAg
ICAgICAgIGlzVHJ1dGh5T2JqZWN0ID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBtYXNxdWVyYWRlc0Nhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBtYXNxdWVyYWRlcyBjYXNlIikpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuVHJ1ZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMy
KAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksCisgICAgICAgICAgICAgICAg
ICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KG1hc3F1ZXJhZGVzQ2FzZSkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hc3F1ZXJhZGVz
Q2FzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaXNUcnV0aHlPYmplY3Qg
PSBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIo
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihsb2FkU3RydWN0dXJlKHZhbHVlKSwgbV9oZWFw
cy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoaXNUcnV0aHlPYmplY3QpKTsKKyAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGludDMyQ2FzZSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IH5TcGVjQ2VsbCksCisgICAgICAgICAgICAgICAgdW5zdXJlKGludDMyQ2FzZSksIHVuc3VyZShu
b3RJbnQzMkNhc2UpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW50MzJDYXNlLCBub3RJbnQzMkNhc2UpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKG1fb3V0Lm5vdFplcm8zMih1bmJveEludDMyKHZhbHVlKSkpKTsKKyAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90SW50MzJDYXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc051bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShl
ZGdlKSAmIH5TcGVjQ2VsbCksCisgICAgICAgICAgICAgICAgdW5zdXJlKGRvdWJsZUNhc2UpLCB1
bnN1cmUobm90RG91YmxlQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhkb3VibGVDYXNlLCBub3REb3VibGVDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBk
b3VibGVJc1RydXRoeSA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsQW5kT3JkZXJlZCgKKyAgICAgICAg
ICAgICAgICB1bmJveERvdWJsZSh2YWx1ZSksIG1fb3V0LmNvbnN0RG91YmxlKDApKTsKKyAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihkb3VibGVJc1RydXRoeSkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3REb3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAg
ICAgICAgTFZhbHVlIG1pc2NJc1RydXRoeSA9IG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAg
IHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobWlzY0lzVHJ1dGh5
KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCByZXN1bHRzKTsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgZW51bSBTdHJpbmdPck9iamVjdE1vZGUgeworICAgICAgICBBbGxD
ZWxsc0FyZUZhbHNlLAorICAgICAgICBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3QKKyAgICB9Owor
ICAgIGVudW0gRXF1YWxOdWxsT3JVbmRlZmluZWRNb2RlIHsKKyAgICAgICAgRXF1YWxOdWxsLAor
ICAgICAgICBFcXVhbFVuZGVmaW5lZCwKKyAgICAgICAgRXF1YWxOdWxsT3JVbmRlZmluZWQsCisg
ICAgICAgIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZAorICAgIH07CisgICAgTFZhbHVlIGVxdWFs
TnVsbE9yVW5kZWZpbmVkKAorICAgICAgICBFZGdlIGVkZ2UsIFN0cmluZ09yT2JqZWN0TW9kZSBj
ZWxsTW9kZSwgRXF1YWxOdWxsT3JVbmRlZmluZWRNb2RlIHByaW1pdGl2ZU1vZGUsCisgICAgICAg
IE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgb3BlcmFuZE1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3Bl
Y3VsYXRpb24pCisgICAgeworICAgICAgICBib29sIHZhbGlkV2F0Y2hwb2ludCA9IG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIG9wZXJhbmRNb2RlKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJF
cXVhbE51bGxPclVuZGVmaW5lZCBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHBy
aW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVk
IHByaW1pdGl2ZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIGNvbnRpbnVhdGlvbiIp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdENlbGwodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpLCB1bnN1cmUocHJpbWl0aXZlQ2FzZSksIHVuc3VyZShjZWxsQ2FzZSkpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgcHJpbWl0aXZlQ2FzZSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDM+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGNlbGxNb2Rl
KSB7CisgICAgICAgIGNhc2UgQWxsQ2VsbHNBcmVGYWxzZToKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENlbGxDYXNlU3BlY3VsYXRlc09iamVjdDoKKyAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsICh+
U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgaXNOb3RPYmplY3QodmFsdWUpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmFsaWRXYXRjaHBvaW50
KSB7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
bkZhbHNlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBtYXNxdWVyYWRlc0Nhc2UgPQorICAg
ICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQg
bWFzcXVlcmFkZXMgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RO
b25aZXJvMzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVl
LCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksCisgICAgICAgICAgICAgICAg
cmFyZWx5KG1hc3F1ZXJhZGVzQ2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hc3F1ZXJhZGVzQ2FzZSwgcHJpbWl0
aXZlQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBs
b2FkU3RydWN0dXJlKHZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0KSkpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocHJpbWl0aXZlQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgCisgICAgICAgIExWYWx1ZSBwcmltaXRpdmVSZXN1bHQ7CisgICAgICAgIHN3aXRjaCAocHJp
bWl0aXZlTW9kZSkgeworICAgICAgICBjYXNlIEVxdWFsTnVsbDoKKyAgICAgICAgICAgIHByaW1p
dGl2ZVJlc3VsdCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVs
bCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRXF1YWxVbmRlZmluZWQ6Cisg
ICAgICAgICAgICBwcmltaXRpdmVSZXN1bHQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRXF1YWxOdWxsT3JVbmRlZmluZWQ6CisgICAgICAgICAgICBwcmltaXRpdmVSZXN1bHQgPSBp
c090aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZDoKKyAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWND
ZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBwcmltaXRp
dmVSZXN1bHQgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihwcmltaXRpdmVSZXN1bHQp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIHJlc3VsdHMpOworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+CisgICAgdm9pZCBjb250aWd1b3Vz
UHV0QnlWYWxPdXRPZkJvdW5kcygKKyAgICAgICAgRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rp
b24sIExWYWx1ZSBiYXNlLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBMVmFsdWUgdmFs
dWUsCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbikKKyAgICB7CisgICAgICAgIExW
YWx1ZSBpc05vdEluQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAgICAgICAgaW5k
ZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1
YmxpY0xlbmd0aCkpOworICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5k
cygpKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RJbkJvdW5kc0Nhc2UgPQorICAgICAg
ICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgbm90IGluIGJvdW5kcyIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHBlcmZvcm1TdG9yZSA9CisgICAgICAgICAgICAg
ICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBwZXJmb3JtIHN0b3JlIikpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW5Cb3VuZHMsIHVu
c3VyZShub3RJbkJvdW5kc0Nhc2UpLCB1bnN1cmUocGVyZm9ybVN0b3JlKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vdEluQm91bmRzQ2FzZSwgcGVyZm9ybVN0b3JlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSBpc091dE9mQm91bmRzID0gbV9vdXQuYWJvdmVPckVxdWFsKAorICAgICAg
ICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBz
LkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsIGlzT3V0T2ZCb3VuZHMpOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3Vu
ZHNDYXNlID0KKyAgICAgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRC
eVZhbCBvdXQgb2YgYm91bmRzIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGhvbGVD
YXNlID0KKyAgICAgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZh
bCBob2xlIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChpc091dE9mQm91bmRzLCByYXJlbHkob3V0T2ZCb3VuZHNDYXNlKSwgdXN1YWxs
eShob2xlQ2FzZSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHNDYXNlLCBo
b2xlQ2FzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZtQ2FsbCgK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihzbG93
UGF0aEZ1bmN0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oaG9sZUNhc2UsIGlubmVyTGFzdE5leHQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zdG9yZTMyKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgIHN0
b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5qdW1wKHBlcmZvcm1TdG9yZSk7CisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhwZXJmb3JtU3RvcmUsIGxhc3ROZXh0KTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIGJ1aWxkU3dpdGNoKFN3aXRjaERhdGEqIGRhdGEsIExUeXBlIHR5cGUsIExW
YWx1ZSBzd2l0Y2hWYWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlID09IG1fb3V0Lmlu
dFB0ciB8fCB0eXBlID09IG1fb3V0LmludDMyKTsKKworICAgICAgICBWZWN0b3I8U3dpdGNoQ2Fz
ZT4gY2FzZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgU3dpdGNoQ2FzZSBuZXdDYXNlOworCisgICAgICAg
ICAgICBpZiAodHlwZSA9PSBtX291dC5pbnRQdHIpIHsKKyAgICAgICAgICAgICAgICBuZXdDYXNl
ID0gU3dpdGNoQ2FzZShtX291dC5jb25zdEludFB0cihkYXRhLT5jYXNlc1tpXS52YWx1ZS5zd2l0
Y2hMb29rdXBWYWx1ZShkYXRhLT5raW5kKSksCisgICAgICAgICAgICAgICAgICAgIGxvd0Jsb2Nr
KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJn
ZXQuY291bnQpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBtX291dC5pbnQzMikg
eworICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIo
ZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoZGF0YS0+a2luZCkpLAorICAg
ICAgICAgICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spLCBX
ZWlnaHQoZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmNvdW50KSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBDUkFTSCgpOworCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQobmV3
Q2FzZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0
aW9uKAorICAgICAgICAgICAgc3dpdGNoVmFsdWUsIGNhc2VzLAorICAgICAgICAgICAgbG93Qmxv
Y2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spLCBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291
bnQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzd2l0Y2hTdHJpbmcoU3dpdGNoRGF0YSogZGF0
YSwgTFZhbHVlIHN0cmluZykKKyAgICB7CisgICAgICAgIGJvb2wgY2FuRG9CaW5hcnlTd2l0Y2gg
PSB0cnVlOworICAgICAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IDA7CisgICAgICAgIAorICAg
ICAgICBmb3IgKERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgOiBkYXRhLT5jYXNlcykgeworICAgICAg
ICAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0gbXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKTsKKyAg
ICAgICAgICAgIGlmICghc3RyaW5nLT5pczhCaXQoKSkgeworICAgICAgICAgICAgICAgIGNhbkRv
QmluYXJ5U3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5ndGgoKSA+IE9wdGlvbnM6Om1heGltdW1C
aW5hcnlTdHJpbmdTd2l0Y2hDYXNlTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBjYW5Eb0Jp
bmFyeVN3aXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdG90YWxMZW5ndGggKz0gc3RyaW5nLT5sZW5ndGgoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKCFjYW5Eb0JpbmFyeVN3aXRjaCB8fCB0b3RhbExlbmd0
aCA+IE9wdGlvbnM6Om1heGltdW1CaW5hcnlTdHJpbmdTd2l0Y2hUb3RhbExlbmd0aCgpKSB7Cisg
ICAgICAgICAgICBzd2l0Y2hTdHJpbmdTbG93KGRhdGEsIHN0cmluZyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0g
bV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBM
VmFsdWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5n
dGgpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaGFzSW1wbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIGhhcyBpbXBsIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoU3RyaW5nIGlzIDggYml0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBz
bG93IGNhc2UiKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxs
KHN0cmluZ0ltcGwpLCB1bnN1cmUoc2xvd0Jsb2NrKSwgdW5zdXJlKGhhc0ltcGxCbG9jaykpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyho
YXNJbXBsQmxvY2ssIGlzOEJpdEJsb2NrKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkp
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93QmxvY2spLCB1bnN1cmUoaXM4Qml0QmxvY2spKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdEJsb2NrLCBzbG93QmxvY2sp
OworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoc3RyaW5n
SW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2RhdGEpOworICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwcm9wYWdhdGUgYnJhbmNoIHdlaWdodCBkYXRhIHRvIHRoZSBjYXNlcyBv
ZiB0aGlzIHN3aXRjaC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NDM2OAorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN0cmluZ1N3aXRjaENh
c2U+IGNhc2VzOworICAgICAgICBmb3IgKERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgOiBkYXRhLT5j
YXNlcykKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTdHJpbmdTd2l0Y2hDYXNlKG15Q2FzZS52
YWx1ZS5zdHJpbmdJbXBsKCksIGxvd0Jsb2NrKG15Q2FzZS50YXJnZXQuYmxvY2spKSk7CisgICAg
ICAgIHN0ZDo6c29ydChjYXNlcy5iZWdpbigpLCBjYXNlcy5lbmQoKSk7CisgICAgICAgIHN3aXRj
aFN0cmluZ1JlY3Vyc2UoZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCAwLCAwLCBjYXNlcy5z
aXplKCksIDAsIGZhbHNlKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93QmxvY2ssIGxh
c3ROZXh0KTsKKyAgICAgICAgc3dpdGNoU3RyaW5nU2xvdyhkYXRhLCBzdHJpbmcpOworICAgIH0K
KyAgICAKKyAgICAvLyBUaGUgY29kZSBmb3Igc3RyaW5nIHN3aXRjaGluZyBpcyBiYXNlZCBjbG9z
ZWx5IG9uIHRoZSBzYW1lIGNvZGUgaW4gdGhlIERGRyBiYWNrZW5kLiBXaGlsZSBpdAorICAgIC8v
IHdvdWxkIGJlIG5pY2UgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygc2ltaWxhci1sb29raW5nIGNv
ZGUsIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyBvbmUgb2YKKyAgICAvLyB0aG9zZSBhbGdvcml0aG1z
IHdoZXJlIGZhY3RvcmluZyBvdXQgdGhlIGNvbW1vbiBiaXRzIHdvdWxkIHJlc3VsdCBpbiBtb3Jl
IGNvZGUgdGhhbiBqdXN0CisgICAgLy8gZHVwbGljYXRpbmcuCisgICAgCisgICAgc3RydWN0IFN0
cmluZ1N3aXRjaENhc2UgeworICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKCkgeyB9CisgICAgICAg
IAorICAgICAgICBTdHJpbmdTd2l0Y2hDYXNlKFN0cmluZ0ltcGwqIHN0cmluZywgTEJhc2ljQmxv
Y2sgdGFyZ2V0KQorICAgICAgICAgICAgOiBzdHJpbmcoc3RyaW5nKQorICAgICAgICAgICAgLCB0
YXJnZXQodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yPChjb25zdCBTdHJpbmdTd2l0Y2hDYXNlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHN0cmluZ0xlc3NUaGFuKCpzdHJpbmcsICpvdGhlci5zdHJpbmcpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmc7CisgICAgICAg
IExCYXNpY0Jsb2NrIHRhcmdldDsKKyAgICB9OworICAgIAorICAgIHN0cnVjdCBDaGFyYWN0ZXJD
YXNlIHsKKyAgICAgICAgQ2hhcmFjdGVyQ2FzZSgpCisgICAgICAgICAgICA6IGNoYXJhY3Rlcigw
KQorICAgICAgICAgICAgLCBiZWdpbigwKQorICAgICAgICAgICAgLCBlbmQoMCkKKyAgICAgICAg
eworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDaGFyYWN0ZXJDYXNlKExDaGFyIGNoYXJh
Y3RlciwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCkKKyAgICAgICAgICAgIDogY2hhcmFj
dGVyKGNoYXJhY3RlcikKKyAgICAgICAgICAgICwgYmVnaW4oYmVnaW4pCisgICAgICAgICAgICAs
IGVuZChlbmQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBv
cGVyYXRvcjwoY29uc3QgQ2hhcmFjdGVyQ2FzZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIgPCBvdGhlci5jaGFyYWN0ZXI7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIExDaGFyIGNoYXJhY3RlcjsKKyAgICAgICAgdW5zaWduZWQgYmVn
aW47CisgICAgICAgIHVuc2lnbmVkIGVuZDsKKyAgICB9OworICAgIAorICAgIHZvaWQgc3dpdGNo
U3RyaW5nUmVjdXJzZSgKKyAgICAgICAgU3dpdGNoRGF0YSogZGF0YSwgTFZhbHVlIGJ1ZmZlciwg
TFZhbHVlIGxlbmd0aCwgY29uc3QgVmVjdG9yPFN0cmluZ1N3aXRjaENhc2U+JiBjYXNlcywKKyAg
ICAgICAgdW5zaWduZWQgbnVtQ2hlY2tlZCwgdW5zaWduZWQgYmVnaW4sIHVuc2lnbmVkIGVuZCwg
dW5zaWduZWQgYWxyZWFkeUNoZWNrZWRMZW5ndGgsCisgICAgICAgIHVuc2lnbmVkIGNoZWNrZWRF
eGFjdExlbmd0aCkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhbGxUaHJvdWdoID0gbG93
QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spOworICAgICAgICAKKyAgICAgICAgaWYgKGJl
Z2luID09IGVuZCkgeworICAgICAgICAgICAgbV9vdXQuanVtcChmYWxsVGhyb3VnaCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIG1p
bkxlbmd0aCA9IGNhc2VzW2JlZ2luXS5zdHJpbmctPmxlbmd0aCgpOworICAgICAgICB1bnNpZ25l
ZCBjb21tb25DaGFycyA9IG1pbkxlbmd0aDsKKyAgICAgICAgYm9vbCBhbGxMZW5ndGhzRXF1YWwg
PSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsr
aSkgeworICAgICAgICAgICAgdW5zaWduZWQgbXlDb21tb25DaGFycyA9IG51bUNoZWNrZWQ7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IHN0ZDo6bWluKGNhc2VzW2JlZ2luXS5zdHJpbmct
Pmxlbmd0aCgpLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IG51bUNoZWNrZWQ7IGogPCBsaW1pdDsgKytqKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGopICE9IGNhc2VzW2ldLnN0cmluZy0+YXQo
aikpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG15Q29tbW9u
Q2hhcnMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbW1vbkNoYXJzID0gc3RkOjpt
aW4oY29tbW9uQ2hhcnMsIG15Q29tbW9uQ2hhcnMpOworICAgICAgICAgICAgaWYgKG1pbkxlbmd0
aCAhPSBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGFsbExlbmd0
aHNFcXVhbCA9IGZhbHNlOworICAgICAgICAgICAgbWluTGVuZ3RoID0gc3RkOjptaW4obWluTGVu
Z3RoLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGNoZWNrZWRFeGFjdExlbmd0aCkgeworICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBtX25vZGUsIGFscmVhZHlDaGVja2VkTGVuZ3RoID09IG1pbkxlbmd0aCk7CisgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxsTGVuZ3Roc0VxdWFsKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1p
bkxlbmd0aCA+PSBjb21tb25DaGFycyk7CisgICAgICAgIAorICAgICAgICBpZiAoIWFsbExlbmd0
aHNFcXVhbCAmJiBhbHJlYWR5Q2hlY2tlZExlbmd0aCA8IG1pbkxlbmd0aCkKKyAgICAgICAgICAg
IG1fb3V0LmNoZWNrKG1fb3V0LmJlbG93KGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihtaW5MZW5n
dGgpKSwgdW5zdXJlKGZhbGxUaHJvdWdoKSk7CisgICAgICAgIGlmIChhbGxMZW5ndGhzRXF1YWwg
JiYgKGFscmVhZHlDaGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoIHx8ICFjaGVja2VkRXhhY3RMZW5n
dGgpKQorICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRocm91Z2gpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUNoZWNrZWQ7IGkgPCBjb21tb25DaGFyczsg
KytpKSB7CisgICAgICAgICAgICBtX291dC5jaGVjaygKKyAgICAgICAgICAgICAgICBtX291dC5u
b3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoYnVmZmVy
LCBtX2hlYXBzLmNoYXJhY3RlcnM4W2ldKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihzdGF0aWNfY2FzdDx1aW50MTZfdD4oY2FzZXNbYmVnaW5dLnN0cmluZy0+YXQoaSkp
KSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGZhbGxUaHJvdWdoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChtaW5MZW5ndGggPT0gY29tbW9uQ2hhcnMpIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgb25lIG9mIHRoZSBjYXNlcyBpcyBhIHByZWZp
eCBvZiBhbGwgb2YgdGhlIG90aGVyIGNhc2VzLgorICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBjaGVja2VkIHRoYXQgdGhlIGlucHV0IHN0cmluZyBpcyBhIHByZWZpeCBvZiBhbGwgb2YgdGhl
IGNhc2VzLAorICAgICAgICAgICAgLy8gc28gd2UganVzdCBjaGVjayBsZW5ndGggdG8ganVtcCB0
byB0aGF0IGNhc2UuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBjYXNlc1tiZWdpbl0uc3RyaW5nLT5sZW5ndGgoKSA9PSBjb21tb25DaGFycyk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsraSkK
KyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgY2FzZXNbaV0uc3Ry
aW5nLT5sZW5ndGgoKSA+IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGFsbExlbmd0aHNFcXVhbCkgeworICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBlbmQgPT0gYmVnaW4gKyAxKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1w
KGNhc2VzW2JlZ2luXS50YXJnZXQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuY2hlY2soCisgICAgICAgICAg
ICAgICAgbV9vdXQuZXF1YWwobGVuZ3RoLCBtX291dC5jb25zdEludDMyKGNvbW1vbkNoYXJzKSks
CisgICAgICAgICAgICAgICAgdW5zdXJlKGNhc2VzW2JlZ2luXS50YXJnZXQpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gV2UndmUgY2hlY2tlZCBpZiB0aGUgbGVuZ3RoIGlzID49IG1p
bkxlbmd0aCwgYW5kIHRoZW4gd2UgY2hlY2tlZCBpZiB0aGUgbGVuZ3RoIGlzCisgICAgICAgICAg
ICAvLyA9PSBjb21tb25DaGFycy4gV2UgZ2V0IHRvIHRoaXMgcG9pbnQgaWYgaXQgaXMgPj0gbWlu
TGVuZ3RoIGJ1dCBub3QgPT0gY29tbW9uQ2hhcnMuCisgICAgICAgICAgICAvLyBIZW5jZSB3ZSBr
bm93IHRoYXQgaXQgbm93IG11c3QgYmUgPiBtaW5MZW5ndGgsIGkuZS4gdGhhdCBpdCdzID49IG1p
bkxlbmd0aCArIDEuCisgICAgICAgICAgICBzd2l0Y2hTdHJpbmdSZWN1cnNlKAorICAgICAgICAg
ICAgICAgIGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgY29tbW9uQ2hhcnMsIGJlZ2luICsg
MSwgZW5kLCBtaW5MZW5ndGggKyAxLCBmYWxzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHRo
ZSBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gY29tbW9uQ2hhcnMsIGFuZCB3ZSd2ZSBvbmx5IHZlcmlm
aWVkCisgICAgICAgIC8vIGNvbW1vbkNoYXJzLiBVc2UgYSBiaW5hcnkgc3dpdGNoIG9uIHRoZSBu
ZXh0IHVuY2hlY2tlZCBjaGFyYWN0ZXIsIGkuZS4KKyAgICAgICAgLy8gc3RyaW5nW2NvbW1vbkNo
YXJzXS4KKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlbmQg
Pj0gYmVnaW4gKyAyKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB1bmNoZWNrZWRDaGFyID0g
bV9vdXQubG9hZDhaZXJvRXh0MzIoYnVmZmVyLCBtX2hlYXBzLmNoYXJhY3RlcnM4W2NvbW1vbkNo
YXJzXSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8Q2hhcmFjdGVyQ2FzZT4gY2hhcmFjdGVy
Q2FzZXM7CisgICAgICAgIENoYXJhY3RlckNhc2UgY3VycmVudENhc2UoY2FzZXNbYmVnaW5dLnN0
cmluZy0+YXQoY29tbW9uQ2hhcnMpLCBiZWdpbiwgYmVnaW4gKyAxKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kpIHsKKyAgICAgICAgICAgIExDaGFy
IGN1cnJlbnRDaGFyID0gY2FzZXNbaV0uc3RyaW5nLT5hdChjb21tb25DaGFycyk7CisgICAgICAg
ICAgICBpZiAoY3VycmVudENoYXIgIT0gY3VycmVudENhc2UuY2hhcmFjdGVyKSB7CisgICAgICAg
ICAgICAgICAgY3VycmVudENhc2UuZW5kID0gaTsKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJD
YXNlcy5hcHBlbmQoY3VycmVudENhc2UpOworICAgICAgICAgICAgICAgIGN1cnJlbnRDYXNlID0g
Q2hhcmFjdGVyQ2FzZShjdXJyZW50Q2hhciwgaSwgaSArIDEpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgY3VycmVudENhc2UuZW5kID0gaSArIDE7CisgICAgICAgIH0KKyAg
ICAgICAgY2hhcmFjdGVyQ2FzZXMuYXBwZW5kKGN1cnJlbnRDYXNlKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxMQmFzaWNCbG9jaz4gY2hhcmFjdGVyQmxvY2tzOworICAgICAgICBmb3IgKENo
YXJhY3RlckNhc2UmIG15Q2FzZSA6IGNoYXJhY3RlckNhc2VzKQorICAgICAgICAgICAgY2hhcmFj
dGVyQmxvY2tzLmFwcGVuZChGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJp
bmcgY2FzZSBmb3IgIiwgbXlDYXNlLmNoYXJhY3RlciwgIiBhdCBpbmRleCAiLCBjb21tb25DaGFy
cykpKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBzd2l0Y2hDYXNlczsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlckNhc2VzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgY2hhcmFjdGVyQ2FzZXNbaSAtIDFdLmNoYXJhY3RlciA8IGNoYXJhY3Rl
ckNhc2VzW2ldLmNoYXJhY3Rlcik7CisgICAgICAgICAgICBzd2l0Y2hDYXNlcy5hcHBlbmQoU3dp
dGNoQ2FzZSgKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNoYXJhY3RlckNhc2Vz
W2ldLmNoYXJhY3RlciksIGNoYXJhY3RlckJsb2Nrc1tpXSwgV2VpZ2h0KCkpKTsKKyAgICAgICAg
fQorICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbih1bmNoZWNrZWRDaGFyLCBzd2l0Y2hD
YXNlcywgZmFsbFRocm91Z2gsIFdlaWdodCgpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIGNoYXJhY3RlckJsb2Nr
cy5hcHBlbmQobGFzdE5leHQpOyAvLyBNYWtlcyBpdCBjb252ZW5pZW50IHRvIHNldCBuZXh0Qmxv
Y2suCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJDYXNlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hhcmFjdGVyQmxvY2tzW2ld
LCBjaGFyYWN0ZXJCbG9ja3NbaSArIDFdKTsKKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1JlY3Vy
c2UoCisgICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCBjb21tb25D
aGFycyArIDEsCisgICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2FzZXNbaV0uYmVnaW4sIGNoYXJh
Y3RlckNhc2VzW2ldLmVuZCwgbWluTGVuZ3RoLCBhbGxMZW5ndGhzRXF1YWwpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vdXQubV9u
ZXh0QmxvY2sgPT0gbGFzdE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN3aXRjaFN0cmlu
Z1Nsb3coU3dpdGNoRGF0YSogZGF0YSwgTFZhbHVlIHN0cmluZykKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBXZSBvdWdodCB0byBiZSBhYmxlIHRvIHVzZSBjb21wdXRlZCBnb3RvcyBoZXJlLiBX
ZSB3b3VsZCBzYXZlIHRoZSBsYWJlbHMgb2YgdGhlCisgICAgICAgIC8vIGJsb2NrcyB3ZSB3YW50
IHRvIGp1bXAgdG8sIGFuZCB0aGVuIHJlcXVlc3QgdGhlaXIgYWRkcmVzc2VzIGFmdGVyIGNvbXBp
bGF0aW9uIGNvbXBsZXRlcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NDM2OQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJyYW5jaE9mZnNl
dCA9IHZtQ2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0QnJhbmNoT2Zmc2V0KSwKKyAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KSwgc3RyaW5n
KTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZ0p1bXBUYWJsZSYgdGFibGUgPSBjb2RlQmxvY2so
KS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAg
ICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IGNhc2VzOworICAgICAgICBzdGQ6OnVub3Jk
ZXJlZF9zZXQ8aW50MzJfdD4gYWxyZWFkeUhhbmRsZWQ7IC8vIFRoZXNlIG1heSBiZSBuZWdhdGl2
ZSwgb3IgemVybywgb3IgcHJvYmFibHkgb3RoZXIgc3R1ZmYsIHRvby4gV2UgZG9uJ3Qgd2FudCB0
byBtZXNzIHdpdGggSGFzaFNldCdzIGNvcm5lciBjYXNlcyBhbmQgd2UgZG9uJ3QgcmVhbGx5IGNh
cmUgYWJvdXQgdGhyb3VnaHB1dCBoZXJlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUg
ZmFjdCB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBieXRlY29kZSdzIHN3aXRjaCB0YWJsZSBtZWFucyB0
aGF0IHRoZQorICAgICAgICAgICAgLy8gZm9sbG93aW5nIERGRyBJUiB0cmFuc2Zvcm1hdGlvbiB3
b3VsZCBiZSBpbnZhbGlkLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE9yaWdpbmFs
IGNvZGU6CisgICAgICAgICAgICAvLyAgICAgc3dpdGNoICh2KSB7CisgICAgICAgICAgICAvLyAg
ICAgY2FzZSAiZm9vIjoKKyAgICAgICAgICAgIC8vICAgICBjYXNlICJiYXIiOgorICAgICAgICAg
ICAgLy8gICAgICAgICB0aGluZ3MoKTsKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAvLyAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAvLyAgICAgfQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIE5l
dyBjb2RlOgorICAgICAgICAgICAgLy8gICAgIHN3aXRjaCAodikgeworICAgICAgICAgICAgLy8g
ICAgIGNhc2UgImZvbyI6CisgICAgICAgICAgICAvLyAgICAgICAgIGluc3RydW1lbnRGb28oKTsK
KyAgICAgICAgICAgIC8vICAgICAgICAgZ290byBfdGhpbmdzOworICAgICAgICAgICAgLy8gICAg
IGNhc2UgImJhciI6CisgICAgICAgICAgICAvLyAgICAgICAgIGluc3RydW1lbnRCYXIoKTsKKyAg
ICAgICAgICAgIC8vICAgICBfdGhpbmdzOgorICAgICAgICAgICAgLy8gICAgICAgICB0aGluZ3Mo
KTsKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvLyAgICAg
fQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEx1Y2tpbHksIHdlIGRvbid0IGN1cnJl
bnRseSBkbyBhbnkgc3VjaCB0cmFuc2Zvcm1hdGlvbi4gQnV0IGl0J3Mga2luZCBvZiBzaWxseSB0
aGF0CisgICAgICAgICAgICAvLyB0aGlzIGlzIGFuIGlzc3VlLgorICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDYzNQorICAgICAgICAgICAg
CisgICAgICAgICAgICBERkc6OlN3aXRjaENhc2UgbXlDYXNlID0gZGF0YS0+Y2FzZXNbaV07Cisg
ICAgICAgICAgICBTdHJpbmdKdW1wVGFibGU6OlN0cmluZ09mZnNldFRhYmxlOjppdGVyYXRvciBp
dGVyID0KKyAgICAgICAgICAgICAgICB0YWJsZS5vZmZzZXRUYWJsZS5maW5kKG15Q2FzZS52YWx1
ZS5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IGl0ZXIgIT0gdGFibGUub2Zmc2V0VGFibGUuZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAoIWFscmVhZHlIYW5kbGVkLmluc2VydChpdGVyLT52YWx1ZS5icmFuY2hPZmZzZXQp
LnNlY29uZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZXMu
YXBwZW5kKFN3aXRjaENhc2UoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihpdGVy
LT52YWx1ZS5icmFuY2hPZmZzZXQpLAorICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG15Q2FzZS50
YXJnZXQuYmxvY2spLCBXZWlnaHQobXlDYXNlLnRhcmdldC5jb3VudCkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBi
cmFuY2hPZmZzZXQsIGNhc2VzLCBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayksCisg
ICAgICAgICAgICBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291bnQpKTsKKyAgICB9CisgICAg
CisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3IgYXQgdGhlIHBvaW50IG9mIGNvZGUgZ2VuZXJhdGlv
biB3aGVyZSB3ZSBrbm93IHdoYXQgdGhlIHJlc3VsdCB0eXBlIGlzLgorICAgIC8vIFlvdSBjYW4g
ZW1pdCB3aGF0ZXZlciBjb2RlIHlvdSBsaWtlIGF0IHRoYXQgcG9pbnQuIEV4cGVjdHMgeW91IHRv
IHRlcm1pbmF0ZSB0aGUgYmFzaWMgYmxvY2suCisgICAgLy8gV2hlbiBidWlsZFR5cGVPZigpIHJl
dHVybnMsIGl0IHdpbGwgaGF2ZSB0ZXJtaW5hdGVkIGFsbCBiYXNpYyBibG9ja3MgdGhhdCBpdCBj
cmVhdGVkLiBTbywgaWYKKyAgICAvLyB5b3UgYXJlbid0IHVzaW5nIHRoaXMgYXMgdGhlIHRlcm1p
bmF0b3Igb2YgYSBoaWdoLWxldmVsIGJsb2NrLCB5b3Ugc2hvdWxkIGNyZWF0ZSB5b3VyIG93bgor
ICAgIC8vIGNvbnRpbmF0aW9uIGFuZCBzZXQgaXQgYXMgdGhlIG5leHRCbG9jayAobV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbikpIGJlZm9yZQorICAgIC8vIGNhbGxpbmcg
dGhpcy4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk15IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAvLyBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51
YXRpb24pOworICAgIC8vIGJ1aWxkVHlwZU9mKAorICAgIC8vICAgICBjaGlsZCwgdmFsdWUsCisg
ICAgLy8gICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7CisgICAgLy8gICAgICAgICAgZG8gdGhp
bmdzOworICAgIC8vICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAvLyAg
ICAgfSk7CisgICAgLy8gbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGJ1aWxkVHlwZU9mKEVkZ2Ug
Y2hpbGQsIExWYWx1ZSB2YWx1ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICAvLyBJbXBsZW1l
bnRzIHRoZSBmb2xsb3dpbmcgYnJhbmNoaW5nIHN0cnVjdHVyZToKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gaWYgKGlzIGNlbGwpIHsKKyAgICAgICAgLy8gICAgIGlmIChpcyBvYmplY3QpIHsKKyAg
ICAgICAgLy8gICAgICAgICBpZiAoaXMgZnVuY3Rpb24pIHsKKyAgICAgICAgLy8gICAgICAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAoZG9lc24n
dCBoYXZlIGNhbGwgdHJhcCBhbmQgZG9lc24ndCBtYXNxdWVyYWRlIGFzIHVuZGVmaW5lZCkgewor
ICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gb2JqZWN0CisgICAgICAgIC8vICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisgICAg
ICAgIC8vICAgICAgICAgfQorICAgICAgICAvLyAgICAgfSBlbHNlIGlmIChpcyBzdHJpbmcpIHsK
KyAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3RyaW5nCisgICAgICAgIC8vICAgICB9IGVsc2Ug
eworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzeW1ib2wKKyAgICAgICAgLy8gICAgIH0KKyAg
ICAgICAgLy8gfSBlbHNlIGlmIChpcyBudW1iZXIpIHsKKyAgICAgICAgLy8gICAgIHJldHVybiBu
dW1iZXIKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBudWxsKSB7CisgICAgICAgIC8vICAgICBy
ZXR1cm4gb2JqZWN0CisgICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgYm9vbGVhbikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIGJvb2xlYW4KKyAgICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgLy8g
ICAgIHJldHVybiB1bmRlZmluZWQKKyAgICAgICAgLy8gfQorICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygb2JqZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIGZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgZnVu
Y3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgcmVhbGx5T2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYnVpbGRUeXBlT2YgcmVhbGx5IG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc2xvdyBwYXRo
IikpOworICAgICAgICBMQmFzaWNCbG9jayB1bnJlYWNoYWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiYnVpbGRUeXBlT2YgdW5yZWFjaGFibGUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dE9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBvYmpl
Y3QgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyaW5nQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc3RyaW5nIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHN5bWJvbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN5bWJv
bCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbnVtYmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgbnVt
YmVyIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdE51bWJlckNhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBudW1iZXIgY2FzZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgbm90TnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlw
ZU9mIG5vdCBudWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvb2xlYW5DYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBib29sZWFuIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1
aWxkVHlwZU9mIHVuZGVmaW5lZCBjYXNlIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJh
bmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUoY2VsbENhc2UpLCB1
bnN1cmUobm90Q2VsbENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG9iamVjdENhc2UpOworICAgICAgICBtX291
dC5icmFuY2goaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKG9iamVj
dENhc2UpLCB1bnN1cmUobm90T2JqZWN0Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob2JqZWN0Q2FzZSwgZnVuY3Rpb25DYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiBTcGVj
T2JqZWN0KSwKKyAgICAgICAgICAgIHVuc3VyZShmdW5jdGlvbkNhc2UpLCB1bnN1cmUobm90RnVu
Y3Rpb25DYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhmdW5jdGlvbkNh
c2UsIG5vdEZ1bmN0aW9uQ2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6RnVuY3Rp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNlLCBy
ZWFsbHlPYmplY3RDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNF
eG90aWNGb3JUeXBlb2YodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgKFNwZWNPYmplY3QgLSBT
cGVjRnVuY3Rpb24pKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkocmVh
bGx5T2JqZWN0Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVhbGx5
T2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVj
dCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFi
bGUpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNU
eXBlb2ZUeXBlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgfSwgdmFsdWUpOworICAgICAgICBWZWN0b3I8U3dp
dGNoQ2FzZSwgMz4gY2FzZXM7CisgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0
LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKSks
IHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQu
Y29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpKSwgcmVh
bGx5T2JqZWN0Q2FzZSkpOworICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5j
b25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKSksIGZ1
bmN0aW9uQ2FzZSkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihtX291dC5jYXN0
VG9JbnQzMihyZXN1bHQpLCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKKyAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsKKyAg
ICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdE9iamVjdENhc2UsIHN0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY0NlbGwg
LSBTcGVjT2JqZWN0KSksCisgICAgICAgICAgICB1bnN1cmUoc3RyaW5nQ2FzZSksIHVuc3VyZShz
eW1ib2xDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNl
LCBzeW1ib2xDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTdHJpbmcpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3ltYm9sQ2FzZSwgbm90Q2VsbENhc2UpOwor
ICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN5bWJvbCk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgbnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIH5T
cGVjQ2VsbCksCisgICAgICAgICAgICB1bnN1cmUobnVtYmVyQ2FzZSksIHVuc3VyZShub3ROdW1i
ZXJDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhudW1iZXJDYXNlLCBu
b3ROdW1iZXJDYXNlKTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpOdW1iZXIpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90TnVtYmVyQ2FzZSwgbm90TnVsbENhc2Up
OworICAgICAgICBMVmFsdWUgaXNOdWxsOworICAgICAgICBpZiAocHJvdmVuVHlwZShjaGlsZCkg
JiBTcGVjT3RoZXIpCisgICAgICAgICAgICBpc051bGwgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXNO
dWxsID0gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBtX291dC5icmFuY2goaXNOdWxsLCB1
bnN1cmUocmVhbGx5T2JqZWN0Q2FzZSksIHVuc3VyZShub3ROdWxsQ2FzZSkpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90TnVsbENhc2UsIGJvb2xlYW5DYXNlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBl
KGNoaWxkKSAmIH4oU3BlY0NlbGwgfCBTcGVjRnVsbE51bWJlcikpLAorICAgICAgICAgICAgdW5z
dXJlKGJvb2xlYW5DYXNlKSwgdW5zdXJlKHVuZGVmaW5lZENhc2UpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAg
ZnVuY3RvcihUeXBlb2ZUeXBlOjpCb29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHVuZGVmaW5lZENhc2UsIGxhc3ROZXh0KTsKKyAgICAgICAgZnVuY3RvcihUeXBlb2ZU
eXBlOjpVbmRlZmluZWQpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZG91YmxlVG9JbnQzMihM
VmFsdWUgZG91YmxlVmFsdWUsIGRvdWJsZSBsb3csIGRvdWJsZSBoaWdoLCBib29sIGlzU2lnbmVk
ID0gdHJ1ZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGdyZWF0RW5vdWdoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIGdyZWF0RW5vdWdoIikpOworICAgICAgICBM
QmFzaWNCbG9jayB3aXRoaW5SYW5nZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9J
bnQzMiB3aXRoaW5SYW5nZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50MzIgc2xvd1BhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9J
bnQzMiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9t
QmxvY2ssIDI+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwoZG91YmxlVmFsdWUsIG1fb3V0
LmNvbnN0RG91YmxlKGxvdykpLAorICAgICAgICAgICAgdW5zdXJlKGdyZWF0RW5vdWdoKSwgdW5z
dXJlKHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGdyZWF0RW5vdWdoLCB3aXRoaW5SYW5nZSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChkb3VibGVW
YWx1ZSwgbV9vdXQuY29uc3REb3VibGUoaGlnaCkpLAorICAgICAgICAgICAgdW5zdXJlKHdpdGhp
blJhbmdlKSwgdW5zdXJlKHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyh3aXRoaW5SYW5nZSwgc2xvd1BhdGgpOworICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdDsK
KyAgICAgICAgaWYgKGlzU2lnbmVkKQorICAgICAgICAgICAgZmFzdFJlc3VsdCA9IG1fb3V0LmRv
dWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmFzdFJl
c3VsdCA9IG1fb3V0LmRvdWJsZVRvVUludChkb3VibGVWYWx1ZSk7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQu
Y2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKHRvSW50MzIpLCBkb3VibGVWYWx1ZSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUg
ZG91YmxlVG9JbnQzMihMVmFsdWUgZG91YmxlVmFsdWUpCisgICAgeworICAgICAgICBpZiAoT3V0
cHV0OjpoYXNTZW5zaWJsZURvdWJsZVRvSW50KCkpCisgICAgICAgICAgICByZXR1cm4gc2Vuc2li
bGVEb3VibGVUb0ludDMyKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBs
aW1pdCA9IHBvdygyLCAzMSkgLSAxOworICAgICAgICByZXR1cm4gZG91YmxlVG9JbnQzMihkb3Vi
bGVWYWx1ZSwgLWxpbWl0LCBsaW1pdCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzZW5zaWJs
ZURvdWJsZVRvSW50MzIoTFZhbHVlIGRvdWJsZVZhbHVlKQorICAgIHsKKyAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNlbnNpYmxlIGRvdWJsZVRv
SW50MzIgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoInNlbnNpYmxlIGRvdWJsZVRvSW50MzIgY29udGludWF0aW9u
IikpOworCisgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5kb3VibGVUb0lu
dChkb3VibGVWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291
dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQuZXF1YWwoZmFzdFJlc3VsdFZhbHVlLCBtX291dC5jb25zdEludDMyKDB4ODAw
MDAwMDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC5p
bnQzMiwgbV9vdXQub3BlcmF0aW9uKHRvSW50MzIpLCBkb3VibGVWYWx1ZSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291
dC5pbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyBhIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYSBjb2RlIGdlbmVyYXRvciB0aGF0IGZpbGxzIGlu
IGEgZ2FwIGluIHRoZSBjb2RlIHVzaW5nIG91cgorICAgIC8vIG93biBNYWNyb0Fzc2VtYmxlci4g
VGhpcyBpcyB1c2VmdWwgZm9yIHNsb3cgcGF0aHMgdGhhdCBpbnZvbHZlIGEgbG90IG9mIGNvZGUg
YW5kIHdlIGRvbid0IHdhbnQKKyAgICAvLyB0byBwYXkgdGhlIHByaWNlIG9mIExMVk0gb3B0aW1p
emluZyBpdC4gQSBsYXp5IHNsb3cgcGF0aCB3aWxsIG9ubHkgYmUgZ2VuZXJhdGVkIGlmIGl0IGFj
dHVhbGx5CisgICAgLy8gZXhlY3V0ZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBhIGxhenkgc2xvdyBw
YXRoIGFsd2F5cyBpbmN1cnMgdGhlIGNvc3Qgb2YgdHdvIGFkZGl0aW9uYWwganVtcHMuCisgICAg
Ly8gQWxzbywgdGhlIGxhenkgc2xvdyBwYXRoJ3MgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBp
cyBzbGF2ZWQgdG8gd2hhdGV2ZXIgTExWTSBkaWQsIHNvIHlvdQorICAgIC8vIGhhdmUgdG8gdXNl
IGEgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHRvIHRyeSB0byB1c2Ugc29tZSB1bnVzZWQgcmVn
aXN0ZXJzIGFuZCB5b3UgbWF5IGhhdmUKKyAgICAvLyB0byBzcGlsbCB0byB0b3Agb2Ygc3RhY2sg
aWYgdGhlcmUgYXJlbid0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlLgorICAgIC8vCisgICAg
Ly8gTGF6eSBzbG93IHBhdGhzIGludm9sdmUgdGhyZWUgZGlmZmVyZW50IHN0YWdlcyBvZiBleGVj
dXRpb24uIEVhY2ggc3RhZ2UgaGFzIHVuaXF1ZQorICAgIC8vIGNhcGFiaWxpdGllcyBhbmQga25v
d2xlZGdlLiBUaGUgc3RhZ2VzIGFyZToKKyAgICAvLworICAgIC8vIDEpIERGRy0+TExWTSBsb3dl
cmluZywgaS5lLiBjb2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0aGUg
bGFzdCB0aW1lIHlvdSB3aWxsCisgICAgLy8gICAgaGF2ZSBhY2Nlc3MgdG8gTFZhbHVlcy4gSWYg
dGhlcmUgaXMgYW4gTFZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgZmVkIGFzIGlucHV0IHRvIGEgbGF6
eSBzbG93CisgICAgLy8gICAgcGF0aCwgdGhlbiB5b3UgbXVzdCBwYXNzIGl0IGFzIGFuIGFyZ3Vt
ZW50IGhlcmUgKGFzIG9uZSBvZiB0aGUgdmFyYXJncyBhcmd1bWVudHMgYWZ0ZXIgdGhlCisgICAg
Ly8gICAgZnVuY3RvcikuIEJ1dCwgbG93ZXJpbmcgZG9lc24ndCBrbm93IHdoaWNoIHJlZ2lzdGVy
cyB3aWxsIGJlIHVzZWQgZm9yIHRob3NlIExWYWx1ZXMuIEhlbmNlCisgICAgLy8gICAgeW91IHBh
c3MgYSBsYW1iZGEgdG8gbGF6eVNsb3dQYXRoKCkgYW5kIHRoYXQgbGFtYmRhIHdpbGwgcnVuIGR1
cmluZyBzdGFnZSAoMik6CisgICAgLy8KKyAgICAvLyAyKSBGVExDb21waWxlLmNwcCdzIGZpeEZ1
bmN0aW9uQmFzZWRPblN0YWNrTWFwcy4gVGhpcyBjb2RlIGlzIHRoZSBvbmx5IHN0YWdlIGF0IHdo
aWNoIHdlIGtub3cKKyAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50cyBwYXNzZWQg
dG8gdGhpcyBtZXRob2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgTExWTQorICAgIC8v
ICAgIHNlbGVjdGVkIGZvciB0aG9zZSBhcmd1bWVudHMuIFlvdSBkb24ndCBhY3R1YWxseSB3YW50
IHRvIGdlbmVyYXRlIGFueSBjb2RlIGhlcmUsIHNpbmNlIHRoZW4KKyAgICAvLyAgICB0aGUgc2xv
dyBwYXRoIHdvdWxkbid0IGFjdHVhbGx5IGJlIGxhemlseSBnZW5lcmF0ZWQuIEluc3RlYWQsIHlv
dSB3YW50IHRvIHNhdmUgdGhlCisgICAgLy8gICAgcmVnaXN0ZXJzIGJlaW5nIHVzZWQgZm9yIHRo
ZSBhcmd1bWVudHMgYW5kIGRlZmVyIGNvZGUgZ2VuZXJhdGlvbiB0byBzdGFnZSAoMykgYnkgY3Jl
YXRpbmcKKyAgICAvLyAgICBhbmQgcmV0dXJuaW5nIGEgTGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I6
CisgICAgLy8KKyAgICAvLyAzKSBMYXp5U2xvd1BhdGgncyBnZW5lcmF0ZSgpIG1ldGhvZC4gVGhp
cyBjb2RlIHJ1bnMgaW4gcmVzcG9uc2UgdG8gdGhlIGxhenkgc2xvdyBwYXRoCisgICAgLy8gICAg
ZXhlY3V0aW5nIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgd2lsbCBjYWxsIHRoZSBnZW5lcmF0b3Ig
eW91IGNyZWF0ZWQgaW4gc3RhZ2UgKDIpLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGVhY2gg
dGltZSB5b3UgaW52b2tlIHN0YWdlICgxKSwgc3RhZ2UgKDIpIG1heSBiZSBpbnZva2VkIHplcm8s
IG9uZSwgb3IgbWFueSB0aW1lcy4KKyAgICAvLyBTdGFnZSAoMikgd2lsbCB1c3VhbGx5IGJlIGlu
dm9rZWQgb25jZSBmb3Igc3RhZ2UgKDEpLiBCdXQsIExMVk0gbWF5IGtpbGwgdGhlIGNvZGUsIGlu
IHdoaWNoCisgICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3QgcnVuLiBMTFZNIG1heSBkdXBsaWNh
dGUgdGhlIGNvZGUgKGZvciBleGFtcGxlIHZpYSBqdW1wIHRocmVhZGluZyksCisgICAgLy8gbGVh
ZGluZyB0byBtYW55IGNhbGxzIHRvIHlvdXIgc3RhZ2UgKDIpIGxhbWJkYS4gU3RhZ2UgKDMpIG1h
eSBiZSBjYWxsZWQgemVybyBvciBvbmNlIGZvciBlYWNoCisgICAgLy8gc3RhZ2UgKDIpLiBJdCB3
aWxsIGJlIGNhbGxlZCB6ZXJvIHRpbWVzIGlmIHRoZSBzbG93IHBhdGggbmV2ZXIgcnVucy4gVGhp
cyBpcyB3aGF0IHlvdSBob3BlIGZvcgorICAgIC8vIHdoZW5ldmVyIHlvdSB1c2UgdGhlIGxhenlT
bG93UGF0aCgpIG1lY2hhbmlzbS4KKyAgICAvLworICAgIC8vIEEgdHlwaWNhbCB1c2Ugb2YgbGF6
eVNsb3dQYXRoKCkgd2lsbCBsb29rIGxpa2UgdGhlIGV4YW1wbGUgYmVsb3csIHdoaWNoIGp1c3Qg
Y3JlYXRlcyBhIHNsb3cKKyAgICAvLyBwYXRoIHRoYXQgYWRkcyBzb21lIHZhbHVlIHRvIHRoZSBp
bnB1dCBhbmQgcmV0dXJucyBpdC4KKyAgICAvLworICAgIC8vIC8vIFN0YWdlICgxKSBpcyBoZXJl
LiBUaGlzIGlzIHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91dCB3aGljaCBMVmFsdWVzIHRv
IHVzZSBhcyBpbnB1dHMuCisgICAgLy8gLy8gTm90aWNlIGhvdyB3ZSBwYXNzICJpbnB1dCIgYXMg
YW4gYXJndW1lbnQgdG8gbGF6eVNsb3dQYXRoKCkuCisgICAgLy8gTFZhbHVlIGlucHV0ID0gLi4u
OworICAgIC8vIGludCBhZGRlbmQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlT
bG93UGF0aCgKKyAgICAvLyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAg
Ly8gU3RhZ2UgKDIpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0IGNoYW5jZSB0byBmaWd1cmUg
b3V0IHdoaWNoIHJlZ2lzdGVycyBhcmUgdXNlZAorICAgIC8vICAgICAgICAgLy8gZm9yIHdoaWNo
IHZhbHVlcy4gTG9jYXRpb24gemVybyBpcyBhbHdheXMgdGhlIHJldHVybiB2YWx1ZS4gWW91IGNh
biBpZ25vcmUgaXQgaWYKKyAgICAvLyAgICAgICAgIC8vIHlvdSBkb24ndCB3YW50IHRvIHJldHVy
biBhbnl0aGluZy4gTG9jYXRpb24gMSBpcyB0aGUgcmVnaXN0ZXIgZm9yIHRoZSBmaXJzdAorICAg
IC8vICAgICAgICAgLy8gYXJndW1lbnQgdG8gdGhlIGxhenlTbG93UGF0aCgpLCBpLmUuICJpbnB1
dCIuIE5vdGUgdGhhdCB0aGUgTG9jYXRpb24gb2JqZWN0IGNvdWxkCisgICAgLy8gICAgICAgICAv
LyBhbHNvIGhvbGQgYW4gRlBSLCBpZiB5b3UgYXJlIHBhc3NpbmcgYSBkb3VibGUuCisgICAgLy8g
ICAgICAgICBHUFJSZWcgb3V0cHV0R1BSID0gbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpOworICAg
IC8vICAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpOwor
ICAgIC8vICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAorICAg
IC8vICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2Vu
ZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgLy8gICAgICAgICAgICAgICAgIC8vIFN0YWdl
ICgzKSBpcyBoZXJlLiBUaGlzIGlzIHdoZW4geW91IGdlbmVyYXRlIGNvZGUuIFlvdSBoYXZlIGFj
Y2VzcyB0byB0aGUKKyAgICAvLyAgICAgICAgICAgICAgICAgLy8gcmVnaXN0ZXJzIHlvdSBjb2xs
ZWN0ZWQgaW4gc3RhZ2UgKDIpIGJlY2F1c2UgdGhpcyBsYW1iZGEgY2xvc2VzIG92ZXIgdGhvc2UK
KyAgICAvLyAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGVzIChvdXRwdXRHUFIgYW5kIGlucHV0
R1BSKS4gWW91IGFsc28gaGF2ZSBhY2Nlc3MgdG8gd2hhdGV2ZXIgZXh0cmEKKyAgICAvLyAgICAg
ICAgICAgICAgICAgLy8gZGF0YSB5b3UgY29sbGVjdGVkIGluIHN0YWdlICgxKSwgc3VjaCBhcyB0
aGUgYWRkZW5kIGluIHRoaXMgY2FzZS4KKyAgICAvLyAgICAgICAgICAgICAgICAgaml0LmFkZDMy
KFRydXN0ZWRJbW0zMihhZGRlbmQpLCBpbnB1dEdQUiwgb3V0cHV0R1BSKTsKKyAgICAvLyAgICAg
ICAgICAgICAgICAgLy8gWW91IGhhdmUgdG8gZW5kIGJ5IGp1bXBpbmcgdG8gZG9uZS4gVGhlcmUg
aXMgbm90aGluZyB0byBmYWxsIHRocm91Z2ggdG8uCisgICAgLy8gICAgICAgICAgICAgICAgIC8v
IFlvdSBjYW4gYWxzbyBqdW1wIHRvIHRoZSBleGNlcHRpb24gaGFuZGxlciAoc2VlIExhenlTbG93
UGF0aC5oIGZvciBtb3JlCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIGluZm8pLiBOb3RlIHRo
YXQgY3VycmVudGx5IHlvdSBjYW5ub3QgT1NSIGV4aXQuCisgICAgLy8gICAgICAgICAgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworICAgIC8vICAgICAgICAgICAg
IH0pOworICAgIC8vICAgICB9LAorICAgIC8vICAgICBpbnB1dCk7CisgICAgLy8KKyAgICAvLyBZ
b3UgY2FuIGJhc2ljYWxseSBwYXNzIGFzIG1hbnkgaW5wdXRzIGFzIHlvdSBsaWtlLCBlaXRoZXIg
dXNpbmcgdGhpcyB2YXJhcmdzIGZvcm0sIG9yIGJ5CisgICAgLy8gcGFzc2luZyBhIFZlY3RvciBv
ZiBMVmFsdWVzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHlvdXIgc2xvdyBwYXRoIGlz
IG9ubHkgZG9pbmcgYSBjYWxsLCB5b3UgY2FuIHVzZSB0aGUgY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoKQorICAgIC8vIGhlbHBlci4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMVmFsdWUg
aW5wdXQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlTbG93UGF0aCgKKyAgICAv
LyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgIC8vICAgICAgICAgICAgIG9wZXJhdGlvbkRvVGhpbmdzLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAg
Ly8gICAgIH0sIGlucHV0KTsKKyAgICAvLworICAgIC8vIEZpbmFsbHksIG5vdGUgdGhhdCBhbGwg
b2YgdGhlIGxhbWJkYXMgLSBib3RoIHRoZSBzdGFnZSAoMikgbGFtYmRhIGFuZCB0aGUgc3RhZ2Ug
KDMpIGxhbWJkYSAtCisgICAgLy8gcnVuIGFmdGVyIHRoZSBmdW5jdGlvbiB0aGF0IGNyZWF0ZWQg
dGhlbSByZXR1cm5zLiBIZW5jZSwgeW91IHNob3VsZCBub3QgdXNlIGJ5LXJlZmVyZW5jZQorICAg
IC8vIGNhcHR1cmUgKGkuZS4gWyZdKSBpbiBhbnkgb2YgdGhlc2UgbGFtYmRhcy4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorICAgIExW
YWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1bmN0b3Is
IFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgQ29kZU9yaWdpbiBvcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAg
ICAgCisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9vdXQucGF0Y2hwb2ludChC
Mzo6SW50NjQpOworICAgICAgICBmb3IgKExWYWx1ZSBhcmcgOiB1c2VyQXJndW1lbnRzKQorICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShhcmcsIEIzOjpWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyKSk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMocmVzdWx0KTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdC0+Y2xvYmJlcihS
ZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAgICAgICBTdGF0ZSogc3Rh
dGUgPSAmbV9mdGxTdGF0ZTsKKworICAgICAgICByZXN1bHQtPnNldEdlbmVyYXRvcigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlv
bnM7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBCMzo6VmFsdWVSZXAmIHJlcCA6IHBhcmFt
cykKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yVmFs
dWVSZXAocmVwKSk7CisKKyAgICAgICAgICAgICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IGdlbmVyYXRvciA9IGZ1bmN0b3IobG9jYXRpb25zKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAgcGF0Y2hhYmxlSnVt
cCA9IGppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCk7CisKKyAgICAgICAg
ICAgICAgICBSZWZQdHI8RXhjZXB0aW9uVGFyZ2V0PiBleGNlcHRpb25UYXJnZXQgPQorICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFt
cyk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQXMgcGFydCBvZiBoYW5kbGluZyBleGNl
cHRpb25zLCB3ZSBuZWVkIHRvIGNyZWF0ZSBhIGNvbmNyZXRlIE9TUkV4aXQgaGVyZS4KKyAgICAg
ICAgICAgICAgICAvLyBEb2luZyBzbyBzaG91bGQgYXV0b21hZ2ljYWxseSByZWdpc3RlciBsYXRl
IHBhdGhzIHRoYXQgZW1pdCBleGl0IHRodW5rcy4KKworICAgICAgICAgICAgICAgIHBhcmFtcy5h
ZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2hhYmxlSnVt
cC5tX2p1bXAubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gc3RhdGUtPmppdENvZGUtPmxhenlTbG93UGF0aHMuc2l6ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKG51bGxwdHIp
OworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnB1c2hUb1NhdmVJbW1lZGlhdGVXaXRob3V0
VG91Y2hpbmdSZWdpc3RlcnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoaW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0b3JKdW1wID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNvIGxvbmcgYXMgd2UncmUgaGVyZSwgd2UgZG9uJ3Qg
cmVhbGx5IGtub3cgaWYgb3VyIGxhdGUgcGF0aAorICAgICAgICAgICAgICAgICAgICAgICAgLy8g
cnVucyBiZWZvcmUgb3IgYWZ0ZXIgYW55IG90aGVyIGxhdGUgcGF0aHMgdGhhdCB3ZSBtaWdodCBk
ZXBlbmQgb24sIGxpa2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBleGNlcHRpb24g
dGh1bmsuCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2Rl
ID0gc3RhdGUtPmppdENvZGU7CisgICAgICAgICAgICAgICAgICAgICAgICBWTSogdm0gPSAmc3Rh
dGUtPmdyYXBoLm1fdm07CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9ySnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm0t
PmdldENUSVN0dWIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25KdW1wIGxpbmtlZFBhdGNoYWJsZUp1bXAgPSBDb2RlTG9jYXRpb25KdW1w
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlv
bk9mKHBhdGNoYWJsZUp1bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGlua2VkRG9uZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihkb25lKTsK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
SW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+Y29t
bW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgob3JpZ2luKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xvd1BhdGggPQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1BhdGg+KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlZFBhdGNoYWJsZUp1bXAsIGxp
bmtlZERvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uVGFyZ2V0LT5sYWJlbChsaW5rQnVmZmVyKSwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsU2l0ZUluZGV4LCBnZW5lcmF0b3IpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGppdENvZGUtPmxhenlTbG93UGF0aHNbaW5kZXhdID0gV1RGTW92ZShsYXp5
U2xvd1BhdGgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZSgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRp
b24pCisgICAgeworICAgICAgICBhcHBlbmRPU1JFeGl0KGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIGZhaWxDb25kaXRpb24sIG1fb3JpZ2luKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXJt
aW5hdGUoRXhpdEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZShraW5kLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgZGlkQWxyZWFkeVRl
cm1pbmF0ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGRpZEFscmVhZHlUZXJtaW5hdGUoKQor
ICAgIHsKKyAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCB0eXBlQ2hlY2soCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdl
IGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBM
VmFsdWUgZmFpbENvbmRpdGlvbiwgRXhpdEtpbmQgZXhpdEtpbmQgPSBCYWRUeXBlKQorICAgIHsK
KyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgZXhpdEtpbmQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uLCBFeGl0S2luZCBleGl0S2luZCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhy
b3VnaCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNo
ZWNrKGhpZ2hWYWx1ZS51c2VLaW5kKCkpKTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdChleGl0S2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24sIG1fb3JpZ2luKTsK
KyAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5k
U3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBLbm93bkludDMyVXNlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3Rh
bnQoKSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXJt
aW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlpl
cm87CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMih2
YWx1ZS5hc0ludDMyKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAg
ICAgICAgCisgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gc3Ry
aWN0SW50NTJUb0ludDMyKGVkZ2UsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2ludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRnZSwg
aW50NTJUb1N0cmljdEludDUyKHZhbHVlLnZhbHVlKCkpKTsKKyAgICAgICAgCisgICAgICAgIHZh
bHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIGJveGVkUmVzdWx0ID0gdmFsdWUudmFs
dWUoKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFs
dWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJbnQzMiwgaXNOb3RJbnQzMihib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1
bHQpOworICAgICAgICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNJbnQzMikpOworICAgICAgICB0
ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwor
ICAgIH0KKyAgICAKKyAgICBlbnVtIEludDUyS2luZCB7IFN0cmljdEludDUyLCBJbnQ1MiB9Owor
ICAgIExWYWx1ZSBsb3dJbnQ1MihFZGdlIGVkZ2UsIEludDUyS2luZCBraW5kKQorICAgIHsKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVkZ2UudXNlS2luZCgpID09IEludDUy
UmVwVXNlKTsKKyAgICAgICAgCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWU7CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyaWN0SW50NTJUb0ludDUyKHZhbHVlLnZhbHVlKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1
MjoKKyAgICAgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1f
aW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50NTJUb1N0cmljdEludDUyKHZhbHVlLnZh
bHVlKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXByb3ZlblR5cGUoZWRnZSkpOworICAgICAgICB0ZXJtaW5h
dGUoVW5jb3VudGFibGUpOworICAgICAgICByZXR1cm4gbV9vdXQuaW50NjRaZXJvOworICAgIH0K
KyAgICAKKyAgICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIEludDUyKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0
cmljdEludDUyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBsb3dJbnQ1MihlZGdl
LCBTdHJpY3RJbnQ1Mik7CisgICAgfQorICAgIAorICAgIGJvb2wgYmV0dGVyVXNlU3RyaWN0SW50
NTIoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNWYWxpZChtX2ludDUyVmFs
dWVzLmdldChub2RlKSk7CisgICAgfQorICAgIGJvb2wgYmV0dGVyVXNlU3RyaWN0SW50NTIoRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmljdEludDUyKGVkZ2Uu
bm9kZSgpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBJbnQ1MktpbmQg
YmVzdEludDUyS2luZChUIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYmV0dGVyVXNlU3Ry
aWN0SW50NTIobm9kZSkgPyBTdHJpY3RJbnQ1MiA6IEludDUyOworICAgIH0KKyAgICBJbnQ1Mktp
bmQgb3Bwb3NpdGUoSW50NTJLaW5kIGtpbmQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpY3RJbnQ1MjsK
KyAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MjoKKyAgICAgICAgICAgIHJldHVybiBJbnQ1MjsKKyAg
ICAgICAgfQorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgIHJldHVybiBJbnQ1MjsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1do
aWNoZXZlckludDUyKEVkZ2UgZWRnZSwgSW50NTJLaW5kJiBraW5kKQorICAgIHsKKyAgICAgICAg
a2luZCA9IGJlc3RJbnQ1MktpbmQoZWRnZSk7CisgICAgICAgIHJldHVybiBsb3dJbnQ1MihlZGdl
LCBraW5kKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd0NlbGwoRWRnZSBlZGdlLCBPcGVy
YW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisg
ICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgREZHOjppc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKHZhbHVlLmFzQ2VsbCgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNW
YWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKKyAgICAgICAgICAgIExWYWx1ZSB1bmNoZWNrZWRWYWx1ZSA9IHZhbHVlLnZhbHVlKCk7Cisg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
dW5jaGVja2VkVmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkVmFsdWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRn
ZSkgJiBTcGVjQ2VsbCkpOworICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAg
ICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd09i
amVjdChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09w
ZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9k
ZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1v
ZGUpOworICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0cmluZyhFZGdlIGVkZ2Us
IE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlv
bikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duU3RyaW5nVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ0lkZW50
VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1v
ZGUpOworICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvd1N0cmluZ0lkZW50KEVkZ2Ug
ZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdJZGVudFVzZSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc3RyaW5nID0gbG93U3RyaW5nKGVkZ2UsIG1vZGUp
OworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hl
YXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSwg
c3RyaW5nLCBzdHJpbmdJbXBsKTsKKyAgICAgICAgcmV0dXJuIHN0cmluZ0ltcGw7CisgICAgfQor
CisgICAgTFZhbHVlIGxvd1N5bWJvbChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2Vs
bChlZGdlLCBtb2RlKTsKKyAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZhbHVlIGxvd05vbk51bGxPYmpl
Y3QoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVz
ZSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKKyAgICAgICAgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Qm9vbGVhbihFZGdl
IGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVj
dWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBLbm93bkJvb2xlYW5Vc2UpOworICAgICAgICAKKyAgICAgICAgaWYg
KGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdl
LT5hc0pTVmFsdWUoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNCb29sZWFuKCkpIHsKKyAg
ICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOworICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQuY29uc3RCb29sKHZhbHVlLmFzQm9vbGVhbigpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICBy
ZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewor
ICAgICAgICAgICAgTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOworICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuYm94
ZWRSZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQp
KTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xlYW4odW5ib3hlZFJlc3Vs
dCk7CisgICAgICAgICAgICBzZXRCb29sZWFuKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNCb29sZWFuKSk7
CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5i
b29sZWFuRmFsc2U7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dEb3VibGUoRWRnZSBlZGdl
KQorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzRG91YmxlKGVk
Z2UudXNlS2luZCgpKSk7CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVl
ID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhcHJvdmVuVHlwZShlZGdlKSk7CisgICAgICAgIHRlcm1p
bmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5kb3VibGVaZXJvOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgbG93SlNWYWx1ZShFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxh
dGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICFpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOworICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgIT0gSW50NTJSZXBV
c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpCisgICAgICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoZWRnZS0+YXNKU1Zh
bHVlKCkpKTsKKworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBt
X2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEludDMyKHZhbHVlLnZhbHVlKCkp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZhbHVlID0g
bV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGJveEJvb2xlYW4odmFsdWUudmFs
dWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlZhbHVlIG5vdCBkZWZpbmVkIik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93U3RvcmFnZShFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9zdG9yYWdlVmFsdWVzLmdl
dChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzdHJpY3RJ
bnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQuY2FzdFRvSW50MzIodmFsdWUpOworICAgICAgICBGVExfVFlQRV9D
SEVDSygKKyAgICAgICAgICAgIG5vVmFsdWUoKSwgZWRnZSwgU3BlY0ludDMyLAorICAgICAgICAg
ICAgbV9vdXQubm90RXF1YWwobV9vdXQuc2lnbkV4dDMyVG82NChyZXN1bHQpLCB2YWx1ZSkpOwor
ICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHN0cmljdEludDUyVG9Eb3VibGUoTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmludFRvRG91YmxlKHZhbHVlKTsK
KyAgICB9CisgICAgCisgICAgTFZhbHVlIHN0cmljdEludDUyVG9KU1ZhbHVlKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzSW50MzIgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInN0cmljdEludDUyVG9KU1ZhbHVlIGlzSW50MzIgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgaXNEb3VibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmljdEludDUyVG9K
U1ZhbHVlIGlzRG91YmxlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiByZXN1
bHRzOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBpbnQzMlZhbHVlID0gbV9vdXQuY2Fz
dFRvSW50MzIodmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5lcXVhbChtX291dC5zaWduRXh0MzJUbzY0KGludDMyVmFsdWUpLCB2YWx1ZSksCisgICAgICAg
ICAgICB1bnN1cmUoaXNJbnQzMiksIHVuc3VyZShpc0RvdWJsZSkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0ludDMyLCBpc0RvdWJs
ZSk7CisgICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94SW50
MzIoaW50MzJWYWx1ZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNEb3VibGUsIGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94RG91YmxlKG1f
b3V0LmludFRvRG91YmxlKHZhbHVlKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpOwor
ICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0ludDUyKExWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5zaGwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaW50
NTJUb1N0cmljdEludDUyKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291
dC5hU2hyKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQp
KTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzSW50MzIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUg
cHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjSW50MzIpKQorICAgICAgICAgICAgcmV0
dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3ZlT3JFcXVhbChqc1ZhbHVlLCBt
X3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RJbnQzMihMVmFsdWUganNW
YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjSW50MzIpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KGpzVmFs
dWUsIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIExWYWx1ZSB1bmJveEludDMyKExWYWx1
ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNhc3RUb0ludDMyKGpzVmFs
dWUpOworICAgIH0KKyAgICBMVmFsdWUgYm94SW50MzIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFkZChtX291dC56ZXJvRXh0KHZhbHVlLCBtX291dC5pbnQ2NCks
IG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc0NlbGxPck1pc2Mo
TFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7
CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjQ2Vs
bCB8IFNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVy
biBtX291dC50ZXN0SXNaZXJvNjQoanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9Cisg
ICAgTFZhbHVlIGlzTm90Q2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUsIH4oU3BlY0NlbGwgfCBTcGVjTWlzYykpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoanNWYWx1
ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIHVuYm94RG91Ymxl
KExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJpdENhc3QobV9v
dXQuYWRkKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlciksIG1fb3V0LmRvdWJsZVR5cGUpOworICAg
IH0KKyAgICBMVmFsdWUgYm94RG91YmxlKExWYWx1ZSBkb3VibGVWYWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX291dC5zdWIobV9vdXQuYml0Q2FzdChkb3VibGVWYWx1ZSwgbV9vdXQuaW50
NjQpLCBtX3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUganNWYWx1ZVRv
U3RyaWN0SW50NTIoRWRnZSBlZGdlLCBMVmFsdWUgYm94ZWRWYWx1ZSkKKyAgICB7CisgICAgICAg
IExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0lu
dDUyIHVuYm94aW5nIGludCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1MiB1bmJveGluZyBkb3VibGUg
Y2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1MiB1bmJveGluZyBjb250aW51YXRpb24iKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGlzTm90SW50MzI7CisgICAgICAgIGlmICghbV9pbnRl
cnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjSW50MzIpKQorICAgICAgICAgICAgaXNO
b3RJbnQzMiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNJbnQzMikpCisgICAgICAgICAgICBpc05v
dEludDMyID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlz
Tm90SW50MzIgPSB0aGlzLT5pc05vdEludDMyKGJveGVkVmFsdWUpOworICAgICAgICBtX291dC5i
cmFuY2goaXNOb3RJbnQzMiwgdW5zdXJlKGRvdWJsZUNhc2UpLCB1bnN1cmUoaW50Q2FzZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgZG91YmxlQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW50VG9JbnQ1MiA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LnNpZ25F
eHQzMlRvNjQodW5ib3hJbnQzMihib3hlZFZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91Ymxl
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBwb3NzaWJsZVJl
c3VsdCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkNvbnZlcnRCb3hlZERvdWJsZVRvSW50NTIpLCBib3hlZFZhbHVlKTsKKyAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1
ZSksIGVkZ2UsIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLAorICAgICAgICAgICAgbV9v
dXQuZXF1YWwocG9zc2libGVSZXN1bHQsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6bm90SW50
NTIpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZG91YmxlVG9JbnQ1
MiA9IG1fb3V0LmFuY2hvcihwb3NzaWJsZVJlc3VsdCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIAorICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludDY0LCBpbnRUb0ludDUyLCBkb3VibGVUb0ludDUyKTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIGRvdWJsZVRvU3RyaWN0SW50NTIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBMVmFsdWUgcG9zc2libGVSZXN1bHQgPSBtX291dC5jYWxsKAorICAgICAg
ICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Db252ZXJ0RG91Ymxl
VG9JbnQ1MiksIHZhbHVlKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQo
SW50NTJPdmVyZmxvdywKKyAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3Bl
Y0ludDUyQXNEb3VibGUsCisgICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJlc3VsdCwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBwb3NzaWJsZVJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFsdWUgY29udmVydERvdWJs
ZVRvSW50MzIoTFZhbHVlIHZhbHVlLCBib29sIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZVRvSW50KHZhbHVl
KTsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZUNvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQu
aW50VG9Eb3VibGUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlTm90Q29udmVy
dGlibGVUb0ludGVnZXIgPSBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCBp
bnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSk7CisgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxv
dywgRm9ybWF0dGVkVmFsdWUoRGF0YUZvcm1hdERvdWJsZSwgdmFsdWUpLCBtX25vZGUsIHZhbHVl
Tm90Q29udmVydGlibGVUb0ludGVnZXIpOworCisgICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0
aXZlWmVybykgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgdmFsdWVJc1plcm8gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkNvbnZlcnREb3VibGVUb0ludDMyIG9uIHplcm8iKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNv
bnZlcnREb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc1plcm8zMihpbnRlZ2VyVmFsdWUpLCB1bnN1cmUodmFsdWVJc1plcm8pLCB1
bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8odmFsdWVJc1plcm8sIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIExWYWx1ZSBkb3VibGVCaXRjYXN0VG9JbnQ2NCA9IG1fb3V0LmJpdENhc3QodmFsdWUsIG1f
b3V0LmludDY0KTsKKyAgICAgICAgICAgIExWYWx1ZSBzaWduQml0U2V0ID0gbV9vdXQubGVzc1Ro
YW4oZG91YmxlQml0Y2FzdFRvSW50NjQsIG1fb3V0LmNvbnN0SW50NjQoMCkpOworCisgICAgICAg
ICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBGb3JtYXR0ZWRWYWx1ZShEYXRhRm9ybWF0RG91
YmxlLCB2YWx1ZSksIG1fbm9kZSwgc2lnbkJpdFNldCk7CisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVlOworICAg
IH0KKworICAgIExWYWx1ZSBpc051bWJlcihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIHJldHVybiBw
cm92ZW47CisgICAgICAgIHJldHVybiBpc05vdENlbGxPck1pc2MoanNWYWx1ZSk7CisgICAgfQor
ICAgIExWYWx1ZSBpc05vdE51bWJlcihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1By
b3ZlblZhbHVlKHR5cGUsIH5TcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOworICAgICAgICByZXR1cm4gaXNDZWxsT3JNaXNjKGpzVmFsdWUpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RDZWxsKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJv
dmVuVmFsdWUodHlwZSwgflNwZWNDZWxsKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFzayk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBpc0NlbGwoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVu
ID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjQ2VsbCkpCisgICAgICAgICAgICByZXR1cm4gcHJv
dmVuOworICAgICAgICByZXR1cm4gbV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnTWFz
ayk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdE1pc2MoTFZhbHVlIHZhbHVlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVl
IHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNNaXNjKSkKKyAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5hYm92ZSh2YWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NChUYWdCaXRUeXBlT3RoZXIgfCBUYWdCaXRCb29sIHwgVGFnQml0VW5kZWZpbmVkKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc01pc2MoTFZhbHVlIHZhbHVlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3Zl
biA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY01pc2MpKQorICAgICAgICAgICAgcmV0dXJuIHBy
b3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoaXNOb3RNaXNjKHZhbHVlKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0Jvb2xlYW4pKQorICAgICAgICAg
ICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoCisg
ICAgICAgICAgICBtX291dC5iaXRYb3IoanNWYWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZh
bHNlKSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KH4xKSk7CisgICAgfQorICAgIExW
YWx1ZSBpc0Jvb2xlYW4oTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVj
RnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1
ZSh0eXBlLCBTcGVjQm9vbGVhbikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAg
ICByZXR1cm4gbV9vdXQubG9naWNhbE5vdChpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgIH0K
KyAgICBMVmFsdWUgdW5ib3hCb29sZWFuKExWYWx1ZSBqc1ZhbHVlKQorICAgIHsKKyAgICAgICAg
Ly8gV2Ugd2FudCB0byB1c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IExMVk0ga25vd3Mg
dGhhdCBldmVuIHRoZSBpbnRlZ2VyCisgICAgICAgIC8vIHZhbHVlIGlzIGp1c3QgMCBvciAxLiBC
dXQgZm9yIG5vdyB3ZSBkbyBpdCB0aGUgZHVtYiB3YXkuCisgICAgICAgIHJldHVybiBtX291dC5u
b3RaZXJvNjQobV9vdXQuYml0QW5kKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoMSkpKTsKKyAg
ICB9CisgICAgTFZhbHVlIGJveEJvb2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgIHZhbHVlLCBtX291dC5jb25zdEludDY0
KFZhbHVlVHJ1ZSksIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RPdGhlcihMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlLCB+U3BlY090aGVyKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2
YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+VGFnQml0VW5kZWZpbmVkKSksCisgICAgICAgICAgICBt
X291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgIH0KKyAgICBMVmFsdWUgaXNPdGhlcihM
VmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7Cisg
ICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjT3RoZXIp
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdEludDY0KH5UYWdC
aXRVbmRlZmluZWQpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7
CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc1Byb3ZlblZhbHVlKFNwZWN1bGF0ZWRUeXBlIHBy
b3ZlblR5cGUsIFNwZWN1bGF0ZWRUeXBlIHdhbnRlZFR5cGUpCisgICAgeworICAgICAgICBpZiAo
IShwcm92ZW5UeXBlICYgfndhbnRlZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJv
b2xlYW5UcnVlOworICAgICAgICBpZiAoIShwcm92ZW5UeXBlICYgd2FudGVkVHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZShFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgVW50eXBlZFVzZToKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAgICAgIGNh
c2UgS25vd25TdHJpbmdVc2U6CisgICAgICAgIGNhc2UgS25vd25QcmltaXRpdmVVc2U6CisgICAg
ICAgIGNhc2UgRG91YmxlUmVwVXNlOgorICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAg
ICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgc3BlY3Vs
YXRlSW50MzIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQ2VsbE9y
T3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU1hY2hpbmVJbnQoZWRnZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRn
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KGVkZ2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRl
U3RyaW5nKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nSWRl
bnRVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN5bWJvbChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ09i
amVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdChlZGdlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoZWRnZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVO
dW1iZXIoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVy
VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlUmVhbE51bWJlcihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVEb3VibGVSZXBSZWFsKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRG91YmxlUmVwTWFjaGluZUludFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJl
cE1hY2hpbmVJbnQoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCb29s
ZWFuVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihlZGdlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE5vdFN0cmluZ1ZhclVzZToKKyAgICAgICAgICAgIHNwZWN1
bGF0ZU5vdFN0cmluZ1ZhcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5vdENlbGxVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVOb3RDZWxsKGVkZ2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgT3RoZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxh
dGVPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1pc2NVc2U6
CisgICAgICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
VW5zdXBwb3J0ZWQgc3BlY3VsYXRpb24gdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNwZWN1bGF0ZShOb2RlKiwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
c3BlY3VsYXRlKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUludDMyKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIGxvd0ludDMyKGVkZ2UpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNwZWN1bGF0ZUNlbGwoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbG93Q2VsbChl
ZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVDZWxsT3JPdGhlcihFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RDZWxsID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgbm90IGNlbGwiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiU3BlY3VsYXRlIENlbGxPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291
dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZShpc05vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90Q2VsbCwgY29udGludWF0aW9uKTsKKyAgICAgICAgRlRM
X1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3Ro
ZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1hY2hpbmVJbnQoRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVRvU3RyaWN0SW50NTIoZWRn
ZSwgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIGlzT2JqZWN0KExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJv
dmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCBTcGVjT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVy
biBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAg
ICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUp
LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihPYmplY3RUeXBlKSk7CisgICAgfQorCisg
ICAgTFZhbHVlIGlzTm90T2JqZWN0KExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
U3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVu
VmFsdWUodHlwZSAmIFNwZWNDZWxsLCB+U3BlY09iamVjdCkpCisgICAgICAgICAgICByZXR1cm4g
cHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coCisgICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihPYmplY3RUeXBlKSk7CisgICAgfQorCisgICAgTFZhbHVl
IGlzTm90U3RyaW5nKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxU
b3ApCisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlw
ZSAmIFNwZWNDZWxsLCB+U3BlY1N0cmluZykpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOwor
ICAgICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCisgICAgICAgICAgICBtX291dC5sb2FkMzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgaXNTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVs
bFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0
eXBlICYgU3BlY0NlbGwsIFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICB9CisKKyAgICBMVmFsdWUg
aXNOb3RTeW1ib2woTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRv
cCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBl
ICYgU3BlY0NlbGwsIH5TcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47Cisg
ICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihj
ZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKHZtKCkuc3ltYm9sU3RydWN0dXJlLT5pZCgpKSk7CisgICAgfQorCisgICAgTFZhbHVl
IGlzQXJyYXlUeXBlKExWYWx1ZSBjZWxsLCBBcnJheU1vZGUgYXJyYXlNb2RlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgorICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleGluZ1R5cGUgPSBtX291dC5sb2Fk
OFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9pbmRleGluZ1R5cGUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CisgICAgICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVuZXhwZWN0ZWQgb3JpZ2luYWwgYXJyYXkiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwgbV9vdXQuY29uc3RJbnQz
MihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spKSwKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihJc0FycmF5IHwgYXJyYXlNb2RlLnNoYXBlTWFzaygpKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5OjpOb25BcnJheToKKyAgICAgICAgICAg
IGNhc2UgQXJyYXk6Ok9yaWdpbmFsTm9uQXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQoaW5kZXhpbmdUeXBl
LCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBBcnJheTo6UG9zc2libHlBcnJheToK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIoSW5kZXhpbmdTaGFw
ZU1hc2spKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihhcnJheU1vZGUu
c2hhcGVNYXNrKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJyYXkgY2xhc3MiKTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQz
MihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50MzIoU2NvcGVkQXJndW1lbnRzVHlwZSkpOworICAgICAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9U
eXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHR5cGVGb3JUeXBlZEFycmF5
VHlwZShhcnJheU1vZGUudHlwZWRBcnJheVR5cGUoKSkpKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBMVmFsdWUgaXNGdW5jdGlvbihMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1By
b3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBpc1R5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUp
OworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RGdW5jdGlvbihMVmFsdWUgY2VsbCwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92
ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNGdW5jdGlvbikpCisgICAg
ICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gaXNOb3RUeXBlKGNlbGwsIEpT
RnVuY3Rpb25UeXBlKTsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBMVmFsdWUgaXNFeG90aWNG
b3JUeXBlb2YoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkK
KyAgICB7CisgICAgICAgIGlmICghKHR5cGUgJiBTcGVjT2JqZWN0T3RoZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RO
b25aZXJvMzIoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCB8IFR5cGVPZlNob3VsZENhbGxHZXRDYWxsRGF0YSkpOworICAg
IH0KKyAgICAKKyAgICBMVmFsdWUgaXNUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDMyKHR5cGUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90
VHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9v
dXQubG9naWNhbE5vdChpc1R5cGUoY2VsbCwgdHlwZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNwZWN1bGF0ZU9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LCBpc05v
dE9iamVjdChjZWxsKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxsKGVk
Z2UpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlIGVkZ2Us
IExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjRnVuY3Rpb24sIGlzTm90RnVuY3Rpb24oY2VsbCkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBwcmltaXRpdmVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVyIHByaW1pdGl2ZSBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3RoZXIgY29udGludWF0aW9uIikpOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSks
IHVuc3VyZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmlt
aXRpdmVDYXNlKTsKKyAgICAgICAgCisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAg
ICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBp
c05vdE9iamVjdCh2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ocHJpbWl0aXZlQ2FzZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAg
ICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2Ug
ZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY0ZpbmFsT2JqZWN0LCBpc05vdFR5
cGUoY2VsbCwgRmluYWxPYmplY3RUeXBlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlRmluYWxPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlRmluYWxP
YmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQ
RV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTdHJpbmcgfCB+U3BlY0NlbGws
IGlzTm90U3RyaW5nKGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJp
bmcoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UsIGxvd0Nl
bGwoZWRnZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ0lkZW50KEVk
Z2UgZWRnZSwgTFZhbHVlIHN0cmluZywgTFZhbHVlIHN0cmluZ0ltcGwpCisgICAgeworICAgICAg
ICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ0lkZW50
IHwgflNwZWNTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUoKSwgbV9v
dXQuaXNOdWxsKHN0cmluZ0ltcGwpKTsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
QmFkVHlwZSwganNWYWx1ZVZhbHVlKHN0cmluZyksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOworICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZyk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbG93U3RyaW5nSWRlbnQoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVj
dEZvckNlbGwoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmls
dGVyKGVkZ2UsIFNwZWNTdHJpbmdPYmplY3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmlu
Z09iamVjdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBTdHJpbmdP
clN0cmluZ09iamVjdCBub3Qgc3RyaW5nIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIFN0cmluZ09yU3Ry
aW5nT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJ1
Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihsb3dDZWxsKGVkZ2UpLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KHN0cnVjdHVyZUlELCBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgp
KSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVj
dEZvclN0cnVjdHVyZUlEKGVkZ2UsIHN0cnVjdHVyZUlEKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlcihl
ZGdlLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQor
ICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRnZSwg
bV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoRWRnZSBl
ZGdlLCBMVmFsdWUgc3RydWN0dXJlSUQpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cmlu
Z09iamVjdFN0cnVjdHVyZSA9CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOworICAgICAg
ICAKKyAgICAgICAgaWYgKGFic3RyYWN0U3RydWN0dXJlKGVkZ2UpLmlzU3Vic2V0T2YoU3RydWN0
dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBu
b1ZhbHVlKCksIDAsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vh
a1N0cnVjdHVyZUlEKHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKTsKKyAgICB9CisKKyAgICB2b2lk
IHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjU3ltYm9sIHwgflNw
ZWNDZWxsLCBpc05vdFN5bWJvbChjZWxsKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVT
eW1ib2woRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UsIGxv
d0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlTm9uTnVsbE9iamVjdChF
ZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LCBpc05vdE9iamVjdChjZWxsKSk7Cisg
ICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLm5vZGUoKSwKKyAgICAg
ICAgICAgIG1fb3V0LnRlc3ROb25aZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDha
ZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU51bWJlcihFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNw
ZWNCeXRlY29kZU51bWJlciwgaXNOb3ROdW1iZXIodmFsdWUpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzcGVjdWxhdGVSZWFsTnVtYmVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERv
IGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxv
dCBvZiBjb250cm9sIGZsb3cuCisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVD
aGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gdW5ib3hEb3VibGUodmFsdWUpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Bl
Y3VsYXRlUmVhbE51bWJlciBpbnQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
IG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAgICAg
ICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgIAorICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIAorICAgICAgICB0eXBlQ2hlY2soCisgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVy
LAorICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxk
MSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVwUmVhbChFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICAvLyBEbyBhbiBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJs
ZSgpIGNhbiBjcmVhdGUgYSBsb3Qgb2YgY29udHJvbCBmbG93LgorICAgICAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoZWRnZSk7CisgICAgICAgIEZU
TF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVj
RG91YmxlUmVhbCwKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQo
dmFsdWUsIHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRG91YmxlUmVw
TWFjaGluZUludChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIu
bmVlZHNUeXBlQ2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBkb3VibGVUb1N0cmljdEludDUyKGVkZ2UsIGxvd0RvdWJsZShlZGdlKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQm9vbGVhbihFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBsb3dCb29sZWFuKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU5vdFN0
cmluZ1ZhcihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVl
ZHNUeXBlQ2hlY2soZWRnZSwgflNwZWNTdHJpbmdWYXIpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBpcyBj
ZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBpcyBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUo
aXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdD
YXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0aW9uKTsK
KyAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSwgdmFsdWUsIG1fb3V0LmxvYWRQdHIo
dmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTm90Q2VsbChFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2so
ZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2
YWx1ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU90aGVyKEVkZ2UgZWRnZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgdHlwZUNo
ZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1
ZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZU1pc2MoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICB0eXBlQ2hlY2so
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY01pc2MsIGlzTm90TWlzYyh2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNT
dGlsbFZhbGlkKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2dyYXBoLm1hc3F1ZXJhZGVzQXNV
bmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KyAgICB9CisgICAgCisgICAgTFZhbHVlIGxvYWRDZWxsU3RhdGUoTFZhbHVlIGJhc2UpCisgICAg
eworICAgICAgICByZXR1cm4gbV9vdXQubG9hZDhaZXJvRXh0MzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfY2VsbFN0YXRlKTsKKyAgICB9CisKKyAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVl
IGJhc2UpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiU3RvcmUgYmFycmllciBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBj
b250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9v
dXQubm90WmVybzMyKGxvYWRDZWxsU3RhdGUoYmFzZSkpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgLy8gV2UgZW1p
dCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywg
dGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAorICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwg
aXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklU
IHJhdGhlciB0aGFuCisgICAgICAgIC8vIHdhc3RpbmcgTExWTSdzIHRpbWUgb3B0aW1pemluZyBp
dC4KKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworCisgICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3I6OlByZXNlcnZlZFN0YXRlIHByZXNlcnZlZFN0YXRlID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucHJlc2VydmVSZXVzZWRSZWdpc3RlcnNC
eVB1c2hpbmcoaml0LCBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tTcGFjZTo6
U3BhY2VGb3JDQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVh
ZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24n
dCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCisg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQo
c2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQmFy
cmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJy
aWVyQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFy
cmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVh
bCwgc2NyYXRjaDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMiwg
d3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJh
cnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaDEsIHNjcmF0Y2gyLCBDQ2FsbEhlbHBl
cnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5k
b25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBu
ZWVkVG9GbHVzaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIHBh
cmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVy
QnVmZmVyLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VH
UFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBwcmVzZXJ2ZWRTdGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgYmFz
ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmdzPgorICAgIExWYWx1ZSB2bUNhbGwoTFR5cGUgdHlwZSwgTFZhbHVlIGZ1
bmN0aW9uLCBBcmdzLi4uIGFyZ3MpCisgICAgeworICAgICAgICBjYWxsUHJlZmxpZ2h0KCk7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYWxsKHR5cGUsIGZ1bmN0aW9uLCBhcmdzLi4u
KTsKKyAgICAgICAgY2FsbENoZWNrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2FsbFByZWZsaWdodChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCisgICAg
eworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPSBtX2Z0bFN0YXRlLmppdENv
ZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOworICAgICAgICBtX291dC5zdG9y
ZTMyKAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjYWxsU2l0ZUluZGV4LmJpdHMoKSks
CisgICAgICAgICAgICB0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgIH0KKwor
ICAgIHZvaWQgY2FsbFByZWZsaWdodCgpCisgICAgeworICAgICAgICBjYWxsUHJlZmxpZ2h0KGNv
ZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSk7CisgICAgfQorCisgICAgQ29kZU9yaWdp
biBjb2RlT3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFRhaWxDYWxsSW5saW5lZENhbGxlcgorICAgICAgICAgICAg
fHwgbV9ub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIKKyAgICAgICAg
ICAgIHx8IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cikgeworICAgICAgICAgICAgLy8gVGhpcyBjYXNlIGFyaXNlcyB3aGVuIHlvdSBoYXZlIGEgc2l0
dWF0aW9uIGxpa2UgdGhpczoKKyAgICAgICAgICAgIC8vIGZvbyBtYWtlcyBhIGNhbGwgdG8gYmFy
LCBiYXIgaXMgaW5saW5lZCBpbiBmb28uIGJhciBtYWtlcyBhIGNhbGwKKyAgICAgICAgICAgIC8v
IHRvIGJheiBhbmQgYmF6IGlzIGlubGluZWQgaW4gYmFyLiBBbmQgdGhlbiBiYXogbWFrZXMgYSB0
YWlsLWNhbGwgdG8gamF6LAorICAgICAgICAgICAgLy8gYW5kIGpheiBpcyBpbmxpbmVkIGluIGJh
ei4gV2Ugd2FudCB0aGUgY2FsbGZyYW1lIGZvciBqYXogdG8gYXBwZWFyIHRvIAorICAgICAgICAg
ICAgLy8gaGF2ZSBjYWxsZXIgYmUgYmFyLgorICAgICAgICAgICAgY29kZU9yaWdpbiA9ICpjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdUYWlsQ2FsbHMoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBjb2RlT3JpZ2luOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNhbGxDaGVjaygpCisgICAgeworICAgICAgICBpZiAoT3B0aW9uczo6dXNlRXhjZXB0aW9u
RnV6eigpKQorICAgICAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkV4Y2VwdGlvbkZ1enopLCBtX2NhbGxGcmFtZSk7CisgICAgICAgIAor
ICAgICAgICBMVmFsdWUgZXhjZXB0aW9uID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHZt
KCkuYWRkcmVzc09mRXhjZXB0aW9uKCkpKTsKKyAgICAgICAgTFZhbHVlIGhhZEV4Y2VwdGlvbiA9
IG1fb3V0Lm5vdFplcm82NChleGNlcHRpb24pOworCisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRj
aE9yaWdpbjsKKyAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAg
IGlmIChtX2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKG1fb3JpZ2luLmZv
ckV4aXQsIG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpKSB7CisgICAgICAgICAgICBi
b29sIGV4aXRPSyA9IHRydWU7CisgICAgICAgICAgICBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9
IHRydWU7CisgICAgICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNoZWNrLCBub1ZhbHVlKCksIG51bGxwdHIsIGhhZEV4Y2VwdGlvbiwKKyAgICAgICAgICAg
ICAgICBtX29yaWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0sp
LCBpc0V4Y2VwdGlvbkhhbmRsZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJFeGNlcHRpb24gY2hlY2sgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGhhZEV4Y2VwdGlvbiwgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9ucyks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uKTsKKyAgICB9CisKKyAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4g
cHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKFBhdGNocG9pbnRWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hPcmlnaW47CisgICAgICAgIEhhbmRsZXJJ
bmZvKiBleGNlcHRpb25IYW5kbGVyOworICAgICAgICBib29sIHdpbGxDYXRjaEV4Y2VwdGlvbiA9
IG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhp
dCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgIGlmICghd2lsbENh
dGNoRXhjZXB0aW9uKQorICAgICAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5k
bGU6OmRlZmF1bHRIYW5kbGUobV9mdGxTdGF0ZSk7CisKKyAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiICAgIFBhdGNocG9pbnQg
ZXhjZXB0aW9uIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlw
dG9ycy5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAi
XG4iKTsKKyAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAi
LCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBt
X29yaWdpbi53aXRoRm9yRXhpdEFuZEV4aXRPSyhvcENhdGNoT3JpZ2luLCBleGl0T0spOworCisg
ICAgICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXRE
ZXNjcmlwdG9yKG5vVmFsdWUoKSwgbnVsbHB0cik7CisKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
b2Zmc2V0IGludG8gdGhlIFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyB3aGVyZSB3ZSB3aWxsIGZp
bmQgdGhlIGV4aXQgYXJndW1lbnRzCisgICAgICAgIC8vIHdlIGFyZSBhYm91dCB0byBhcHBlbmQu
IFdlIG5lZWQgdG8gYWNjb3VudCBmb3IgYm90aCB0aGUgY2hpbGRyZW4gd2UndmUgYWxyZWFkeSBh
ZGRlZCwgYW5kCisgICAgICAgIC8vIGZvciB0aGUgcG9zc2liaWxpdHkgb2YgYSByZXN1bHQgdmFs
dWUgaWYgdGhlIHBhdGNocG9pbnQgaXMgbm90IHZvaWQuCisgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHZhbHVlLT5udW1DaGlsZHJlbigpOworICAgICAgICBpZiAodmFsdWUtPnR5cGUoKSAhPSBW
b2lkKQorICAgICAgICAgICAgb2Zmc2V0Kys7CisKKyAgICAgICAgLy8gVXNlIExhdGVDb2xkQW55
IHRvIGVuc3VyZSB0aGF0IHRoZSBzdGFja21hcCBhcmd1bWVudHMgaW50ZXJmZXJlIHdpdGggdGhl
IHBhdGNocG9pbnQncworICAgICAgICAvLyByZXN1bHQgYW5kIHdpdGggYW55IGxhdGUtY2xvYmJl
cmVkIHJlZ2lzdGVycy4KKyAgICAgICAgdmFsdWUtPmFwcGVuZFZlY3RvcldpdGhSZXAoCisgICAg
ICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9wQ2F0Y2hPcmlnaW4s
IG5vVmFsdWUoKSksCisgICAgICAgICAgICBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOworCisgICAg
ICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlOjpjcmVhdGUoCisgICAgICAgICAg
ICBtX2Z0bFN0YXRlLCBleGl0RGVzY3JpcHRvciwgb3JpZ2luLCBvZmZzZXQsICpleGNlcHRpb25I
YW5kbGVyKTsKKyAgICB9CisKKyAgICBMQmFzaWNCbG9jayBsb3dCbG9jayhERkc6OkJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2tzLmdldChibG9jayk7Cisg
ICAgfQorCisgICAgT1NSRXhpdERlc2NyaXB0b3IqIGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gJm1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLmFsbG9jKAorICAg
ICAgICAgICAgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9s
b2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKKyAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVu
ZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCAKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW4sIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gZmFsc2UpCisgICAgeworICAg
ICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCIgICAgT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0
b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJc
biIpOworICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIs
IGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOworICAgICAgICB9CisKKyAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG9yaWdpbi5leGl0T0spOworICAgICAg
ICAKKyAgICAgICAgaWYgKGRvT1NSRXhpdEZ1enppbmcoKSAmJiAhaXNFeGNlcHRpb25IYW5kbGVy
KSB7CisgICAgICAgICAgICBMVmFsdWUgbnVtYmVyT2ZGdXp6Q2hlY2tzID0gbV9vdXQuYWRkKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSgmZ19udW1iZXJPZk9T
UkV4aXRGdXp6Q2hlY2tzKSksCisgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zdG9yZTMyKG51bWJlck9mRnV6ekNoZWNrcywg
bV9vdXQuYWJzb2x1dGUoJmdfbnVtYmVyT2ZPU1JFeGl0RnV6ekNoZWNrcykpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAodW5zaWduZWQgYXRPckFmdGVyID0gT3B0aW9uczo6ZmlyZU9T
UkV4aXRGdXp6QXRPckFmdGVyKCkpIHsKKyAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uID0g
bV9vdXQuYml0T3IoCisgICAgICAgICAgICAgICAgICAgIGZhaWxDb25kaXRpb24sCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0
LmNvbnN0SW50MzIoYXRPckFmdGVyKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHVuc2lnbmVkIGF0ID0gT3B0aW9uczo6ZmlyZU9TUkV4aXRGdXp6QXQoKSkgeworICAgICAgICAg
ICAgICAgIGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICAgICAg
ZmFpbENvbmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobnVtYmVyT2ZG
dXp6Q2hlY2tzLCBtX291dC5jb25zdEludDMyKGF0KSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGZhaWxDb25kaXRpb24gPT0gbV9vdXQuYm9vbGVhbkZhbHNlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJsZXNzU3BlY3VsYXRpb24oCisgICAgICAg
ICAgICBtX291dC5zcGVjdWxhdGUoZmFpbENvbmRpdGlvbiksIGtpbmQsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIG9yaWdpbik7CisgICAgfQorCisgICAgdm9pZCBibGVzc1NwZWN1bGF0aW9uKENoZWNr
VmFsdWUqIHZhbHVlLCBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBOb2RlT3JpZ2luIG9yaWdpbikKKyAgICB7CisgICAgICAgIE9TUkV4aXRE
ZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKGxvd1Zh
bHVlLCBoaWdoVmFsdWUpOworICAgICAgICAKKyAgICAgICAgdmFsdWUtPmFwcGVuZENvbGRBbnlz
KGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQsIGxvd1Zh
bHVlKSk7CisKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHZh
bHVlLT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBCMzo6U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAg
ICAgICBleGl0RGVzY3JpcHRvci0+ZW1pdE9TUkV4aXQoCisgICAgICAgICAgICAgICAgICAgICpz
dGF0ZSwga2luZCwgb3JpZ2luLCBqaXQsIHBhcmFtcywgMCk7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisKKyAgICBTdGFja21hcEFyZ3VtZW50TGlzdCBidWlsZEV4aXRBcmd1bWVudHMoCisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdpbiBleGl0T3Jp
Z2luLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2ZF
eGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyA9IDApCisgICAgeworICAgICAgICBTdGFj
a21hcEFyZ3VtZW50TGlzdCByZXN1bHQ7CisgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cygKKyAg
ICAgICAgICAgIGV4aXREZXNjcmlwdG9yLCBleGl0T3JpZ2luLCByZXN1bHQsIGxvd1ZhbHVlLCBv
ZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBidWlsZEV4aXRBcmd1bWVudHMoCisgICAg
ICAgIE9TUkV4aXREZXNjcmlwdG9yKiBleGl0RGVzY3JpcHRvciwgQ29kZU9yaWdpbiBleGl0T3Jp
Z2luLCBTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBGb3JtYXR0ZWRWYWx1ZSBsb3dW
YWx1ZSwKKyAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExv
Y2F0aW9ucyA9IDApCisgICAgeworICAgICAgICBpZiAoISFsb3dWYWx1ZSkKKyAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBB
dmFpbGFiaWxpdHlNYXAgYXZhaWxhYmlsaXR5TWFwID0gdGhpcy0+YXZhaWxhYmlsaXR5TWFwKCk7
CisgICAgICAgIGF2YWlsYWJpbGl0eU1hcC5wcnVuZUJ5TGl2ZW5lc3MobV9ncmFwaCwgZXhpdE9y
aWdpbik7CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbio+IG1hcDsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLmZvckVhY2hBdmFp
bGFiaWxpdHkoCisgICAgICAgICAgICBbJl0gKEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWF2YWlsYWJpbGl0eS5zaG91bGRVc2VOb2RlKCkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYXZhaWxhYmlsaXR5Lm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
IW5vZGUtPmlzUGhhbnRvbUFsbG9jYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gbWFwLmFk
ZChub2RlLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9CisgICAgICAg
ICAgICAgICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zLmFkZChu
b2RlLT5vcCgpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50
IG9wZXJhbmQgPSBleGl0RGVzY3JpcHRvci0+bV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5ID0gYXZh
aWxhYmlsaXR5TWFwLm1fbG9jYWxzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
T3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkgeworICAgICAgICAgICAgICAg
IERGR19BU1NFUlQoCisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwKKyAgICAg
ICAgICAgICAgICAgICAgKCEoYXZhaWxhYmlsaXR5LmlzRGVhZCgpICYmIG1fZ3JhcGguaXNMaXZl
SW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIGV4aXRPcmlnaW4pKSkgfHwgbV9n
cmFwaC5tX3BsYW4ubW9kZSA9PSBGVExGb3JPU1JFbnRyeU1vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0
eShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5KTsKKyAgICAgICAgICAgIGlmIChleGl0VmFs
dWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCisgICAgICAgICAgICAgICAgZXhpdFZh
bHVlLmFkanVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5t
X3ZhbHVlc1tpXSA9IGV4aXRWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9y
IChhdXRvIGhlYXBQYWlyIDogYXZhaWxhYmlsaXR5TWFwLm1faGVhcCkgeworICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGhlYXBQYWlyLmtleS5iYXNlKCk7CisgICAgICAgICAgICBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbiogbWF0ZXJpYWxpemF0aW9uID0gbWFwLmdldChub2RlKTsKKyAg
ICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGhlYXBQYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChleGl0VmFs
dWUuaGFzSW5kZXhJblN0YWNrbWFwTG9jYXRpb25zKCkpCisgICAgICAgICAgICAgICAgZXhpdFZh
bHVlLmFkanVzdFN0YWNrbWFwTG9jYXRpb25zSW5kZXhCeU9mZnNldChvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zKTsKKyAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+
YWRkKAorICAgICAgICAgICAgICAgIGhlYXBQYWlyLmtleS5kZXNjcmlwdG9yKCksCisgICAgICAg
ICAgICAgICAgZXhpdFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgeworICAgICAgICAgICAgZGF0YUxvZygiICAgICAg
ICBFeGl0IHZhbHVlczogIiwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLCAiXG4iKTsKKyAgICAg
ICAgICAgIGlmICghZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIE1hdGVyaWFsaXphdGlvbnM6IFxu
Iik7CisgICAgICAgICAgICAgICAgZm9yIChFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiog
bWF0ZXJpYWxpemF0aW9uIDogZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucykKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgIiwgcG9pbnRlckR1bXAobWF0
ZXJpYWxpemF0aW9uKSwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KAorICAgICAgICBTdGFja21h
cEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9i
amVjdE1hdGVyaWFsaXphdGlvbio+JiBtYXAsCisgICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFi
aWxpdHkpCisgICAgeworICAgICAgICBGbHVzaGVkQXQgZmx1c2ggPSBhdmFpbGFiaWxpdHkuZmx1
c2hlZEF0KCk7CisgICAgICAgIHN3aXRjaCAoZmx1c2guZm9ybWF0KCkpIHsKKyAgICAgICAgY2Fz
ZSBEZWFkRmx1c2g6CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgICAg
IGlmIChhdmFpbGFiaWxpdHkuaGFzTm9kZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBleGl0
VmFsdWVGb3JOb2RlKGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkubm9kZSgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFk
LiBJdCBjb3VsZCBiZSBkZWFkIGluIGJ5dGVjb2RlIG9yIGl0IGNvdWxkIGhhdmUKKyAgICAgICAg
ICAgIC8vIGJlZW4ga2lsbGVkIGJ5IG91ciBEQ0UsIHdoaWNoIGNhbiBzb21ldGltZXMga2lsbCB0
aGluZ3MgZXZlbiBpZiB0aGV5IHdlcmUgbGl2ZSBpbgorICAgICAgICAgICAgLy8gYnl0ZWNvZGUu
CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7CisKKyAgICAgICAgY2FzZSBG
bHVzaGVkSlNWYWx1ZToKKyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgY2FzZSBG
bHVzaGVkQm9vbGVhbjoKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFjayhm
bHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Rmx1c2hlZEludDMyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJ
bnQzMihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
IGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0
YWNrQXNJbnQ1MihmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6
OmluSlNTdGFja0FzRG91YmxlKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkludmFsaWQgZmx1
c2ggZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICB9Cisg
ICAgCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvck5vZGUoCisgICAgICAgIFN0YWNrbWFwQXJn
dW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIC8vIE5PVEU6IEluIEZUTC0+QjMsIHdlIGNhbm5vdCBnZW5lcmF0ZSBjb2RlIGhlcmUsIGJl
Y2F1c2UgbV9vdXRwdXQgaXMgcG9zaXRpb25lZCBhZnRlciB0aGUKKyAgICAgICAgLy8gc3RhY2tt
YXAgdmFsdWUuIExpa2UgYWxsIHZhbHVlcywgdGhlIHN0YWNrbWFwIHZhbHVlIGNhbm5vdCB1c2Ug
YSBjaGlsZCB0aGF0IGlzIGRlZmluZWQgYWZ0ZXIKKyAgICAgICAgLy8gaXQuCisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChu
b2RlLT5oYXNSZXN1bHQoKSk7CisKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGFyaXNlIGluIG9iamVjdCBtYXRlcmlhbGl6YXRpb25z
LiBJIGFjdHVhbGx5IGRvdWJ0IHRoYXQgaXQgd291bGQsCisgICAgICAgICAgICAgICAgLy8gYnV0
IGl0IHNlZW1zIHdvcnRod2hpbGUgdG8gYmUgY29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAg
IHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICAg
ICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6Y29uc3RhbnQobm9kZS0+YXNKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNQaGFudG9tQWxs
b2NhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjptYXRlcmlh
bGl6ZU5ld09iamVjdChtYXAuZ2V0KG5vZGUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fYXZhaWxhYmxlUmVjb3Zlcmllcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgQXZhaWxhYmxlUmVjb3ZlcnkgcmVjb3ZlcnkgPSBtX2F2YWlsYWJsZVJlY292ZXJpZXNbaV07
CisgICAgICAgICAgICBpZiAocmVjb3Zlcnkubm9kZSgpICE9IG5vZGUpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICBFeGl0VmFsdWUgcmVzdWx0ID0gRXhpdFZhbHVlOjpy
ZWNvdmVyeSgKKyAgICAgICAgICAgICAgICByZWNvdmVyeS5vcGNvZGUoKSwgYXJndW1lbnRzLnNp
emUoKSwgYXJndW1lbnRzLnNpemUoKSArIDEsCisgICAgICAgICAgICAgICAgcmVjb3ZlcnkuZm9y
bWF0KCkpOworICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNvdmVyeS5sZWZ0KCkpOwor
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChyZWNvdmVyeS5yaWdodCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyZWRO
b2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMs
IERhdGFGb3JtYXRJbnQzMiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdElu
dDUyLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJ
bnQ1MlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0U3RyaWN0SW50
NTIsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5W
YWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEJvb2xlYW4sIHZhbHVl
LnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0
KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4g
ZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2YWx1ZS52YWx1ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAg
ICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFy
Z3VtZW50cywgRGF0YUZvcm1hdERvdWJsZSwgdmFsdWUudmFsdWUoKSk7CisKKyAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Ig
bm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgp
OworICAgIH0KKworICAgIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoU3RhY2ttYXBBcmd1bWVudExp
c3QmIGFyZ3VtZW50cywgRGF0YUZvcm1hdCBmb3JtYXQsIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEV4aXRWYWx1ZSByZXN1bHQgPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudChFeGl0QXJn
dW1lbnQoZm9ybWF0LCBhcmd1bWVudHMuc2l6ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEV4aXRWYWx1
ZSBleGl0VmFsdWVGb3JUYWlsQ2FsbChTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBO
b2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
OworICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOworCisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKKyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIHJl
dHVybiBFeGl0VmFsdWU6OmNvbnN0YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKKworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBMb3dlcmVk
Tm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVu
dHMsIERhdGFGb3JtYXRKUywgdmFsdWUudmFsdWUoKSk7CisKKyAgICAgICAgdmFsdWUgPSBtX2lu
dDMyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgYm94SW50
MzIodmFsdWUudmFsdWUoKSkpOworCisgICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdl
dChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgYm94Qm9vbGVhbih2YWx1ZS52
YWx1ZSgpKSk7CisKKyAgICAgICAgLy8gRG91YmxlcyBhbmQgSW50NTIgaGF2ZSBiZWVuIGNvbnZl
cnRlZCBieSBWYWx1ZVJlcCgpCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRv
Q1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5vZGUpLmRhdGEoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZG9lc0tpbGwoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
aWYgKGVkZ2UuZG9lc05vdEtpbGwoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9p
ZCBhZGRBdmFpbGFibGVSZWNvdmVyeSgKKyAgICAgICAgTm9kZSogbm9kZSwgUmVjb3ZlcnlPcGNv
ZGUgb3Bjb2RlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBEYXRhRm9ybWF0IGZvcm1hdCkK
KyAgICB7CisgICAgICAgIG1fYXZhaWxhYmxlUmVjb3Zlcmllcy5hcHBlbmQoQXZhaWxhYmxlUmVj
b3Zlcnkobm9kZSwgb3Bjb2RlLCBsZWZ0LCByaWdodCwgZm9ybWF0KSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoCisgICAgICAgIEVkZ2UgZWRnZSwgUmVjb3Zl
cnlPcGNvZGUgb3Bjb2RlLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBEYXRhRm9ybWF0IGZv
cm1hdCkKKyAgICB7CisgICAgICAgIGFkZEF2YWlsYWJsZVJlY292ZXJ5KGVkZ2Uubm9kZSgpLCBv
cGNvZGUsIGxlZnQsIHJpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldElu
dDMyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1
ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAg
fQorICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9pbnQ1MlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9o
aWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdHJpY3RJbnQ1MihOb2RlKiBub2RlLCBM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cmljdEludDUyVmFsdWVzLnNldChub2Rl
LCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lk
IHNldEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSwgSW50NTJLaW5kIGtpbmQpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICAgICAgY2FzZSBJbnQ1MjoKKyAgICAgICAg
ICAgIHNldEludDUyKG5vZGUsIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50
NTIobm9kZSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBpbnQ1MiBraW5k
Iik7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFs
dWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0Qm9vbGVhbihOb2Rl
KiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorICAg
IHZvaWQgc2V0U3RvcmFnZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91YmxlKE5vZGUqIG5vZGUsIExWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZG91YmxlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKworICAgIHZvaWQgc2V0SW50MzIo
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIobV9ub2RlLCB2YWx1ZSk7Cisg
ICAgfQorICAgIHZvaWQgc2V0SW50NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0
SW50NTIobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0U3RyaWN0SW50NTIoTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0U3RyaWN0SW50NTIobV9ub2RlLCB2YWx1ZSk7
CisgICAgfQorICAgIHZvaWQgc2V0SW50NTIoTFZhbHVlIHZhbHVlLCBJbnQ1MktpbmQga2luZCkK
KyAgICB7CisgICAgICAgIHNldEludDUyKG1fbm9kZSwgdmFsdWUsIGtpbmQpOworICAgIH0KKyAg
ICB2b2lkIHNldEpTVmFsdWUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRCb29sZWFuKExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4obV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAg
IHZvaWQgc2V0U3RvcmFnZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdG9yYWdl
KG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNWYWxpZChjb25zdCBMb3dlcmVkTm9kZVZhbHVlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghbV9ncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyh2YWx1ZS5ibG9jaygpLCBtX2hpZ2hC
bG9jaykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0YXJnZXQpCisg
ICAgeworICAgICAgICBtX2dyYXBoLm1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodGFy
Z2V0KTsKKyAgICB9CisKKyAgICBMVmFsdWUgbG9hZFN0cnVjdHVyZShMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBMVmFsdWUgdGFibGVJbmRleCA9IG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBMVmFsdWUgdGFibGVCYXNlID0gbV9v
dXQubG9hZFB0cigKKyAgICAgICAgICAgIG1fb3V0LmFic29sdXRlKHZtKCkuaGVhcC5zdHJ1Y3R1
cmVJRFRhYmxlKCkuYmFzZSgpKSk7CisgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9v
dXQuYmFzZUluZGV4KAorICAgICAgICAgICAgbV9oZWFwcy5zdHJ1Y3R1cmVUYWJsZSwgdGFibGVC
YXNlLCBtX291dC56ZXJvRXh0UHRyKHRhYmxlSW5kZXgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmxvYWRQdHIoYWRkcmVzcyk7CisgICAgfQorCisgICAgTFZhbHVlIHdlYWtQb2ludGVyKEpTQ2Vs
bCogcG9pbnRlcikKKyAgICB7CisgICAgICAgIGFkZFdlYWtSZWZlcmVuY2UocG9pbnRlcik7Cisg
ICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cihwb2ludGVyKTsKKyAgICB9CisKKyAgICBM
VmFsdWUgd2Vha1N0cnVjdHVyZUlEKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgYWRkV2Vha1JlZmVyZW5jZShzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gbV9vdXQuY29u
c3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgd2Vha1N0
cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiB3ZWFr
UG9pbnRlcihzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVz
c0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoYmFzZSwgbV9oZWFwcy52YXJpYWJsZXNb
b3BlcmFuZF0sIG9mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9pbnRlciBwYXlsb2FkRm9yKExW
YWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9y
KGJhc2UsIG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOworICAgIH0KKyAgICBUeXBlZFBvaW50ZXIg
dGFnRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZGRyZXNzRm9yKGJhc2UsIG9wZXJhbmQsIFRhZ09mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzRm9yKGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgb2Zm
c2V0KTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJh
bmQuaXNMb2NhbCgpKQorICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9jYXB0dXJlZCwg
b3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IobV9j
YWxsRnJhbWUsIG9wZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7CisgICAgfQorICAgIFR5cGVkUG9p
bnRlciBwYXlsb2FkRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBheWxv
YWRGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVy
IHBheWxvYWRGb3IoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKKyAgICB9CisgICAgVHlwZWRQ
b2ludGVyIHRhZ0ZvcihpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpKTsKKyAgICB9CisgICAgVHlwZWRQb2ludGVyIHRhZ0Zv
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZGRyZXNz
Rm9yKG9wZXJhbmQsIFRhZ09mZnNldCk7CisgICAgfQorICAgIAorICAgIEFic3RyYWN0VmFsdWUg
YWJzdHJhY3RWYWx1ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhdGUu
Zm9yTm9kZShub2RlKTsKKyAgICB9CisgICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKGVkZ2Uubm9kZSgp
KTsKKyAgICB9CisgICAgCisgICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZShOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUobm9kZSkubV90eXBlOworICAg
IH0KKyAgICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBwcm92ZW5UeXBlKGVkZ2Uubm9kZSgpKTsKKyAgICB9CisgICAgCisgICAgSlNW
YWx1ZSBwcm92ZW5WYWx1ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3Ry
YWN0VmFsdWUobm9kZSkubV92YWx1ZTsKKyAgICB9CisgICAgSlNWYWx1ZSBwcm92ZW5WYWx1ZShF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gcHJvdmVuVmFsdWUoZWRnZS5ub2RlKCkp
OworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0
dXJlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2Rl
KS5tX3N0cnVjdHVyZTsKKyAgICB9CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBhYnN0cmFj
dFN0cnVjdHVyZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RTdHJ1
Y3R1cmUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoTUFTTV9QUk9CRSkK
KyAgICB2b2lkIHByb2JlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoQ0NhbGxIZWxwZXJzOjpQcm9iZUNv
bnRleHQqKT4gcHJvYmVGdW5jKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHByb2JlRnVu
Yyk7CisgICAgfQorI2VuZGlmCisKKyAgICB2b2lkIGNyYXNoKCkKKyAgICB7CisgICAgICAgIGNy
YXNoKG1faGlnaEJsb2NrLT5pbmRleCwgbV9ub2RlLT5pbmRleCgpKTsKKyAgICB9CisgICAgdm9p
ZCBjcmFzaChCbG9ja0luZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7
CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUs
IG1fb3V0Lm9wZXJhdGlvbihmdGxVbnJlYWNoYWJsZSkpOworICAgICAgICBVTlVTRURfUEFSQU0o
YmxvY2tJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOworI2Vsc2UKKyAg
ICAgICAgbV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAorICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoZnRsVW5yZWFjaGFibGUpLAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoY29kZUJsb2NrKCkpLCBtX291dC5jb25zdEludDMyKGJsb2NrSW5kZXgpLAor
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihub2RlSW5kZXgpKTsKKyNlbmRpZgorICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgIH0KKworICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZh
aWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5OyB9CisgICAgCisgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fY29kZUJsb2NrOyB9
CisgICAgCisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgU3RhdGUmIG1fZnRsU3RhdGU7CisgICAg
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeSBtX2hlYXBzOworICAgIE91dHB1dCBtX291dDsKKyAgICBQ
cm9jZWR1cmUmIG1fcHJvYzsKKyAgICAKKyAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOworICAg
IExCYXNpY0Jsb2NrIG1faGFuZGxlRXhjZXB0aW9uczsKKyAgICBIYXNoTWFwPERGRzo6QmFzaWNC
bG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKKyAgICAKKyAgICBMVmFsdWUgbV9jYWxsRnJh
bWU7CisgICAgTFZhbHVlIG1fY2FwdHVyZWQ7CisgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsK
KyAgICBMVmFsdWUgbV90YWdNYXNrOworICAgIAorICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1faW50MzJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9zdHJpY3RJbnQ1MlZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2ludDUyVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fanNWYWx1ZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2Jvb2xlYW5WYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
ZG91YmxlVmFsdWVzOworICAgIAorICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBMTFZNIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KKyAgICAvLyBJdCdzIG5pY2UgdG8gaGF2ZSB0aGVzZSBvcHRpbWl6YXRpb25zIG9uIG91ciBl
bmQgYmVjYXVzZSB3ZSBjYW4gZ3VhcmFudGVlIHRoZW0gYSBiaXQgYmV0dGVyLgorICAgIC8vIFBy
b2JhYmx5IGFsc28gc2F2ZXMgTExWTSBjb21waWxlIHRpbWUuCisgICAgSGFzaE1hcDxOb2RlKiwg
TFZhbHVlPiBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzOworICAgIAorICAgIEhhc2hNYXA8Tm9kZSos
IExWYWx1ZT4gbV9waGlzOworICAgIAorICAgIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ciBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3I7CisgICAgCisgICAgVmVjdG9yPEF2YWlsYWJsZVJl
Y292ZXJ5LCAzPiBtX2F2YWlsYWJsZVJlY292ZXJpZXM7CisgICAgCisgICAgSW5QbGFjZUFic3Ry
YWN0U3RhdGUgbV9zdGF0ZTsKKyAgICBBYnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFj
dFN0YXRlPiBtX2ludGVycHJldGVyOworICAgIERGRzo6QmFzaWNCbG9jayogbV9oaWdoQmxvY2s7
CisgICAgREZHOjpCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxvY2s7CisgICAgTEJhc2ljQmxvY2sg
bV9uZXh0TG93QmxvY2s7CisKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOworICAgIHVuc2lnbmVk
IG1fbm9kZUluZGV4OworICAgIE5vZGUqIG1fbm9kZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCit2b2lkIGxvd2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKK3sKKyAgICBMb3dl
ckRGR1RvTExWTSBsb3dlcmluZyhzdGF0ZSk7CisgICAgbG93ZXJpbmcubG93ZXIoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJGVExMb3dlckRGR1RvTExWTS5oIgorI2luY2x1ZGUgIkZU
TExvd2VyREZHVG9CMy5oIgogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTEwNSw3ICsxMDUs
NyBAQCBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVuCiB9CiAjZW5kaWYK
IAotLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0
aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZworLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5
cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBCMywgYnkgY3JlYXRpbmcKIC8v
IHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLX1dJ
VEhfRVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAogICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBfZnRj
X2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTE5LDEw
ICsxMTksMTAgQEAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbgogI2Rl
ZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pIFwKICAgICBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChC
YWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25k
aXRpb24pCiAKLWNsYXNzIExvd2VyREZHVG9MTFZNIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMb3dlckRGR1RvTExWTSk7CitjbGFzcyBMb3dlckRGR1RvQjMgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKExvd2VyREZHVG9CMyk7CiBwdWJsaWM6Ci0gICAgTG93ZXJERkdUb0xMVk0oU3Rh
dGUmIHN0YXRlKQorICAgIExvd2VyREZHVG9CMyhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIDogbV9n
cmFwaChzdGF0ZS5ncmFwaCkKICAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQogICAgICAgICAs
IG1fb3V0KHN0YXRlKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICAvLyBBbGwgb2YgdGhpcyBlZmZvcnQgdG8gZmluZCB0aGUgbmV4dCBibG9jayBnaXZlcyB1
cyB0aGUgYWJpbGl0eSB0byBrZWVwIHRoZQogICAgICAgICAvLyBnZW5lcmF0ZWQgSVIgaW4gcm91
Z2hseSBwcm9ncmFtIG9yZGVyLiBUaGlzIG91Z2h0IG5vdCBhZmZlY3QgdGhlIHBlcmZvcm1hbmNl
Ci0gICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSAoc2luY2Ugd2UgZXhwZWN0IExMVk0g
dG8gcmVvcmRlciB0aGluZ3MpIGJ1dCBpdCB3aWxsCisgICAgICAgIC8vIG9mIHRoZSBnZW5lcmF0
ZWQgY29kZSAoc2luY2Ugd2UgZXhwZWN0IEIzIHRvIHJlb3JkZXIgdGhpbmdzKSBidXQgaXQgd2ls
bAogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291
dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93QmxvY2spOwogICAgICAgICAKQEAgLTE3NjQs
OCArMTc2NCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCiAgICAg
ewotICAgICAgICAvLyBGSVhNRTogaW52ZXN0aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRl
cnN0YW5kIGl0cyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MuCi0gICAgICAgIC8vIEl0IG1p
Z2h0IGJlIGJldHRlciB0byBoYXZlIHRoZSBpbmxpbmUgbG9vcCBpbiBERkcgdG9vLgogICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpCiAgICAgICAgICAg
ICBzZXREb3VibGUobV9vdXQuZG91YmxlUG93aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CiAgICAgICAgIGVsc2UgewpAQCAtMTkyMiw4
ICsxOTIwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxv
dyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5u
ZWcodmFsdWUpOwogICAgICAgICAgICAgZWxzZSBpZiAoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJv
KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gIjAgLSB4IiBpcyB0
aGUgY2Fub25pY2FsIHdheSBvZiBzYXlpbmcgIi14IiBpbiBib3RoIEIzIGFuZCBMTFZNLiBUaGlz
IGdldHMKLSAgICAgICAgICAgICAgICAvLyBsb3dlcmVkIHRvIHRoZSByaWdodCB0aGluZy4KICAg
ICAgICAgICAgICAgICBDaGVja1ZhbHVlKiBjaGVjayA9IG1fb3V0LnNwZWN1bGF0ZVN1YihtX291
dC5pbnQzMlplcm8sIHZhbHVlKTsKICAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKGNo
ZWNrLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY2hlY2s7CkBAIC00MjE3LDcgKzQyMTMsOSBAQCBwcml2YXRlOgogICAg
ICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKTsKIAogICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBmdW5jdGlvbiB3aXRoIHplcm8g
aW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgorICAgICAgICAgICAgLy8gUHJvdGVjdCBh
Z2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZGlk
bid0IGxpa2UgdGhhdC4KKyAgICAgICAgICAgIC8vIEl0J3Mgbm90IGNsZWFyIGlmIHRoaXMgaXMg
bmVlZGVkIGFueW1vcmUuCisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDM4MgogICAgICAgICAgICAgdGVybWluYXRlKEJhZENh
Y2hlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTg0Miw3ICs1ODQwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgTEJhc2ljQmxvY2sgZGVmYXVsdEhhc0luc3RhbmNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBTeW1ib2wuaGFzSW5zdGFu
Y2UgaXMgZGVmYXVsdCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBjb250aW51YXRpb24iKSk7
CiAKLSAgICAgICAgLy8gVW5saWtlIGluIHRoZSBERkcsIHdlIGRvbid0IHdvcnJ5IGFib3V0IGNs
ZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBwcm92ZW4gdGhl
IGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25zdGFudCBhcyBMTFZNIHNob3VsZCBmaXggaXQgZm9y
IHVzLgorICAgICAgICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQg
Y2xlYW5pbmcgdGhpcyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHByb3ZlbiB0
aGUgaGFzSW5zdGFuY2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIEIzIHNob3VsZCBmaXggaXQgZm9y
IHVzLgogCiAgICAgICAgIEFTU0VSVCghbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCktPmlzQ2VsbENv
bnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPT0gbV9ub2RlLT5jaGlsZDIo
KS5ub2RlKCktPmFzQ2VsbCgpKTsKIApAQCAtODQzOSwyMyArODQzNywyMyBAQCBwcml2YXRlOgog
CiAgICAgLy8gVGhpcyBpcyBhIG1lY2hhbmlzbSBmb3IgY3JlYXRpbmcgYSBjb2RlIGdlbmVyYXRv
ciB0aGF0IGZpbGxzIGluIGEgZ2FwIGluIHRoZSBjb2RlIHVzaW5nIG91cgogICAgIC8vIG93biBN
YWNyb0Fzc2VtYmxlci4gVGhpcyBpcyB1c2VmdWwgZm9yIHNsb3cgcGF0aHMgdGhhdCBpbnZvbHZl
IGEgbG90IG9mIGNvZGUgYW5kIHdlIGRvbid0IHdhbnQKLSAgICAvLyB0byBwYXkgdGhlIHByaWNl
IG9mIExMVk0gb3B0aW1pemluZyBpdC4gQSBsYXp5IHNsb3cgcGF0aCB3aWxsIG9ubHkgYmUgZ2Vu
ZXJhdGVkIGlmIGl0IGFjdHVhbGx5CisgICAgLy8gdG8gcGF5IHRoZSBwcmljZSBvZiBCMyBvcHRp
bWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQg
YWN0dWFsbHkKICAgICAvLyBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGEgbGF6eSBzbG93
IHBhdGggYWx3YXlzIGluY3VycyB0aGUgY29zdCBvZiB0d28gYWRkaXRpb25hbCBqdW1wcy4KLSAg
ICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRl
IGlzIHNsYXZlZCB0byB3aGF0ZXZlciBMTFZNIGRpZCwgc28geW91CisgICAgLy8gQWxzbywgdGhl
IGxhenkgc2xvdyBwYXRoJ3MgcmVnaXN0ZXIgYWxsb2NhdGlvbiBzdGF0ZSBpcyBzbGF2ZWQgdG8g
d2hhdGV2ZXIgQjMgZGlkLCBzbyB5b3UKICAgICAvLyBoYXZlIHRvIHVzZSBhIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciB0byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lzdGVycyBhbmQgeW91
IG1heSBoYXZlCiAgICAgLy8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlmIHRoZXJlIGFyZW4n
dCBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZS4KICAgICAvLwogICAgIC8vIExhenkgc2xvdyBw
YXRocyBpbnZvbHZlIHRocmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0aW9uLiBFYWNoIHN0
YWdlIGhhcyB1bmlxdWUKICAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3dsZWRnZS4gVGhlIHN0
YWdlcyBhcmU6CiAgICAgLy8KLSAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJpbmcsIGkuZS4gY29k
ZSB0aGF0IHJ1bnMgaW4gdGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ug
d2lsbAorICAgIC8vIDEpIERGRy0+QjMgbG93ZXJpbmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4g
dGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ugd2lsbAogICAgIC8vICAg
IGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRoZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRz
IHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkgc2xvdwogICAgIC8vICAgIHBhdGgsIHRoZW4g
eW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVudCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFy
Z3MgYXJndW1lbnRzIGFmdGVyIHRoZQogICAgIC8vICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5n
IGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFs
dWVzLiBIZW5jZQogICAgIC8vICAgIHlvdSBwYXNzIGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgp
IGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJpbmcgc3RhZ2UgKDIpOgogICAgIC8vCiAgICAg
Ly8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMg
Y29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGljaCB3ZSBrbm93Ci0gICAgLy8gICAgdGhlIG1h
cHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhl
IHJlZ2lzdGVycyB0aGF0IExMVk0KKyAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50
cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgQjMK
ICAgICAvLyAgICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1lbnRzLiBZb3UgZG9uJ3QgYWN0dWFs
bHkgd2FudCB0byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBzaW5jZSB0aGVuCiAgICAgLy8gICAg
dGhlIHNsb3cgcGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBsYXppbHkgZ2VuZXJhdGVkLiBJbnN0
ZWFkLCB5b3Ugd2FudCB0byBzYXZlIHRoZQogICAgIC8vICAgIHJlZ2lzdGVycyBiZWluZyB1c2Vk
IGZvciB0aGUgYXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdlbmVyYXRpb24gdG8gc3RhZ2UgKDMp
IGJ5IGNyZWF0aW5nCkBAIC04NDY1LDggKzg0NjMsOCBAQCBwcml2YXRlOgogICAgIC8vICAgIGV4
ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlv
dSBjcmVhdGVkIGluIHN0YWdlICgyKS4KICAgICAvLwogICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRp
bWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBv
bmUsIG9yIG1hbnkgdGltZXMuCi0gICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZv
a2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3
aGljaAotICAgIC8vIGNhc2Ugc3RhZ2UgKDIpIHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRl
IHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEganVtcCB0aHJlYWRpbmcpLAorICAgIC8vIFN0YWdl
ICgyKSB3aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFnZSAoMSkuIEJ1dCwgQjMg
bWF5IGtpbGwgdGhlIGNvZGUsIGluIHdoaWNoCisgICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3Qg
cnVuLiBCMyBtYXkgZHVwbGljYXRlIHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEgdGFpbCBkdXBs
aWNhdGlvbiksCiAgICAgLy8gbGVhZGluZyB0byBtYW55IGNhbGxzIHRvIHlvdXIgc3RhZ2UgKDIp
IGxhbWJkYS4gU3RhZ2UgKDMpIG1heSBiZSBjYWxsZWQgemVybyBvciBvbmNlIGZvciBlYWNoCiAg
ICAgLy8gc3RhZ2UgKDIpLiBJdCB3aWxsIGJlIGNhbGxlZCB6ZXJvIHRpbWVzIGlmIHRoZSBzbG93
IHBhdGggbmV2ZXIgcnVucy4gVGhpcyBpcyB3aGF0IHlvdSBob3BlIGZvcgogICAgIC8vIHdoZW5l
dmVyIHlvdSB1c2UgdGhlIGxhenlTbG93UGF0aCgpIG1lY2hhbmlzbS4KQEAgLTkxMzQsNyArOTEz
Miw3IEBAIHByaXZhdGU6CiAgICAgfQogICAgIExWYWx1ZSB1bmJveEJvb2xlYW4oTFZhbHVlIGpz
VmFsdWUpCiAgICAgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFy
YW50ZWVzIHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVnZXIKKyAgICAgICAgLy8g
V2Ugd2FudCB0byB1c2UgYSBjYXN0IHRoYXQgZ3VhcmFudGVlcyB0aGF0IEIzIGtub3dzIHRoYXQg
ZXZlbiB0aGUgaW50ZWdlcgogICAgICAgICAvLyB2YWx1ZSBpcyBqdXN0IDAgb3IgMS4gQnV0IGZv
ciBub3cgd2UgZG8gaXQgdGhlIGR1bWIgd2F5LgogICAgICAgICByZXR1cm4gbV9vdXQubm90WmVy
bzY0KG1fb3V0LmJpdEFuZChqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KDEpKSk7CiAgICAgfQpA
QCAtOTcxNSw3ICs5NzEzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAvLyBXZSBlbWl0IHRoZSBz
dG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdp
bGwgbmV2ZXIgZmlyZS4gQW5kCiAgICAgICAgIC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtl
cyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVy
IHRoYW4KLSAgICAgICAgLy8gd2FzdGluZyBMTFZNJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgorICAg
ICAgICAvLyB3YXN0aW5nIEIzJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgogICAgICAgICBsYXp5U2xv
d1BhdGgoCiAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CiAgICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7CkBAIC0xMDQyNSw5ICsx
MDQyMyw5IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9zdG9yYWdlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
ZG91YmxlVmFsdWVzOwogICAgIAotICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBMTFZNIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KKyAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBo
YXZpbmcgdG8gZG8gQ1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgogICAgIC8vIEl0J3Mgbmlj
ZSB0byBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBn
dWFyYW50ZWUgdGhlbSBhIGJpdCBiZXR0ZXIuCi0gICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBM
TFZNIGNvbXBpbGUgdGltZS4KKyAgICAvLyBQcm9iYWJseSBhbHNvIHNhdmVzIEIzIGNvbXBpbGUg
dGltZS4KICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXM7
CiAgICAgCiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CkBAIC0xMDQ0OSw5ICsx
MDQ0Nyw5IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi12b2lkIGxv
d2VyREZHVG9MTFZNKFN0YXRlJiBzdGF0ZSkKK3ZvaWQgbG93ZXJERkdUb0IzKFN0YXRlJiBzdGF0
ZSkKIHsKLSAgICBMb3dlckRGR1RvTExWTSBsb3dlcmluZyhzdGF0ZSk7CisgICAgTG93ZXJERkdU
b0IzIGxvd2VyaW5nKHN0YXRlKTsKICAgICBsb3dlcmluZy5sb3dlcigpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHJldmlzaW9uIDE5
NjczMSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5o
OjE5NjczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExvd2VyREZHVG9MTFZNX2gKKyNkZWZp
bmUgRlRMTG93ZXJERkdUb0xMVk1faAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTExvd2VyREZHVG9MTFZNX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEZUTExvd2VyREZHVG9MTFZNX2gK
LSNkZWZpbmUgRlRMTG93ZXJERkdUb0xMVk1faAorI2lmbmRlZiBGVExMb3dlckRGR1RvQjNfaAor
I2RlZmluZSBGVExMb3dlckRGR1RvQjNfaAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKQEAgLTMz
LDExICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKLXZvaWQg
bG93ZXJERkdUb0xMVk0oU3RhdGUmKTsKK3ZvaWQgbG93ZXJERkdUb0IzKFN0YXRlJik7CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogCi0j
ZW5kaWYgLy8gRlRMTG93ZXJERkdUb0xMVk1faAorI2VuZGlmIC8vIEZUTExvd2VyREZHVG9CM19o
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDQ2MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCi0KLSNpZiBFTkFC
TEUoRlRMX0pJVCkKLQotI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCi0jaW5jbHVk
ZSAiQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlLmgiCi0jaW5jbHVkZSAiQjNTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMuaCIKLSNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgotI2lu
Y2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCi0jaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCi0jaW5jbHVkZSAi
REZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaCIKLSNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlB
bmFseXNpc1BoYXNlLmgiCi0jaW5jbHVkZSAiREZHT1NSRXhpdEZ1enouaCIKLSNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmgi
Ci0jaW5jbHVkZSAiRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCIKLSNpbmNsdWRlICJGVExFeGNlcHRp
b25UYXJnZXQuaCIKLSNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKLSNpbmNsdWRl
ICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgotI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwuaCIK
LSNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMT3BlcmF0aW9u
cy5oIgotI2luY2x1ZGUgIkZUTE91dHB1dC5oIgotI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGUuaCIKLSNpbmNsdWRlICJGVExUaHVua3MuaCIKLSNpbmNsdWRlICJGVExXZWln
aHRlZFRhcmdldC5oIgotI2luY2x1ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJ
VEJpdEFuZEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVEJpdE9yR2VuZXJhdG9yLmgiCi0jaW5j
bHVkZSAiSklUQml0WG9yR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRMZWZ0
U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKLSNpbmNsdWRl
ICJKSVRSaWdodFNoaWZ0R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgi
Ci0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIk9wZXJhbmRz
SW5saW5lcy5oIgotI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgiCi0jaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgi
Ci0jaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKLSNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0
ZXIuaCIKLSNpbmNsdWRlICJXYXRjaGRvZy5oIgotI2luY2x1ZGUgPGF0b21pYz4KLSNpZiAhT1Mo
V0lORE9XUykKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dW5vcmRlcmVk
X3NldD4KLSNpbmNsdWRlIDx3dGYvQm94Lmg+Ci0jaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBCMzsK
LXVzaW5nIG5hbWVzcGFjZSBERkc7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0ZDo6YXRvbWljPGludD4g
Y29tcGlsZUNvdW50ZXI7Ci0KLSNpZiBBU1NFUlRfRElTQUJMRUQKLU5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggc3RhdGljIHZvaWQgZnRsVW5yZWFjaGFibGUoKQotewotICAgIENSQVNIKCk7Ci19Ci0j
ZWxzZQotTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25l
ZCBub2RlSW5kZXgpCi17Ci0gICAgZGF0YUxvZygiQ3Jhc2hpbmcgaW4gdGhvdWdodC10by1iZS11
bnJlYWNoYWJsZSBGVEwtZ2VuZXJhdGVkIGNvZGUgZm9yICIsIHBvaW50ZXJEdW1wKGNvZGVCbG9j
ayksICIgYXQgYmFzaWMgYmxvY2sgIyIsIGJsb2NrSW5kZXgpOwotICAgIGlmIChub2RlSW5kZXgg
IT0gVUlOVF9NQVgpCi0gICAgICAgIGRhdGFMb2coIiwgbm9kZSBAIiwgbm9kZUluZGV4KTsKLSAg
ICBkYXRhTG9nKCIuXG4iKTsKLSAgICBDUkFTSCgpOwotfQotI2VuZGlmCi0KLS8vIFVzaW5nIHRo
aXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExW
TSwgYnkgY3JlYXRpbmcKLS8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCi0jZGVmaW5l
IEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAotICAgICAgICBG
b3JtYXR0ZWRWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBFZGdlIF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5
cGVzUGFzc2VkVGhyb3VnaCA9ICh0eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAotICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQ
YXNzZWRUaHJvdWdoKSkgXAotICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB0eXBlQ2hlY2soX2Z0
Y19sb3dWYWx1ZSwgX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoLCAoZmFp
bENvbmRpdGlvbiksIGV4aXRLaW5kKTsgXAotICAgIH0gd2hpbGUgKGZhbHNlKQotCi0jZGVmaW5l
IEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwg
ZmFpbENvbmRpdGlvbikgXAotICAgIEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKEJhZFR5
cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlv
bikKLQotY2xhc3MgTG93ZXJERkdUb0xMVk0gewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExv
d2VyREZHVG9MTFZNKTsKLXB1YmxpYzoKLSAgICBMb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUp
Ci0gICAgICAgIDogbV9ncmFwaChzdGF0ZS5ncmFwaCkKLSAgICAgICAgLCBtX2Z0bFN0YXRlKHN0
YXRlKQotICAgICAgICAsIG1fb3V0KHN0YXRlKQotICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJv
YykKLSAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQotICAgICAgICAsIG1faW50ZXJwcmV0
ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIGxv
d2VyKCkKLSAgICB7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAg
ICAKLSAgICAgICAgQ1N0cmluZyBuYW1lOwotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBuYW1lID0gdG9DU3RyaW5nKAotICAgICAgICAgICAg
ICAgICJqc0JvZHlfIiwgKytjb21waWxlQ291bnRlciwgIl8iLCBjb2RlQmxvY2soKS0+aW5mZXJy
ZWROYW1lKCksCi0gICAgICAgICAgICAgICAgIl8iLCBjb2RlQmxvY2soKS0+aGFzaCgpKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuYW1lID0gImpzQm9keSI7Ci0gICAgICAgIAotICAg
ICAgICBtX2dyYXBoLmVuc3VyZURvbWluYXRvcnMoKTsKLQotICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVhZHks
IGJlZ2lubmluZyBsb3dlcmluZy5cbiIpOwotCi0gICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9o
ZWFwcyk7Ci0KLSAgICAgICAgLy8gV2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9m
IHRoZSBpbml0aWFsaXphdGlvbiBjb2RlLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7
Ci0gICAgICAgIAotICAgICAgICBtX3Byb2xvZ3VlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQ
cm9sb2d1ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc3RhY2tPdmVyZmxvdyA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3RhY2sgb3ZlcmZsb3ciKSk7Ci0gICAgICAgIG1faGFuZGxlRXhjZXB0
aW9ucyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFuZGxlIEV4Y2VwdGlvbnMiKSk7Ci0gICAg
ICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja0FyZ3VtZW50cyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ2hlY2sgYXJndW1lbnRzIikpOwotCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJ
bmRleCkgewotICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIG1fb3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0
aW9uQ291bnQpOwotICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkJsb2NrICIsICptX2hpZ2hCbG9jaykpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIEJhY2sgdG8gcHJvbG9ndWUgZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBn
ZXQgc25lYWtpbHkgY3JlYXRlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KLSAgICAgICAg
bV9vdXQuc2V0RnJlcXVlbmN5KDEpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bV9wcm9sb2d1ZSwgc3RhY2tPdmVyZmxvdyk7Ci0gICAgICAgIG1fb3V0LmluaXRpYWxpemVDb25z
dGFudHMobV9wcm9jLCBtX3Byb2xvZ3VlKTsKLSAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7
Ci0KLSAgICAgICAgc2l6ZV90IHNpemVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9n
cmFwaC5tX25leHRNYWNoaW5lTG9jYWw7Ci0gICAgICAgIEIzOjpTbG90QmFzZVZhbHVlKiBjYXB0
dXJlZEJhc2UgPSBtX291dC5sb2NrZWRTdGFja1Nsb3Qoc2l6ZU9mQ2FwdHVyZWQpOwotICAgICAg
ICBtX2NhcHR1cmVkID0gbV9vdXQuYWRkKGNhcHR1cmVkQmFzZSwgbV9vdXQuY29uc3RJbnRQdHIo
c2l6ZU9mQ2FwdHVyZWQpKTsKLSAgICAgICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJl
ZEJhc2UtPnNsb3QoKTsKLQotICAgICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJ
blByZU9yZGVyKCk7Ci0KLSAgICAgICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW55IGFsbG9j
YSdzIGFmdGVyIHRoaXMgcG9pbnQsIHNpbmNlIHRoZXkgd2lsbCBjZWFzZSB0bwotICAgICAgICAv
LyBiZSBtZW0ycmVnIGNhbmRpZGF0ZXMuCi0gICAgICAgIAotICAgICAgICBtX2NhbGxGcmFtZSA9
IG1fb3V0LmZyYW1lUG9pbnRlcigpOwotICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5j
b25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwotICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25z
dEludDY0KFRhZ01hc2spOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IEIzIGtub3dzIHRo
YXQgd2UgcmVhbGx5IGNhcmUgYWJvdXQgdGhlIG1hc2sgcmVnaXN0ZXJzLiBUaGlzIGZvcmNlcyB0
aGUKLSAgICAgICAgLy8gY29uc3RhbnRzIHRvIGJlIG1hdGVyaWFsaXplZCBpbiByZWdpc3RlcnMu
Ci0gICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7
Ci0gICAgICAgIG1fcHJvYy5hZGRGYXN0Q29uc3RhbnQobV90YWdNYXNrLT5rZXkoKSk7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5jb25zdEludFB0cihjb2RlQmxvY2so
KSksIGFkZHJlc3NGb3IoSlNTdGFjazo6Q29kZUJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICBkaWRPdmVyZmxvd1N0YWNrKCksIHJhcmVseShzdGFj
a092ZXJmbG93KSwgdXN1YWxseShjaGVja0FyZ3VtZW50cykpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc3RhY2tPdmVyZmxvdywgbV9oYW5kbGVFeGNlcHRpb25zKTsKLSAgICAg
ICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRo
cm93U3RhY2tPdmVyZmxvd0Vycm9yKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGNv
ZGVCbG9jaygpKSk7Ci0gICAgICAgIG1fb3V0LnBhdGNocG9pbnQoVm9pZCktPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcyYpIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgdGVybWluYWwsIHNv
IHdlIGNhbiBjbG9iYmVyIGV2ZXJ5dGhpbmcuIFRoYXQncyB3aHkgd2UgZG9uJ3QgY2xhaW0gdG8K
LSAgICAgICAgICAgICAgICAvLyBjbG9iYmVyIHNjcmF0Y2guCi0gICAgICAgICAgICAgICAgQWxs
b3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2
ZXNCdWZmZXIoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LnZtKCkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwotICAgICAgICAgICAg
ICAgIGppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNh
bGwoKTsKLSAgICAgICAgICAgICAgICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOwotCi0g
ICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICBbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubGluayhjYWxsLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNh
bGxlckZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2hhbmRsZUV4Y2VwdGlvbnMsIGNoZWNrQXJndW1lbnRzKTsKLSAgICAgICAgQm94PEND
YWxsSGVscGVyczo6TGFiZWw+IGV4Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFu
ZGxlcjsKLSAgICAgICAgbV9vdXQucGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAotICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9u
UGFyYW1zJikgewotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaml0
Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbGlua0J1ZmZlci5saW5rKGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZXhjZXB0
aW9uSGFuZGxlcikpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwot
ICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY2hlY2tBcmd1bWVudHMsIGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKLSAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkuY2xlYXIoKTsKLSAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMgPSBPcGVyYW5kczxBdmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCksIDApOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFy
YW1ldGVycygpOyBpLS07KSB7Ci0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5hcmd1bWVudChpKSA9Ci0gICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChG
bHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKLSAgICAgICAg
fQotICAgICAgICBtX25vZGUgPSBudWxscHRyOwotICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmln
aW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRzW2ldOwotICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRk
cmVzc0ZvcihvcGVyYW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChub2RlKSB7
Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5tYWNoaW5lTG9jYWwpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUg
b25lLiBJdCBhbGxvd3MgdXMgdG8gZG8gQ1NFIG9uIHRoZQotICAgICAgICAgICAgICAgIC8vIHBy
aW1vcmRpYWwgbG9hZCBvZiBhcmd1bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2Nh
bCB0aGF0IGdvdCBwdXQgaW4KLSAgICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2lu
YWwgU2V0QXJndW1lbnQgZG9lc24ndCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcwot
ICAgICAgICAgICAgICAgIC8vIHNob3VsZCBob2xkIHRydWUuCi0gICAgICAgICAgICAgICAgbV9s
b2FkZWRBcmd1bWVudFZhbHVlcy5hZGQobm9kZSwganNWYWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0
c1tpXSkgewotICAgICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZs
dXNoZWRCb29sZWFuOgotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90
Q2VsbChqc1ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IEZsdXNoZWRKU1ZhbHVlOgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVz
aCBmb3JtYXQgZm9yIGFyZ3VtZW50Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJs
b2NrKDApKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKERGRzo6QmFzaWNCbG9jayogYmxvY2sg
OiBwcmVPcmRlcikKLSAgICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9jayk7Ci0KLSAgICAgICAg
Ly8gV2UgY3JlYXRlIGFsbCBQaGkncyB1cCBmcm9udCwgYnV0IHdlIG1heSB0aGVuIGRlY2lkZSBu
b3QgdG8gY29tcGlsZSB0aGUgYmFzaWMgYmxvY2sKLSAgICAgICAgLy8gdGhhdCB3b3VsZCBoYXZl
IGNvbnRhaW5lZCBvbmUgb2YgdGhlbS4gU28gdGhpcyBjcmVhdGVzIG9ycGhhbnMsIHdoaWNoIHRy
aWdnZXJzIEIzCi0gICAgICAgIC8vIHZhbGlkYXRpb24gZmFpbHVyZXMuIENhbGxpbmcgdGhpcyBm
aXhlcyB0aGUgaXNzdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIE5vdGUgdGhhdCB5b3Ugc2hv
dWxkIGF2b2lkIHRoZSB0ZW1wdGF0aW9uIHRvIG1ha2UgdGhpcyBjYWxsIGNvbmRpdGlvbmFsIHVw
b24KLSAgICAgICAgLy8gdmFsaWRhdGlvbiBiZWluZyBlbmFibGVkLiBCMyBtYWtlcyBubyBndWFy
YW50ZWVzIG9mIGFueSBraW5kIG9mIGNvcnJlY3RuZXNzIHdoZW4KLSAgICAgICAgLy8gZGVhbGlu
ZyB3aXRoIElSIHRoYXQgd291bGQgaGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4gRm9yIGV4YW1wbGUs
IGl0IHdvdWxkIGJlIHZhbGlkIHRvCi0gICAgICAgIC8vIHdyaXRlIGEgQjMgcGhhc2UgdGhhdCBz
byBhZ2dyZXNzaXZlbHkgYXNzdW1lcyB0aGUgbGFjayBvZiBvcnBoYW5zIHRoYXQgaXQgd291bGQg
Y3Jhc2gKLSAgICAgICAgLy8gaWYgYW55IG9ycGhhbnMgd2VyZSBhcm91bmQuIFdlIG1pZ2h0IGV2
ZW4gaGF2ZSBzdWNoIHBoYXNlcyBhbHJlYWR5LgotICAgICAgICBtX3Byb2MuZGVsZXRlT3JwaGFu
cygpOwotCi0gICAgICAgIC8vIFdlIHB1dCB0aGUgYmxvY2tzIGludG8gdGhlIEIzIHByb2NlZHVy
ZSBpbiBhIHN1cGVyIHdlaXJkIG9yZGVyLiBOb3cgd2UgcmVvcmRlciB0aGVtLgotICAgICAgICBt
X291dC5hcHBseUJsb2NrT3JkZXIoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgCi0gICAgdm9p
ZCBjcmVhdGVQaGlWYXJpYWJsZXMoKQotICAgIHsKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
ICAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsK
LSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRl
eC0tOykgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBERkc6OlBoaSkKLSAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKLSAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgewotICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdERvdWJsZToKLSAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IG1fb3V0LmRvdWJsZVR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50MzI7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDUyOgotICAgICAgICAgICAgICAgICAgICB0eXBlID0g
bV9vdXQuaW50NjQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgTm9kZVJlc3VsdEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291
dC5ib29sZWFuOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBj
YXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9k
ZSByZXN1bHQgdHlwZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV9waGlzLmFkZChub2RlLCBtX3Byb2MuYWRkPFZhbHVl
PihCMzo6UGhpLCB0eXBlLCBPcmlnaW4obm9kZSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCbG9jayhERkc6OkJhc2ljQmxvY2sqIGJs
b2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAg
ICAgICBkYXRhTG9nKCJDb21waWxpbmcgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKLSAgICAgICAg
Ci0gICAgICAgIG1faGlnaEJsb2NrID0gYmxvY2s7Ci0gICAgICAgIAotICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCBhbnkgYmxvY2tzIGNyZWF0ZWQgd2hpbGUgbG93ZXJpbmcgY29kZSBpbiB0aGUg
aGlnaCBibG9jayBoYXZlIHRoZSBmcmVxdWVuY3kgb2YKLSAgICAgICAgLy8gdGhlIGhpZ2ggYmxv
Y2suIFRoaXMgaXMgYXBwcm9wcmlhdGUgYmVjYXVzZSBCMyBkb2Vzbid0IG5lZWQgcHJlY2lzZSBm
cmVxdWVuY2llcy4gSXQganVzdCBuZWVkcwotICAgICAgICAvLyBzb21ldGhpbmcgcm91Z2hseSBh
cHByb3hpbWF0ZSBmb3IgdGhpbmdzIGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KLSAgICAgICAg
bV9vdXQuc2V0RnJlcXVlbmN5KG1faGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9j
ayk7Ci0gICAgICAgIAotICAgICAgICBtX25leHRIaWdoQmxvY2sgPSAwOwotICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0
QmxvY2tJbmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKLSAg
ICAgICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgp
OwotICAgICAgICAgICAgaWYgKG1fbmV4dEhpZ2hCbG9jaykKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBtX25leHRMb3dCbG9jayA9IG1fbmV4dEhpZ2hCbG9jayA/
IG1fYmxvY2tzLmdldChtX25leHRIaWdoQmxvY2spIDogMDsKLSAgICAgICAgCi0gICAgICAgIC8v
IEFsbCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBh
YmlsaXR5IHRvIGtlZXAgdGhlCi0gICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHBy
b2dyYW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKLSAgICAg
ICAgLy8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9y
ZGVyIHRoaW5ncykgYnV0IGl0IHdpbGwKLSAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIg
dG8gcmVhZC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2Nr
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpmdGxDcmFzaGVzKCkpCi0gICAgICAg
ICAgICBtX291dC50cmFwKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5j
ZmFIYXNWaXNpdGVkKSB7Ci0gICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcgYmVjYXVzZSBDRkEgZGlkbid0
IHJlYWNoLlxuIik7Ci0gICAgICAgICAgICBjcmFzaChtX2hpZ2hCbG9jay0+aW5kZXgsIFVJTlRf
TUFYKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
bV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLmJlZ2luQmxvY2sobV9oaWdoQmxvY2spOwotICAgICAg
ICAKLSAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwotICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNC
bG9jayhtX2hpZ2hCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKG1fbm9kZUluZGV4ID0g
MDsgbV9ub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUluZGV4KSB7Ci0g
ICAgICAgICAgICBpZiAoIWNvbXBpbGVOb2RlKG1fbm9kZUluZGV4KSkKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgc2FmZWx5SW52YWxpZGF0ZUFm
dGVyVGVybWluYXRpb24oKQotICAgIHsKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkJhaWxpbmcuXG4iKTsKLSAgICAgICAgY3Jh
c2goKTsKLQotICAgICAgICAvLyBJbnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVuZGVyIG5v
cm1hbCBjaXJjdW1zdGFuY2VzIHdlIHdvdWxkIGV4cGVjdAotICAgICAgICAvLyB0aGVtIHRvIGJl
IGludmFsaWRhdGVkIGFscmVhZHkuIEJ1dCB5b3UgY2FuIGhhdmUgdGhlIENGQSBiZWNvbWUgbW9y
ZQotICAgICAgICAvLyBwcmVjaXNlIG92ZXIgdGltZSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIG9m
IG9iamVjdHMgY2hhbmdlIG9uIHRoZSBtYWluCi0gICAgICAgIC8vIHRocmVhZC4gRmFpbGluZyB0
byBkbyB0aGlzIHdvdWxkIHJlc3VsdCBpbiB3ZWlyZCBjcmFzaGVzIGR1ZSB0byBhIHZhbHVlCi0g
ICAgICAgIC8vIGJlaW5nIHVzZWQgYnV0IG5vdCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRX
IQotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tz
KCk7IGJsb2NrSW5kZXgtLTspIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogdGFyZ2V0
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgIGlmICghdGFyZ2V0KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21p
bmF0b3JzLT5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJCbG9jayAiLCAqdGFyZ2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7Ci0gICAgICAg
ICAgICAgICAgdGFyZ2V0LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAg
IHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2Nr
LT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX29yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOwotICAg
ICAgICBtX291dC5zZXRPcmlnaW4obV9ub2RlKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAi
LCBtX25vZGUsICJcbiIpOwotICAgICAgICAKLSAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVz
LnJlc2l6ZSgwKTsKLSAgICAgICAgCi0gICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcoKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7Ci0gICAgICAg
IGNhc2UgREZHOjpVcHNpbG9uOgotICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6UGhpOgotICAgICAgICAgICAgY29tcGls
ZVBoaSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAg
ICAgY29tcGlsZURvdWJsZUNvbnN0YW50KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERvdWJsZVJlcDoKLSAgICAgICAgICAg
IGNvbXBpbGVEb3VibGVSZXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERv
dWJsZUFzSW50MzI6Ci0gICAgICAgICAgICBjb21waWxlRG91YmxlQXNJbnQzMigpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpWYWx1ZVJlcDoKLSAgICAgICAgICAgIGNv
bXBpbGVWYWx1ZVJlcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50NTJS
ZXA6Ci0gICAgICAgICAgICBjb21waWxlSW50NTJSZXAoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKLSAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVRvSW50
MzIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoK
LSAgICAgICAgICAgIGNvbXBpbGVCb29sZWFuVG9OdW1iZXIoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgotICAgICAgICAgICAgY29tcGls
ZUV4dHJhY3RPU1JFbnRyeUxvY2FsKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRTdGFjazoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRTdGFjaygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0U3RhY2s6Ci0gICAgICAgICAgICBjb21waWxlUHV0U3Rh
Y2soKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6Q2hlY2s6Ci0gICAg
ICAgICAgICBjb21waWxlTm9PcCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VG9UaGlzOgotICAgICAgICAgICAgY29tcGlsZVRvVGhpcygpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVmFsdWVBZGQ6Ci0gICAgICAgICAgICBjb21waWxlVmFsdWVBZGQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0ckNhdDoKLSAgICAgICAgICAgIGNv
bXBpbGVTdHJDYXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQWRk
OgotICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoQWRkT3JT
dWIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQ2x6MzI6Ci0gICAg
ICAgICAgICBjb21waWxlQXJpdGhDbHozMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhNdWwoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoRGl2OgotICAgICAgICAgICAgY29tcGlsZUFy
aXRoRGl2KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE1vZDoKLSAg
ICAgICAgICAgIGNvbXBpbGVBcml0aE1vZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJpdGhNaW46Ci0gICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgICAgICBjb21w
aWxlQXJpdGhNaW5Pck1heCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJp
dGhBYnM6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhBYnMoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFyaXRoU2luOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoU2luKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aENvczoKLSAgICAgICAgICAg
IGNvbXBpbGVBcml0aENvcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJp
dGhQb3c6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhQb3coKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEFyaXRoUmFuZG9tOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoUmFu
ZG9tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aFJvdW5kOgotICAg
ICAgICAgICAgY29tcGlsZUFyaXRoUm91bmQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFyaXRoU3FydDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoTG9nOgotICAgICAgICAgICAgY29tcGls
ZUFyaXRoTG9nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aEZSb3Vu
ZDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aEZSb3VuZCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQXJpdGhOZWdhdGU6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhOZWdh
dGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6Qml0QW5kOgotICAg
ICAgICAgICAgY29tcGlsZUJpdEFuZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgREZHOjpCaXRPcjoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRPcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpCaXRYb3I6Ci0gICAgICAgICAgICBjb21waWxlQml0
WG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRSU2hpZnQ6Ci0gICAg
ICAgICAgICBjb21waWxlQml0UlNoaWZ0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBCaXRMU2hpZnQ6Ci0gICAgICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICAgICAgY29tcGls
ZUJpdFVSU2hpZnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVJbnQzMlRv
TnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hl
Y2tDZWxsOgotICAgICAgICAgICAgY29tcGlsZUNoZWNrQ2VsbCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tOb3RFbXB0eToKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a05vdEVtcHR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0JhZENl
bGw6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tCYWRDZWxsKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDaGVja0lkZW50OgotICAgICAgICAgICAgY29tcGlsZUNoZWNrSWRl
bnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEV4ZWN1dGFibGU6Ci0g
ICAgICAgICAgICBjb21waWxlR2V0RXhlY3V0YWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBpbGVBcnJh
eWlmeVRvU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6Ci0gICAgICAgICAgICBjb21waWxlUHV0U3RydWN0dXJlKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRCeUlkOgotICAgICAgICBjYXNlIEdldEJ5SWRGbHVz
aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeUlkKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbjoKLSAgICAgICAgICAgIGNvbXBpbGVJbigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0Ogot
ICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeUlkKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgotICAgICAg
ICBjYXNlIFB1dFNldHRlckJ5SWQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0QWNjZXNzb3JCeUlk
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlk
OgotICAgICAgICAgICAgY29tcGlsZVB1dEdldHRlclNldHRlckJ5SWQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFB1dEdldHRlckJ5VmFsOgotICAgICAgICBjYXNlIFB1dFNl
dHRlckJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCdXR0ZXJmbHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseVJlYWRPbmx5OgotICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRP
bmx5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQ
b2ludGVyOgotICAgICAgICAgICAgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6
Ci0gICAgICAgICAgICBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tBcnJheToKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja0FycmF5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKLSAgICAgICAgICAgIGNvbXBp
bGVDaGVja0luQm91bmRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRC
eVZhbDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZUdl
dE15QXJndW1lbnRCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0
QnlWYWw6Ci0gICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICAgICAgY2FzZSBQdXRCeVZh
bERpcmVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQXJyYXlQdXNoOgotICAgICAgICAgICAgY29tcGlsZUFycmF5UHVz
aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXlQb3A6Ci0gICAgICAg
ICAgICBjb21waWxlQXJyYXlQb3AoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3RnVuY3Rpb246Ci0gICAgICAg
IGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBOZXdHZW5lcmF0b3JGdW5jdGlv
bjoKLSAgICAgICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ3JlYXRlQ2xv
bmVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3T2JqZWN0OgotICAgICAgICAg
ICAgY29tcGlsZU5ld09iamVjdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TmV3QXJyYXk6Ci0gICAgICAgICAgICBjb21waWxlTmV3QXJyYXkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgY29tcGlsZU5l
d0FycmF5QnVmZmVyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdBcnJh
eVdpdGhTaXplOgotICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6Ci0gICAgICAgICAgICBj
b21waWxlTmV3VHlwZWRBcnJheSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgotICAgICAgICAgICAgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlOgotICAgICAgICAgICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvU3RyaW5nOgotICAgICAgICBj
YXNlIENhbGxTdHJpbmdDb25zdHJ1Y3RvcjoKLSAgICAgICAgICAgIGNvbXBpbGVUb1N0cmluZ09y
Q2FsbFN0cmluZ0NvbnN0cnVjdG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBUb1ByaW1pdGl2ZToKLSAgICAgICAgICAgIGNvbXBpbGVUb1ByaW1pdGl2ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWFrZVJvcGU6Ci0gICAgICAgICAgICBjb21waWxl
TWFrZVJvcGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6Ci0gICAgICAgICAgICBjb21waWxlU3Ry
aW5nQ2hhckNvZGVBdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5n
RnJvbUNoYXJDb2RlOgotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6Ci0gICAgICAgIGNh
c2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlPZmZz
ZXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEdldHRlcjoKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRHZXR0ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdldFNldHRlcjoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBj
b21waWxlTXVsdGlHZXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0QnlPZmZzZXQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6Ci0gICAgICAgICAg
ICBjb21waWxlTXVsdGlQdXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR2V0R2xvYmFsVmFyOgotICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJs
ZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRHbG9iYWxWYXJpYWJsZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyaWFibGU6Ci0gICAgICAgICAgICBjb21w
aWxlUHV0R2xvYmFsVmFyaWFibGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IE5vdGlmeVdyaXRlOgotICAgICAgICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRDYWxsZWU6Ci0gICAgICAgICAgICBjb21waWxl
R2V0Q2FsbGVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRBcmd1bWVu
dENvdW50OgotICAgICAgICAgICAgY29tcGlsZUdldEFyZ3VtZW50Q291bnQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldFNjb3BlOgotICAgICAgICAgICAgY29tcGlsZUdl
dFNjb3BlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTa2lwU2NvcGU6Ci0g
ICAgICAgICAgICBjb21waWxlU2tpcFNjb3BlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBHZXRDbG9zdXJlVmFyOgotICAgICAgICAgICAgY29tcGlsZUdldENsb3N1cmVWYXIo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6Ci0gICAg
ICAgICAgICBjb21waWxlUHV0Q2xvc3VyZVZhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRGcm9tQXJn
dW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRUb0FyZ3VtZW50cygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZUVxOgotICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVF
cSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgot
ICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVTdHJpY3RFcSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUxl
c3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0g
ICAgICAgICAgICBjb21waWxlQ29tcGFyZUxlc3NFcSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUdy
ZWF0ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVy
RXE6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZUdyZWF0ZXJFcSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTG9naWNhbE5vdDoKLSAgICAgICAgICAgIGNvbXBpbGVMb2dp
Y2FsTm90KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsOgotICAgICAg
ICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0g
ICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBUYWlsQ2FsbDoKLSAgICAgICAgICAgIGNvbXBpbGVUYWlsQ2FsbCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAg
ICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgotICAgICAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKLSAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JD
b25zdHJ1Y3RWYXJhcmdzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKLSAgICAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncygpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAgICBjb21waWxl
Rm9yd2FyZFZhcmFyZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6
SnVtcDoKLSAgICAgICAgICAgIGNvbXBpbGVKdW1wKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBERkc6OkJyYW5jaDoKLSAgICAgICAgICAgIGNvbXBpbGVCcmFuY2goKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6U3dpdGNoOgotICAgICAgICAgICAg
Y29tcGlsZVN3aXRjaCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpS
ZXR1cm46Ci0gICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Ci0gICAgICAgICAgICBjb21waWxlRm9yY2VPU1JF
eGl0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUaHJvdzoKLSAgICAgICAg
Y2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgotICAgICAgICAgICAgY29tcGlsZVRocm93KCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKLSAgICAg
ICAgICAgIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6Ci0gICAgICAgICAgICBjb21waWxlSXNVbmRlZmluZWQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzQm9vbGVhbjoKLSAgICAgICAg
ICAgIGNvbXBpbGVJc0Jvb2xlYW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElzTnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZUlzTnVtYmVyKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJc1N0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVJc1N0cmlu
ZygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSXNPYmplY3Q6Ci0gICAgICAg
ICAgICBjb21waWxlSXNPYmplY3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IElzT2JqZWN0T3JOdWxsOgotICAgICAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJc0Z1bmN0aW9uOgotICAgICAgICAgICAg
Y29tcGlsZUlzRnVuY3Rpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFR5
cGVPZjoKLSAgICAgICAgICAgIGNvbXBpbGVUeXBlT2YoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENoZWNrVHlwZUluZm9GbGFnczoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a1R5cGVJbmZvRmxhZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE92ZXJy
aWRlc0hhc0luc3RhbmNlOgotICAgICAgICAgICAgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgotICAgICAg
ICAgICAgY29tcGlsZUluc3RhbmNlT2YoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEluc3RhbmNlT2ZDdXN0b206Ci0gICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZkN1c3Rv
bSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246Ci0g
ICAgICAgICAgICBjb21waWxlQ291bnRFeGVjdXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKLSAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJp
ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0
eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEhhc0dlbmVyaWNQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNHZW5lcmljUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEhhc1N0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6Ci0gICAgICAgICAgICBjb21waWxlR2V0UHJvcGVy
dHlFbnVtZXJhdG9yKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVt
ZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5l
cmljUG5hbWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJp
bmc6Ci0gICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6Ci0gICAgICAgICAgICBj
b21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgotICAgICAgICAgICAgY29tcGlsZU1hdGVy
aWFsaXplTmV3T2JqZWN0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNYXRl
cmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246Ci0gICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVD
cmVhdGVBY3RpdmF0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVj
a1dhdGNoZG9nVGltZXI6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5UmVzdDoKLSAgICAgICAgICAg
IGNvbXBpbGVDb3B5UmVzdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0
UmVzdExlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICAgICAgY2FzZSBM
b29wSGludDoKLSAgICAgICAgY2FzZSBNb3ZIaW50OgotICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
Ci0gICAgICAgIGNhc2UgRXhpdE9LOgotICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6Ci0g
ICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21OZXdH
ZW5lcmF0b3JGdW5jdGlvbjoKLSAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoK
LSAgICAgICAgY2FzZSBQaGFudG9tRGlyZWN0QXJndW1lbnRzOgotICAgICAgICBjYXNlIFBoYW50
b21DbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgUHV0SGludDoKLSAgICAgICAgY2FzZSBC
b3R0b21WYWx1ZToKLSAgICAgICAgY2FzZSBLaWxsU3RhY2s6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzVGVybWluYWwoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9zdGF0
ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0
aW9uKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKLSAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlRWZmZWN0cyhub2RlSW5kZXgpOwotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlVXBzaWxvbigpCi0gICAgewot
ICAgICAgICBMVmFsdWUgdXBzaWxvblZhbHVlID0gbnVsbHB0cjsKLSAgICAgICAgc3dpdGNoICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToK
LSAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDMyVXNlOgotICAgICAgICBjYXNl
IEtub3duSW50MzJVc2U6Ci0gICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludDUyUmVw
VXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBCb29sZWFuVXNlOgotICAgICAg
ICBjYXNlIEtub3duQm9vbGVhblVzZToKLSAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0Jv
b2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDZWxsVXNlOgotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgICAgIHVwc2ls
b25WYWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Ug
a2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgdXBzaWxvbiA9IG1fb3V0LmFuY2hvcih1cHNpbG9uVmFsdWUpOwotICAgICAgICBMVmFs
dWUgcGhpTm9kZSA9IG1fcGhpcy5nZXQobV9ub2RlLT5waGkoKSk7Ci0gICAgICAgIG1fb3V0LmFk
ZEluY29taW5nVG9QaGkocGhpTm9kZSwgdXBzaWxvbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVBoaSgpCi0gICAgewotICAgICAgICBMVmFsdWUgcGhpID0gbV9waGlzLmdldChtX25v
ZGUpOwotICAgICAgICBtX291dC5tX2Jsb2NrLT5hcHBlbmQocGhpKTsKLQotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVSZXN1bHRNYXNrKSB7Ci0gICAgICAgIGNhc2UgTm9k
ZVJlc3VsdERvdWJsZToKLSAgICAgICAgICAgIHNldERvdWJsZShwaGkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJlc3VsdEludDMyOgotICAgICAgICAgICAgc2V0SW50
MzIocGhpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1
MjoKLSAgICAgICAgICAgIHNldEludDUyKHBoaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgIHNldEJvb2xlYW4ocGhpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKLSAgICAgICAg
ICAgIHNldEpTVmFsdWUocGhpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlRG91YmxlQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNv
bnN0RG91YmxlKG1fbm9kZS0+YXNOdW1iZXIoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVJbnQ1MkNvbnN0YW50KCkKLSAgICB7Ci0gICAgICAgIGludDY0X3QgdmFsdWUgPSBtX25v
ZGUtPmFzTWFjaGluZUludCgpOwotICAgICAgICAKLSAgICAgICAgc2V0SW50NTIobV9vdXQuY29u
c3RJbnQ2NCh2YWx1ZSA8PCBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7Ci0gICAgICAgIHNl
dFN0cmljdEludDUyKG1fb3V0LmNvbnN0SW50NjQodmFsdWUpKTsKLSAgICB9Ci0KLSAgICB2b2lk
IGNvbXBpbGVEb3VibGVSZXAoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGRvdWJs
ZVZhbHVlID0gdW5ib3hEb3VibGUodmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgUmVh
bE51bWJlclVzZSBpbnQgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlUmVwIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwK
LSAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwg
bV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwKLSAgICAgICAgICAgICAg
ICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNG
dWxsRG91YmxlKSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgTm90Q2VsbFVzZToKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6
IHsKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udmVydE5vbk51bWJlciA9IG1fbm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IE5vdENlbGxVc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVl
VG9Eb3VibGUgdW5ib3hpbmcgZG91YmxlIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBub25Eb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUg
dGVzdGluZyB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5n
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShkb3VibGVUZXN0aW5nKSwgdW5zdXJl
KGludENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICAgICAgbV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2YWx1ZSkpKTsK
LSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7Ci0gICAg
ICAgICAgICBMVmFsdWUgdmFsdWVJc051bWJlciA9IGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBl
KG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVt
YmVyLCB1c3VhbGx5KGRvdWJsZUNhc2UpLCByYXJlbHkobm9uRG91YmxlQ2FzZSkpOwotCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBub25Eb3VibGVDYXNlKTsKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hE
b3VibGUodmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgaWYgKHNob3VsZENvbnZlcnROb25OdW1iZXIpIHsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1Zh
bHVlVG9Eb3VibGUgY29udmVydGluZyB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayB0ZXN0TnVsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFs
dWVUb0RvdWJsZSB0ZXN0aW5nIG51bGwgY2FzZSIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBudWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNv
bnZlcnRpbmcgbnVsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3RC
b29sZWFuVHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0
ZXN0aW5nIGJvb2xlYW4gdHJ1ZSBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gdHJ1ZSBjYXNlIikpOwotICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7Ci0KLSAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25Eb3VibGVDYXNlLCB1bmRlZmluZWRDYXNlKTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc1VuZGVmaW5lZCA9IG1fb3V0LmVxdWFsKHZh
bHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKHZhbHVlSXNVbmRlZmluZWQsIHVuc3VyZSh1bmRlZmluZWRDYXNlKSwgdW5z
dXJlKHRlc3ROdWxsQ2FzZSkpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5k
ZWZpbmVkQ2FzZSwgdGVzdE51bGxDYXNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb252ZXJ0ZWRVbmRlZmluZWQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5h
TikpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHRlc3ROdWxsQ2FzZSwgbnVsbENhc2UpOwotICAgICAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5j
b25zdEludDY0KFZhbHVlTnVsbCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1
ZUlzTnVsbCwgdW5zdXJlKG51bGxDYXNlKSwgdW5zdXJlKHRlc3RCb29sZWFuVHJ1ZUNhc2UpKTsK
LQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRy
dWVDYXNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWROdWxsID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDApKTsKLSAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0
ZXN0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9vbGVhblRydWVDYXNlKTsKLSAgICAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWVJc0Jvb2xlYW5UcnVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVmFsdWVUcnVlKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZh
bHVlSXNCb29sZWFuVHJ1ZSwgdW5zdXJlKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUo
Y29udmVydEJvb2xlYW5GYWxzZUNhc2UpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UsIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKTsKLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRUcnVlID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVh
bkZhbHNlQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZUlzTm90Qm9vbGVhbkZhbHNlID0gbV9vdXQubm90RXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50
NjQoVmFsdWVGYWxzZSkpOwotICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwgdmFsdWVJc05vdEJvb2xl
YW5GYWxzZSk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2Ug
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwotICAgICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZl
cnRlZFVuZGVmaW5lZCwgY29udmVydGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFs
c2UpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhub25Eb3VibGVDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwg
U3BlY0J5dGVjb2RlTnVtYmVyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICBtX291
dC51bnJlYWNoYWJsZSgpOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLQotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5k
b3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5ib3hlZERvdWJsZSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTog
ewotICAgICAgICAgICAgc2V0RG91YmxlKHN0cmljdEludDUyVG9Eb3VibGUobG93U3RyaWN0SW50
NTIobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGNvbXBpbGVEb3VibGVBc0ludDMyKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2Vy
VmFsdWUgPSBjb252ZXJ0RG91YmxlVG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKTsKLSAgICAgICAg
c2V0SW50MzIoaW50ZWdlclZhbHVlKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVWYWx1ZVJl
cCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVj
RG91YmxlSW1wdXJlTmFOKSkgewotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9vdXQuc2VsZWN0
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbCh2YWx1ZSwgdmFsdWUpLCB2
YWx1ZSwgbV9vdXQuY29uc3REb3VibGUoUE5hTikpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKGJveERvdWJsZSh2YWx1ZSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogewotICAgICAgICAgICAgc2V0SlNWYWx1ZShzdHJpY3RJbnQ1MlRvSlNWYWx1ZShsb3dT
dHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVJbnQ1MlJlcCgpCi0gICAgewotICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6Ci0g
ICAgICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX291dC5zaWduRXh0MzJUbzY0KGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgotICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIoCi0g
ICAgICAgICAgICAgICAganNWYWx1ZVRvU3RyaWN0SW50NTIoCi0gICAgICAgICAgICAgICAgICAg
IG1fbm9kZS0+Y2hpbGQxKCksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgRG91YmxlUmVwTWFjaGluZUludFVzZToKLSAgICAgICAgICAgIHNldFN0cmlj
dEludDUyKAotICAgICAgICAgICAgICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoCi0gICAgICAgICAg
ICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVZhbHVlVG9JbnQzMigpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50NTJS
ZXBVc2U6Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJ
bnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICBzZXRJbnQzMihkb3Vi
bGVUb0ludDMyKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0gICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZTogewotICAgICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50
MzJWYWx1ZXMuZ2V0KG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIHNldEludDMyKHZhbHVlLnZhbHVlKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgc2V0SW50MzIobnVtYmVyT3JOb3RDZWxsVG9JbnQzMihtX25vZGUtPmNoaWxkMSgpLCB2YWx1
ZS52YWx1ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlJ2xsIGJhc2ljYWxseSBqdXN0IGdldCBoZXJlIGZv
ciBjb25zdGFudHMuIEJ1dCBpdCdzIGdvb2QgdG8gaGF2ZSB0aGlzCi0gICAgICAgICAgICAvLyBj
YXRjaC1hbGwgc2luY2Ugd2Ugb2Z0ZW4gYWRkIG5ldyByZXByZXNlbnRhdGlvbnMgaW50byB0aGUg
bWl4LgotICAgICAgICAgICAgc2V0SW50MzIoCi0gICAgICAgICAgICAgICAgbnVtYmVyT3JOb3RD
ZWxsVG9JbnQzMigKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwKLSAgICAg
ICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCb29sZWFuVG9OdW1iZXIoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6IHsKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0Lnplcm9FeHQobG93Qm9vbGVh
bihtX25vZGUtPmNoaWxkMSgpKSwgbV9vdXQuaW50MzIpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNr
KG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNCb29sSW50MzIgfCBTcGVjQm9vbGVhbikpIHsKLSAgICAg
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobV9vdXQuY2FzdFRvSW50MzIodmFsdWUp
LCBtX291dC5pbnQzMk9uZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xlYW5Ub051bWJlciBib29sZWFuIGNhc2UiKSk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xlYW5Ub051bWJlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdEJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IodmFs
dWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQm9vbGVh
bih2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAg
dW5zdXJlKGJvb2xlYW5DYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGJvb2xl
YW5DYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYm9vbGVh
blJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5iaXRPcigKLSAgICAgICAgICAgICAgICBtX291
dC56ZXJvRXh0KHVuYm94Qm9vbGVhbih2YWx1ZSksIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVt
YmVyKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGJvb2xlYW5SZXN1
bHQsIG5vdEJvb2xlYW5SZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdm9pZCBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKQotICAgIHsKLSAgICAgICAg
RW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCi0g
ICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVm
ZmVyKCktPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKGJ1ZmZlciArIG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQotICAgIHsKLSAgICAg
ICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgYXJn
dW1lbnRzLiBGb3IgYXJndW1lbnRzLCB3ZSBtaWdodCBoYXZlCi0gICAgICAgIC8vIGFscmVhZHkg
bG9hZGVkIGl0LgotICAgICAgICBpZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRBcmd1bWVudFZh
bHVlcy5nZXQobV9ub2RlKSkgewotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1ZSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsK
LSAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRl
KGRhdGEtPmZvcm1hdCkpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0
YS0+Zm9ybWF0ICE9IEZsdXNoZWREb3VibGUpOyAvLyBUaGlzIGp1c3QgaGFwcGVucyB0byBub3Qg
YXJpc2UgZm9yIEdldFN0YWNrcywgcmlnaHQgbm93LiBJdCB3b3VsZCBiZSB0cml2aWFsIHRvIHN1
cHBvcnQuCi0gICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSkpCi0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihkYXRh
LT5tYWNoaW5lTG9jYWwpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQubG9hZDY0KGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVQdXRTdGFjaygpCi0gICAgewotICAgICAgICBTdGFja0FjY2Vz
c0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOwotICAgICAgICBzd2l0Y2gg
KGRhdGEtPmZvcm1hdCkgewotICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7Ci0gICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBGbHVzaGVkRG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1
ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKLSAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9j
YWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBGbHVzaGVkSW50NTI6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwg
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogewotICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgRmx1c2hlZEJvb2xlYW46IHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwK
LSAgICAgICAgICAgICAgICBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZU5vT3AoKQotICAgIHsKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9n
cmFwaCwgbV9ub2RlLCBzcGVjdWxhdGUpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVU
b1RoaXMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvVGhpcyBpcyBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgc2xvdyBj
YXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlRvVGhpcyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLCB1c3VhbGx5KGlzQ2VsbENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxs
Q2FzZSwgc2xvd0Nhc2UpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzVHlwZSh2YWx1ZSwgRmlu
YWxPYmplY3RUeXBlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSiBmdW5jdGlvbjsKLSAgICAgICAgaWYgKG1fZ3Jh
cGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAg
IGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzU3RyaWN0OwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvblRvVGhpczsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2
NCwgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZCgpCi0gICAgewotICAgICAgICBlbWl0QmluYXJ5U25p
cHBldDxKSVRBZGRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQWRkKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlU3RyQ2F0KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0g
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSB2bUNh
bGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25TdHJDYXQzKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwK
LSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0g
dm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uU3RyQ2F0MiksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKLSAgICAgICAgICAg
ICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bikpOwotICAgICAgICB9Ci0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlQXJpdGhBZGRPclN1YigpCi0gICAgewotICAgICAgICBib29sIGlz
U3ViID0gIG1fbm9kZS0+b3AoKSA9PSBBcml0aFN1YjsKLSAgICAgICAgc3dpdGNoIChtX25vZGUt
PmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgICAg
IGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewotICAgICAg
ICAgICAgICAgIHNldEludDMyKGlzU3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0
LmFkZChsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBDaGVja1ZhbHVlKiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGlz
U3ViID8gbV9vdXQuc3BlY3VsYXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFk
ZChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3Zl
cmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc2V0SW50
MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogewotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikKLSAgICAgICAgICAg
ICAgICAmJiAhYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMigpKS5jb3VsZEJlVHlwZShTcGVj
SW50NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICAg
ICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5k
KTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MigpLCBraW5kKTsKLSAgICAgICAgICAgICAgICBzZXRJbnQ1Mihpc1N1YiA/IG1fb3V0LnN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5hZGQobGVmdCwgcmlnaHQpLCBraW5kKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBs
b3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxv
d0ludDUyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0
ID0KLSAgICAgICAgICAgICAgICBpc1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdo
dCkgOiBtX291dC5zcGVjdWxhdGVBZGQobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgYmxlc3NT
cGVjdWxhdGlvbihyZXN1bHQsIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2lu
KTsKLSAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAg
ICAgICAgICBMVmFsdWUgQzEgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgQzIgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAg
ICAgIHNldERvdWJsZShpc1N1YiA/IG1fb3V0LmRvdWJsZVN1YihDMSwgQzIpIDogbV9vdXQuZG91
YmxlQWRkKEMxLCBDMikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIGlmICghaXNTdWIpIHsKLSAgICAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVtaXRCaW5h
cnlTbmlwcGV0PEpJVFN1YkdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVTdWIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aENsejMyKCkKLSAg
ICB7Ci0gICAgICAgIExWYWx1ZSBvcGVyYW5kID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmN0bHozMihvcGVyYW5kKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAg
ICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotCi0gICAgICAgICAgICBpZiAoIXNob3VsZENo
ZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgIENoZWNrVmFsdWUqIHNwZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQs
IHJpZ2h0KTsKLSAgICAgICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBP
dmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0ID0gc3BlY3VsYXRpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE11bCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJv
KSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0g
ICAgICAgICAgICBJbnQ1MktpbmQga2luZDsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93
V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7Ci0gICAgICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBvcHBvc2l0ZShraW5kKSk7Ci0K
LSAgICAgICAgICAgIENoZWNrVmFsdWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0
LCByaWdodCk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3cs
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwg
c2xvdyBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxw
dHIsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDY0WmVybykpOwotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVz
c1RoYW4ocmlnaHQsIG1fb3V0LmludDY0WmVybykpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERv
dWJsZSgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAg
ICBlbWl0QmluYXJ5U25pcHBldDxKSVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlTXVsKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhE
aXYoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewot
ICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0
b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgaWYgKHNob3Vs
ZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgemVyb051bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhEaXYgemVybyBudW1lcmF0b3IiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVt
ZXJhdG9yQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBudW1l
cmF0b3IgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5pc1plcm8zMihudW1lcmF0b3IpLAotICAgICAgICAg
ICAgICAgICAgICByYXJlbHkoemVyb051bWVyYXRvciksIHVzdWFsbHkobnVtZXJhdG9yQ29udGlu
dWF0aW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oemVyb051bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKLQot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKGRlbm9taW5hdG9yLCBtX291dC5pbnQz
Mlplcm8pKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVh
dGlvbiwgaW5uZXJMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoRGl2IHVuc2FmZSBkZW5vbWluYXRvciIpKTsKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoRGl2IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3Rl
ZERlbm9taW5hdG9yID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAg
ICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7
Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIExWYWx1
ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmlz
WmVybzMyKGRlbm9taW5hdG9yKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEp
KTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZGl2KG51bWVyYXRvciwgZGVub21pbmF0b3Ip
OwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobV9v
dXQubXVsKHJlc3VsdCwgZGVub21pbmF0b3IpLCBudW1lcmF0b3IpKTsKLSAgICAgICAgICAgICAg
ICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
c2V0SW50MzIobV9vdXQuY2hpbGxEaXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikpOwotCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlRGl2KAotICAg
ICAgICAgICAgICAgIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2
R2VuZXJhdG9yLCBOZWVkU2NyYXRjaEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhNb2QoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAg
ICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgTFZhbHVlIHJlbWFpbmRl
cjsKLSAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2Rl
KCkpKSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTW9kIHVuc2FmZSBkZW5vbWluYXRvciIpKTsKLSAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkFyaXRoTW9kIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIExWYWx1
ZSBhZGp1c3RlZERlbm9taW5hdG9yID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQz
Mk9uZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZShhZGp1c3RlZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCi0gICAg
ICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9t
aW5hdG9yKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
ICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVn
MlRvVGhlMzEpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubW9kKG51bWVyYXRvciwgZGVu
b21pbmF0b3IpOwotICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IHJlc3VsdDsKLSAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IG1fb3V0LmNoaWxsTW9kKG51
bWVyYXRvciwgZGVub21pbmF0b3IpOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdh
dGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBuZWdhdGl2ZU51bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2Qg
bmVnYXRpdmUgbnVtZXJhdG9yIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVy
YXRvckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbnVtZXJh
dG9yIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obnVtZXJhdG9yLCBtX291dC5pbnQzMlpl
cm8pLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobmVnYXRpdmVOdW1lcmF0b3IpLCB1bnN1
cmUobnVtZXJhdG9yQ29udGludWF0aW9uKSk7Ci0KLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obmVnYXRpdmVOdW1lcmF0b3IsIG51bWVy
YXRvckNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzMyKHJlbWFpbmRlcikpOwotCi0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChudW1lcmF0b3JDb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0SW50MzIocmVtYWluZGVyKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBE
b3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERvdWJsZSgKLSAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVNb2QobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhNaW5Pck1heCgpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SW50MzIoCi0gICAgICAgICAgICAgICAgbV9v
dXQuc2VsZWN0KAotICAgICAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4K
LSAgICAgICAgICAgICAgICAgICAgICAgID8gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgICAgICA6IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBsZWZ0KSwKLSAg
ICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RMZXNzVGhhbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggbm90IGxlc3MgdGhhbiIpKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJp
dGhNaW4vQXJpdGhNYXggY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihsZWZ0KSk7Ci0gICAgICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCi0g
ICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpCi0g
ICAgICAgICAgICAgICAgICAgIDogbV9vdXQuZG91YmxlR3JlYXRlclRoYW4obGVmdCwgcmlnaHQp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90TGVzc1Ro
YW4pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhub3RMZXNzVGhhbiwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAg
bV9ub2RlLT5vcCgpID09IEFyaXRoTWluCi0gICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91
YmxlR3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KQotICAgICAgICAgICAgICAgICAgICA6
IG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCksCi0gICAgICAgICAgICAg
ICAgcmlnaHQsIG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKSkpOwotICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5waGkobV9vdXQuZG91YmxlVHlwZSwgcmVzdWx0cykpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhBYnMoKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAg
ICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5h
U2hyKHZhbHVlLCBtX291dC5jb25zdEludDMyKDMxKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQuYml0WG9yKG1hc2ssIG1fb3V0LmFkZChtYXNrLCB2YWx1ZSkpOwotCi0gICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1
YWwocmVzdWx0LCBtX291dC5jb25zdEludDMyKDEgPDwgMzEpKSk7Ci0KLSAgICAgICAgICAgIHNl
dEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQuZG91YmxlQWJzKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0
aFNpbigpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVNpbihsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhDb3MoKSB7IHNldERvdWJsZShtX291
dC5kb3VibGVDb3MobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KLQotICAgIHZvaWQg
Y29tcGlsZUFyaXRoUG93KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBs
bHZtLnBvd2kgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3Rlcmlz
dGljcy4KLSAgICAgICAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBs
b29wIGluIERGRyB0b28uCi0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSkKLSAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0RvdWJsZShtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudCA9IGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMigpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50
SXNTbWFsbEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyB0ZXN0IGludGVn
ZXIgZXhwb25lbnQgaXMgc21hbGwuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdl
ckV4cG9uZW50UG93QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhk
b3VibGUsIChpbnQpZG91YmxlKS4iKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVF
eHBvbmVudFBvd0Jsb2NrRW50cnkgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBv
dyhkb3VibGUsIGRvdWJsZSkuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0
aW9uRXhwb25lbnRJc0luZmluaXR5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBO
YU4gRXhjZXB0aW9uLCBjaGVjayBleHBvbmVudCBpcyBpbmZpbml0eS4iKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBuYW5FeGNlcHRpb25CYXNlSXNPbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoUG93IE5hTiBFeGNlcHRpb24sIGNoZWNrIGJhc2UgaXMgb25lLiIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0
aFBvdyByZWd1bGFyIHBvdyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlv
blJlc3VsdElzTmFOID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0
aW9uLCByZXN1bHQgaXMgTmFOLiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgY29udGludWF0aW9uIikpOwot
Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50ID0gbV9vdXQuZG91YmxlVG9JbnQo
ZXhwb25lbnQpOwotICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRv
RG91YmxlID0gbV9vdXQuaW50VG9Eb3VibGUoaW50ZWdlckV4cG9uZW50KTsKLSAgICAgICAgICAg
IExWYWx1ZSBleHBvbmVudElzSW50ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBp
bnRlZ2VyRXhwb25lbnRDb252ZXJ0ZWRUb0RvdWJsZSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goZXhwb25lbnRJc0ludGVnZXIsIHVuc3VyZShpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2sp
LCB1bnN1cmUoZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5KSk7Ci0KLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFs
bEJsb2NrLCBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayk7Ci0gICAgICAgICAgICBMVmFsdWUgaW50
ZWdlckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291
dC5jb25zdEludDMyKDEwMDApKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhw
b25lbnRCZWxvdzEwMDAsIHVzdWFsbHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHko
ZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5KSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGludGVnZXJFeHBvbmVudFBvd0Jsb2NrLCBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkp
OwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93RG91YmxlSW50UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmRvdWJsZVBvd2koYmFzZSwgaW50ZWdlckV4cG9uZW50KSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIC8vIElmIHkgaXMg
TmFOLCB0aGUgcmVzdWx0IGlzIE5hTi4KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJs
ZUV4cG9uZW50UG93QmxvY2tFbnRyeSwgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KTsK
LSAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElzTmFOOwotICAgICAgICAgICAgaWYgKHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDIoKSkgJiBTcGVjRG91YmxlTmFOKQotICAgICAgICAgICAgICAg
IGV4cG9uZW50SXNOYU4gPSBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKGV4cG9uZW50
LCBleHBvbmVudCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXhwb25lbnRJ
c05hTiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChleHBv
bmVudElzTmFOLCByYXJlbHkobmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1c3VhbGx5KG5hbkV4
Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSkpOwotCi0gICAgICAgICAgICAvLyBJZiBhYnMoeCkg
aXMgMSBhbmQgeSBpcyAraW5maW5pdHksIHRoZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAg
Ly8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMgLWluZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4K
LSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0
eSwgbmFuRXhjZXB0aW9uQmFzZUlzT25lKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4
cG9uZW50ID0gbV9vdXQuZG91YmxlQWJzKGV4cG9uZW50KTsKLSAgICAgICAgICAgIExWYWx1ZSBh
YnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlRXhw
b25lbnQsIG1fb3V0LmNvbnN0RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFic29sdXRlRXhwb25lbnRJc0lu
ZmluaXR5LCByYXJlbHkobmFuRXhjZXB0aW9uQmFzZUlzT25lKSwgdXN1YWxseShwb3dCbG9jaykp
OwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25CYXNlSXNPbmUsIHBv
d0Jsb2NrKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVB
YnMoYmFzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5k
b3VibGVFcXVhbChhYnNvbHV0ZUJhc2UsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChhYnNvbHV0ZUJhc2VJc09uZSwgdW5zdXJlKG5hbkV4Y2VwdGlvblJl
c3VsdElzTmFOKSwgdW5zdXJlKHBvd0Jsb2NrKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHBvd0Jsb2NrLCBuYW5FeGNlcHRpb25SZXN1bHRJc05hTik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBwb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93KGJhc2Us
IGV4cG9uZW50KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hv
cihtX291dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBl
LCBwb3dEb3VibGVJbnRSZXN1bHQsIHBvd1Jlc3VsdCwgcHVyZU5hbikpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhSYW5kb20oKQotICAgIHsKLSAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKTsKLQotICAgICAgICAvLyBJbmxpbmVkIFdlYWtSYW5kb206OmFk
dmFuY2UoKS4KLSAgICAgICAgLy8gdWludDY0X3QgeCA9IG1fbG93OwotICAgICAgICB2b2lkKiBs
b3dBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpT
R2xvYmFsT2JqZWN0Ojp3ZWFrUmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpsb3dPZmZzZXQo
KTsKLSAgICAgICAgTFZhbHVlIGxvdyA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShsb3dB
ZGRyZXNzKSk7Ci0gICAgICAgIC8vIHVpbnQ2NF90IHkgPSBtX2hpZ2g7Ci0gICAgICAgIHZvaWQq
IGhpZ2hBZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSAr
IEpTR2xvYmFsT2JqZWN0Ojp3ZWFrUmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpoaWdoT2Zm
c2V0KCk7Ci0gICAgICAgIExWYWx1ZSBoaWdoID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRl
KGhpZ2hBZGRyZXNzKSk7Ci0gICAgICAgIC8vIG1fbG93ID0geTsKLSAgICAgICAgbV9vdXQuc3Rv
cmU2NChoaWdoLCBtX291dC5hYnNvbHV0ZShsb3dBZGRyZXNzKSk7Ci0KLSAgICAgICAgLy8geCBe
PSB4IDw8IDIzOwotICAgICAgICBMVmFsdWUgcGhhc2UxID0gbV9vdXQuYml0WG9yKG1fb3V0LnNo
bChsb3csIG1fb3V0LmNvbnN0SW50NjQoMjMpKSwgbG93KTsKLQotICAgICAgICAvLyB4IF49IHgg
Pj4gMTc7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTIgPSBtX291dC5iaXRYb3IobV9vdXQubFNocihw
aGFzZTEsIG1fb3V0LmNvbnN0SW50NjQoMTcpKSwgcGhhc2UxKTsKLQotICAgICAgICAvLyB4IF49
IHkgXiAoeSA+PiAyNik7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTMgPSBtX291dC5iaXRYb3IobV9v
dXQuYml0WG9yKGhpZ2gsIG1fb3V0LmxTaHIoaGlnaCwgbV9vdXQuY29uc3RJbnQ2NCgyNikpKSwg
cGhhc2UyKTsKLQotICAgICAgICAvLyBtX2hpZ2ggPSB4OwotICAgICAgICBtX291dC5zdG9yZTY0
KHBoYXNlMywgbV9vdXQuYWJzb2x1dGUoaGlnaEFkZHJlc3MpKTsKLQotICAgICAgICAvLyByZXR1
cm4geCArIHk7Ci0gICAgICAgIExWYWx1ZSByYW5kb202NCA9IG1fb3V0LmFkZChwaGFzZTMsIGhp
Z2gpOwotCi0gICAgICAgIC8vIEV4dHJhY3QgcmFuZG9tIDUzYml0LiBbMCwgNTNdIGJpdCBpcyBz
YWZlIGludGVnZXIgbnVtYmVyIHJhbmdlcyBpbiBkb3VibGUgcmVwcmVzZW50YXRpb24uCi0gICAg
ICAgIExWYWx1ZSByYW5kb201MyA9IG1fb3V0LmJpdEFuZChyYW5kb202NCwgbV9vdXQuY29uc3RJ
bnQ2NCgoMVVMTCA8PCA1MykgLSAxKSk7Ci0KLSAgICAgICAgTFZhbHVlIGRvdWJsZTUzSW50ZWdl
ciA9IG1fb3V0LmludFRvRG91YmxlKHJhbmRvbTUzKTsKLQotICAgICAgICAvLyBDb252ZXJ0IGAo
NTNiaXQgZG91YmxlIGludGVnZXIgdmFsdWUpIC8gKDEgPDwgNTMpYCB0byBgKDUzYml0IGRvdWJs
ZSBpbnRlZ2VyIHZhbHVlKSAqICgxLjAgLyAoMSA8PCA1MykpYC4KLSAgICAgICAgLy8gSW4gbGF0
dGVyIGNhc2UsIGAxLjAgLyAoMSA8PCA1MylgIHdpbGwgYmVjb21lIGEgZG91YmxlIHZhbHVlIHJl
cHJlc2VudGVkIGFzIChtYW50aXNzYSA9IDAgJiBleHAgPSA5NzAsIGl0IG1lYW5zIDFlLSgyKio1
NCkpLgotICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlID0gMS4wIC8gKDFVTEwgPDwg
NTMpOwotCi0gICAgICAgIC8vIE11bHRpcGx5aW5nIDFlLSgyKio1NCkgd2l0aCB0aGUgZG91Ymxl
IGludGVnZXIgZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIG9mIHRoZSBtYW50aXNzYSBwYXJ0IG9m
IHRoZSBkb3VibGUgaW50ZWdlci4KLSAgICAgICAgLy8gSXQganVzdCByZWR1Y2VzIHRoZSBleHAg
cGFydCBvZiB0aGUgZ2l2ZW4gNTNiaXQgZG91YmxlIGludGVnZXIuCi0gICAgICAgIC8vIChFeGNl
cHQgZm9yIDAuMC4gVGhpcyBpcyBzcGVjaWFsbHkgaGFuZGxlZCBhbmQgaW4gdGhpcyBjYXNlLCBl
eHAganVzdCBiZWNvbWVzIDAuKQotICAgICAgICAvLyBOb3cgd2UgZ2V0IDUzYml0IHByZWNpc2lv
biByYW5kb20gZG91YmxlIHZhbHVlIGluIFswLCAxKS4KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IG1fb3V0LmRvdWJsZU11bChkb3VibGU1M0ludGVnZXIsIG1fb3V0LmNvbnN0RG91YmxlKHNjYWxl
KSk7Ci0KLSAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21w
aWxlQXJpdGhSb3VuZCgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayByZWFsUGFydElzTW9y
ZVRoYW5IYWxmID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFJvdW5kIHNob3VsZCByb3Vu
ZCBkb3duIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoUm91bmQgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGlu
dGVnZXJWYWx1ZSA9IG1fb3V0LmRvdWJsZUNlaWwodmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21C
bG9jayBpbnRlZ2VyVmFsdWVSZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlKTsKLQot
ICAgICAgICBMVmFsdWUgcmVhbFBhcnQgPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCB2
YWx1ZSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JV
bm9yZGVyZWQocmVhbFBhcnQsIG1fb3V0LmNvbnN0RG91YmxlKDAuNSkpLCB1bnN1cmUocmVhbFBh
cnRJc01vcmVUaGFuSGFsZiksIHVuc3VyZShjb250aW51YXRpb24pKTsKLQotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93biA9
IG1fb3V0LmRvdWJsZVN1YihpbnRlZ2VyVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgaW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQgPSBtX291
dC5hbmNob3IoaW50ZWdlclZhbHVlUm91bmRlZERvd24pOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgaW50ZWdlclZhbHVlUmVzdWx0LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7Ci0K
LSAgICAgICAgaWYgKHByb2R1Y2VzSW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkp
KSB7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50
MzIocmVzdWx0LCBzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdN
b2RlKCkpKTsKLSAgICAgICAgICAgIHNldEludDMyKGludGVnZXJWYWx1ZSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBj
b21waWxlQXJpdGhTcXJ0KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhMb2coKSB7IHNl
dERvdWJsZShtX291dC5kb3VibGVMb2cobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aEZSb3VuZCgpCi0gICAgewotICAgICAgICBzZXRE
b3VibGUobV9vdXQuZnJvdW5kKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aE5lZ2F0ZSgpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAg
aWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmICgh
c2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAg
ICAgICAgICAvLyAiMCAtIHgiIGlzIHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGlu
IGJvdGggQjMgYW5kIExMVk0uIFRoaXMgZ2V0cwotICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQg
dG8gdGhlIHJpZ2h0IHRoaW5nLgotICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0g
bV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJsZXNzU3BlY3VsYXRpb24oY2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3JpZ2luKTsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVjazsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IDAsIG1fb3V0LnRlc3RJc1plcm8zMih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDdmZmZmZmZm
KSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsK
LSAgICAgICAgICAgIGlmICghYWJzdHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJl
VHlwZShTcGVjSW50NTIpKSB7Ci0gICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGls
ZDEoKSwga2luZCk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhNb2RlKCkpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAgICAgICAg
ICAgIHNldEludDUyKHJlc3VsdCwga2luZCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0g
bV9vdXQuc3BlY3VsYXRlU3ViKG1fb3V0LmludDY0WmVybywgdmFsdWUpOwotICAgICAgICAgICAg
Ymxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1
ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKLSAgICAgICAgICAgIHNldEludDUyKHJl
c3VsdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91
YmxlTmVnKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQml0QW5kKCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
ewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRBbmRHZW5lcmF0b3I+
KG9wZXJhdGlvblZhbHVlQml0QW5kKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUJpdE9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRP
ckdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRPcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUJpdFhvcigpCi0gICAgewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBw
ZXQ8SklUQml0WG9yR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdFhvcik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0
UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmFT
aHIoCi0gICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAg
IG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQz
MigzMSkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCi0gICAg
ewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAg
ICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihv
cGVyYXRpb25WYWx1ZUJpdExTaGlmdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgc2V0SW50MzIobV9vdXQuc2hsKAotICAgICAgICAgICAgbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksCi0gICAgICAgICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVCaXRVUlNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5
VXNlS2luZChVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0
KEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlVuc2lnbmVkU2hpZnQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmxTaHIoCi0gICAgICAgICAg
ICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVVJbnQzMlRvTnVtYmVyKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgIGlm
IChkb2VzT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgIHNldERv
dWJsZShtX291dC51bnNpZ25lZFRvRG91YmxlKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
IHNldEludDMyKHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1
Y3R1cmUoKQotICAgIHsKLSAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgZXhpdEtpbmQgPSBC
YWRDb25zdGFudENhY2hlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBleGl0S2luZCA9IEJh
ZENhY2hlOwotCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
LSAgICAgICAgY2FzZSBDZWxsVXNlOgotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjaGVja1N0cnVjdHVyZSgKLSAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUo
Y2VsbCksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCks
Ci0gICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IENlbGxPck90aGVyVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0
cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNC
bG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUg
Q2VsbE9yT3RoZXJVc2Ugbm90IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2Vs
bE9yT3RoZXJVc2UgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQx
KCkpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENl
bGxDYXNlKTsKLSAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNl
dCgpLAotICAgICAgICAgICAgICAgIFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOwotICAgICAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hp
bGQxKCksIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0NlbGwoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgQmFkQ2VsbCwganNWYWx1ZVZhbHVlKGNlbGwpLCBt
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSwKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGws
IHdlYWtQb2ludGVyKG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0JhZENlbGwoKQotICAgIHsKLSAgICAgICAgdGVybWlu
YXRlKEJhZENlbGwpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNoZWNrTm90RW1wdHkoKQot
ICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKFREWkZhaWx1cmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vdXQuaXNaZXJvNjQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZUNoZWNrSWRlbnQoKQotICAgIHsKLSAgICAgICAgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCA9IG1fbm9kZS0+dWlkT3BlcmFuZCgpOwotICAgICAgICBpZiAodWlkLT5pc1N5
bWJvbCgpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgc3ltYm9sID0gbG93U3ltYm9sKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHN5bWJvbCwgbV9oZWFwcy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwotICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZElkZW50LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0lt
cGwsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50
UHRyKHVpZCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1
dGFibGUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBzcGVjdWxhdGVGdW5jdGlvbihtX25vZGUtPmNoaWxkMSgpLCBjZWxs
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNGdW5j
dGlvbl9leGVjdXRhYmxlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFycmF5aWZ5
VG9TdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSAhIW1fbm9kZS0+Y2hpbGQy
KCkgPyBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSA6IDA7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayB1bmV4cGVjdGVkU3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJB
cnJheWlmeVRvU3RydWN0dXJlIHVuZXhwZWN0ZWQgc3RydWN0dXJlIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9T
dHJ1Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZUlEID0gbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAot
ICAgICAgICAgICAgcmFyZWx5KHVuZXhwZWN0ZWRTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyh1bmV4cGVjdGVkU3RydWN0dXJlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKHByb3BlcnR5KSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBVbmNv
dW50YWJsZSwgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9y
RXF1YWwocHJvcGVydHksIG1fb3V0LmNvbnN0SW50MzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkp
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MzI6Ci0gICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25FbnN1cmVJbnQzMiksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgICAgICB2
bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3Vi
bGUpLCBtX2NhbGxGcmFtZSwgY2VsbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUNvbnRpZ3VvdXMpLCBtX2NhbGxGcmFtZSwg
Y2VsbCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgotICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgotICAgICAgICAg
ICAgdm1DYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJl
QXJyYXlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIGNlbGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJhZEluZGV4
aW5nVHlwZSwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1
YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSkpOwot
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlUHV0U3RydWN0dXJlKCkKLSAgICB7Ci0gICAgICAgIG1fZnRsU3RhdGUuaml0Q29k
ZS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3Bs
YW4sIGNvZGVCbG9jaygpLCBtX25vZGUpOwotCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOwotICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwotICAgICAgICBBU1NF
UlRfVU5VU0VEKG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkuaW5saW5lVHlwZUZsYWdzKCkpOwotICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBl
SW5mbygpLnR5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKLQotICAg
ICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAotICAgICAgICBt
X291dC5zdG9yZTMyKAotICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZSks
Ci0gICAgICAgICAgICBjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUdldEJ5SWQoKQotICAgIHsKLSAgICAgICAgc3dpdGNoICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxVc2U6IHsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUoZ2V0QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHdlaXJkLCBz
aW5jZSB3ZSBkdXBsaWNhdGUgdGhlIHNsb3cgcGF0aCBib3RoIGhlcmUgYW5kIGluIHRoZQotICAg
ICAgICAgICAgLy8gY29kZSBnZW5lcmF0ZWQgYnkgdGhlIElDLiBXZSBzaG91bGQgaW52ZXN0aWdh
dGUgbWFraW5nIHRoaXMgbGVzcyBiYWQuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3ODMwCi0gICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1
bnR5cGVkIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsQ2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdldEJ5SWQodmFsdWUp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5SWRHZW5lcmljKSwKLSAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgdmFsdWUs
Ci0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygp
W21fbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgY2VsbFJlc3VsdCwgbm90Q2VsbFJlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQ
dXRCeUlkKCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIAot
ICAgICAgICAvLyBTZWUgYWJvdmU7IENlbGxVc2UgaXMgZWFzaWVyIHNvIHdlIGRvIG9ubHkgdGhh
dCBmb3Igbm93LgotICAgICAgICBBU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENl
bGxVc2UpOwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldOwotCi0gICAgICAgIEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291
dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoYmFzZSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7
Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIFB1dEJ5SWRGbHVz
aCwgd2UgbWlnaHQgd2FudCB0byBsYXRlLWNsb2JiZXIgdm9sYXRpbGUgcmVnaXN0ZXJzLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4Ci0K
LSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRs
ZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2lu
dCk7Ci0KLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIEVDTUFN
b2RlIGVjbWFNb2RlID0gbV9ncmFwaC5leGVjdXRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmVjbWFNb2RlKCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0
b3IoCi0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3Jh
dGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgIENh
bGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5q
aXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwotCi0gICAgICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2Vw
dGlvbnMgPQotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhp
dENyZWF0aW9uKHBhcmFtcyktPmp1bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBKUyBz
ZXR0ZXIgY2FsbCBJQ3MgZ2VuZXJhdGVkIGJ5IHRoZSBQdXRCeUlkIElDIHdpbGwgbmVlZCB0aGlz
LgotICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25G
b3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIGF1dG8g
Z2VuZXJhdG9yID0gQm94PEpJVFB1dEJ5SWRHZW5lcmF0b3I+OjpjcmVhdGUoCi0gICAgICAgICAg
ICAgICAgICAgIGppdC5jb2RlQmxvY2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0
ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdp
c3RlciwgZWNtYU1vZGUsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJ
ZERpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmF0
b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRM
YXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFs
bG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNs
b3dQYXRoSnVtcCgpLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIGdlbmVyYXRvci0+c2xvd1BhdGhGdW5jdGlv
bigpLCBJbnZhbGlkR1BSUmVnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihnZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3By
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+cmVwb3J0U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRo
Q2FsbCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVm
ZmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0
QnV0dGVyZmx5KCkKLSAgICB7Ci0gICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVdpdGhC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
bXBpbGVHZXRCdXR0ZXJmbHlSZWFkT25seSgpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKGxv
YWRCdXR0ZXJmbHlSZWFkT25seShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQotICAgIHsKLSAg
ICAgICAgc2V0U3RvcmFnZShtX291dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVy
KCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OlN0cmluZykgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgU3RyaW5nIHNs
b3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSBTdHJpbmcgY29udGlu
dWF0aW9uIikpOwotCi0gICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQu
bG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdE51bGwoZmFzdFJlc3VsdFZhbHVlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJl
bHkoc2xvd1BhdGgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uUmVzb2x2ZVJvcGUpLCBtX2NhbGxGcmFtZSwgY2VsbCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCksIG1faGVhcHMuU3RyaW5nSW1wbF9k
YXRhKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNldFN0b3JhZ2UobG9hZFZlY3RvcldpdGhCYXJyaWVyKGNlbGwpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlQ2hlY2tBcnJheSgpCi0gICAgewotICAgICAgICBFZGdlIGVkZ2UgPSBt
X25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoZWRnZSk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZCht
X2dyYXBoLCBtX25vZGUsIGFic3RyYWN0VmFsdWUoZWRnZSkpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgQmFkSW5kZXhpbmdU
eXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAgICAgICBtX291dC5sb2dpY2FsTm90
KGlzQXJyYXlUeXBlKGNlbGwsIG1fbm9kZS0+YXJyYXlNb2RlKCkpKSk7Ci0gICAgfQotCi0gICAg
dm9pZCBjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGJhc2VQdHIgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOyAgICAKLQotICAgICAgICBM
QmFzaWNCbG9jayBzaW1wbGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFy
cmF5Qnl0ZU9mZnNldCB3YXN0ZWxlc3MgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHdhc3RlZnVsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5
dGVPZmZzZXQgd2FzdGVmdWwgdHlwZWQgYXJyYXkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIG1vZGUgPSBtX291
dC5sb2FkMzIoYmFzZVB0ciwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKTsKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobW9kZSwgbV9vdXQu
Y29uc3RJbnQzMihXYXN0ZWZ1bFR5cGVkQXJyYXkpKSwKLSAgICAgICAgICAgIHVuc3VyZShzaW1w
bGVDYXNlKSwgdW5zdXJlKHdhc3RlZnVsQ2FzZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2ltcGxlQ2FzZSwgd2FzdGVmdWxDYXNlKTsKLQotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVPdXQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJ
bnRQdHIoMCkpOwotCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyh3YXN0ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
TFZhbHVlIHZlY3RvclB0ciA9IGxvYWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKLSAgICAgICAg
TFZhbHVlIGJ1dHRlcmZseVB0ciA9IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsKLSAg
ICAgICAgTFZhbHVlIGFycmF5QnVmZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIs
IG1faGVhcHMuQnV0dGVyZmx5X2FycmF5QnVmZmVyKTsKLSAgICAgICAgTFZhbHVlIGRhdGFQdHIg
PSBtX291dC5sb2FkUHRyKGFycmF5QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEp
OwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LnN1Yih2ZWN0b3JQdHIsIGRhdGFQdHIpKTsKLQotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotCi0gICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIHNpbXBsZU91dCwgd2FzdGVmdWxPdXQpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZUdldEFycmF5TGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93U3RvcmFnZSht
X25vZGUtPmNoaWxkMigpKSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFy
cmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBFeG90
aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgbV9vdXQu
bm90TnVsbChtX291dC5sb2FkUHRyKGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNf
b3ZlcnJpZGVzKSkpOwotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoYXJndW1lbnRzLCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czogewotICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudHMsIG1faGVh
cHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwotICAgICAgICAgICAgc2V0SW50
MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3Vt
ZW50c190b3RhbExlbmd0aCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5
TW9kZSgpLmlzU29tZVR5cGVkQXJyYXlWaWV3KCkpIHsKLSAgICAgICAgICAgICAgICBzZXRJbnQz
MigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGls
ZUNoZWNrSW5Cb3VuZHMoKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVh
bChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAgICAgIG1faGVh
cHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
bG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkp
OwotICAgICAgICAgICAgICAgIExWYWx1ZSBpc0hvbGUgPSBtX291dC5pc1plcm82NChyZXN1bHQp
OwotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5zZWxlY3Qo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc0hvbGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgp
LCAwLCBpc0hvbGUpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGZhc3QgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQv
Y29udGlndW91cyBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGNv
bnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAg
aW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCkpLAotICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFs
bHkoZmFzdENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0Q2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAg
ICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBz
dG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOwotICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGZhc3RS
ZXN1bHRWYWx1ZSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25HZXRCeVZhbEFycmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9
IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0
aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9h
ZERvdWJsZSgKLSAgICAgICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGlu
ZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xl
LCBub1ZhbHVlKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGluQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUg
aW4gYm91bmRzIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgYm94UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgZG91YmxlIGJveGluZyIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3Vi
bGUgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgY29udGludWF0aW9uIikpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSks
Ci0gICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShpbkJvdW5kcykpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGluQm91bmRzLCBib3hQYXRoKTsKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1
ZSA9IG1fb3V0LmxvYWREb3VibGUoCi0gICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0
b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChkb3Vi
bGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSks
IHVzdWFsbHkoYm94UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhib3hQYXRoLCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGJveERvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUlu
dCksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5s
ZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAg
ICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAg
bV9vdXQubm90TnVsbChtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRz
X292ZXJyaWRlcykpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBF
eG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgbV9v
dXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRleCwKLSAgICAgICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1
bWVudHNfbGVuZ3RoKSkpOwotCi0gICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19z
dG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgRXhv
dGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgICAgIG1fb3V0
LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgaW5kZXgsCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX3RvdGFsTGVuZ3RoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgdGFi
bGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsK
LSAgICAgICAgICAgIExWYWx1ZSBuYW1lZExlbmd0aCA9IG1fb3V0LmxvYWQzMih0YWJsZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9sZW5ndGgpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBuYW1lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5
VmFsIFNjb3BlZEFyZ3VtZW50cyBuYW1lZCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgb3ZlcmZsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRB
cmd1bWVudHMgb3ZlcmZsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRz
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbmFtZWRMZW5ndGgp
LCB1bnN1cmUob3ZlcmZsb3dDYXNlKSwgdW5zdXJlKG5hbWVkQ2FzZSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5hbWVk
Q2FzZSwgb3ZlcmZsb3dDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHNj
b3BlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19zY29wZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbV9vdXQubG9hZFB0cih0YWJsZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAg
ICAgICAgICBtX2hlYXBzLnNjb3BlZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMs
IG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNl
dCA9IG1fb3V0LmxvYWQzMihhZGRyZXNzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3Bl
Y3VsYXRlKAotICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVs
bHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29u
c3RJbnQzMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNldCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hl
YXBzLkpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzLCBzY29wZSwgbV9vdXQuemVyb0V4dFB0
cihzY29wZU9mZnNldCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8ob3ZlcmZsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKLSAgICAgICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKG1fb3V0LnN1YihpbmRleCwgbmFtZWRMZW5ndGgpKSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgb3ZlcmZsb3dWYWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmlzWmVybzY0KG92ZXJmbG93VmFsdWUpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG92ZXJmbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG92ZXJmbG93VmFsdWUpOwotICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlWYWwpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6IHsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
aXNUeXBlZFZpZXcodHlwZSkpIHsKLSAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRl
ciA9IFR5cGVkUG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5
UHJvcGVydGllcywKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6
ZSh0eXBlKSkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50
KHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNTaWduZWQodHlw
ZSkgPyBtX291dC5sb2FkOFNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkOFplcm9FeHQz
Mihwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc1NpZ25l
ZCh0eXBlKSA/IG1fb3V0LmxvYWQxNlNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkMTZa
ZXJvRXh0MzIocG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9vdXQubG9hZDMyKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGVsZW1lbnQgc2l6ZSIpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAo
ZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVl
KCksIDAsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0Lnplcm9F
eHQocmVzdWx0LCBtX291dC5pbnQ2NCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQudW5zaWduZWRUb0RvdWJsZShyZXN1bHQpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgICAgIHN3aXRj
aCAodHlwZSkgewotICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6Ci0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmZsb2F0VG9Eb3VibGUobV9vdXQubG9hZEZsb2F0KHBv
aW50ZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZERv
dWJsZShwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB0eXBlZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0gfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRNeUFy
Z3VtZW50QnlWYWwoKQotICAgIHsKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBtX25vZGUtPmNoaWxkMSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgbGltaXQ7Ci0gICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCi0gICAgICAgICAg
ICBsaW1pdCA9IG1fb3V0LmNvbnN0SW50MzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6
ZSgpIC0gMSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFy
Z3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQot
ICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRS
ZWdpc3RlcjsKLSAgICAgICAgICAgIGxpbWl0ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXls
b2FkRm9yKGFyZ3VtZW50Q291bnRSZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIDAsIG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbGltaXQpKTsKLSAgICAgICAgCi0gICAg
ICAgIFR5cGVkUG9pbnRlciBiYXNlOwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7Ci0g
ICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIDw9IDEpIHsK
LSAgICAgICAgICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBkdWUgdG8g
dGhlIGJvdW5kcyBjaGVjaywgYWJvdmUuIEp1c3QgdGVsbCB0aGUKLSAgICAgICAgICAgICAgICAv
LyBjb21waWxlciB0aGF0IGFueXRoaW5nIGRvbWluYXRlZCBieSB0aGlzIGluc3RydWN0aW9uIGlz
IG5vdCByZWFjaGFibGUsIHNvCi0gICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCB3YXN0
ZSB0aW1lIGdlbmVyYXRpbmcgc3VjaCBjb2RlLiBUaGlzIHdpbGwgYWxzbyBwbGFudCBzb21lCi0g
ICAgICAgICAgICAgICAgLy8ga2luZCBvZiBjcmFzaGluZyBpbnN0cnVjdGlvbiBzbyB0aGF0IGlm
IGJ5IHNvbWUgZmx1a2UgdGhlIGJvdW5kcyBjaGVjayBkaWRuJ3QKLSAgICAgICAgICAgICAgICAv
LyB3b3JrLCB3ZSdsbCBjcmFzaCBpbiBhbiBlYXN5LXRvLXNlZSB3YXkuCi0gICAgICAgICAgICAg
ICAgZGlkQWxyZWFkeVRlcm1pbmF0ZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzWzFdLnZpcnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBiYXNlID0gYWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAg
ICAgICAgIGJhc2UudmFsdWUoKSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwg
U2NhbGVFaWdodCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KFR5cGVkUG9pbnRl
cihtX2hlYXBzLnZhcmlhYmxlcy5hdEFueUluZGV4KCksIHBvaW50ZXIpKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsKCkKLSAgICB7Ci0gICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwotICAgICAgICBFZGdlIGNoaWxkMiA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKLSAgICAgICAgRWRnZSBjaGlsZDMgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7Ci0gICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpOwotICAgICAgICBFZGdlIGNoaWxkNSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzog
ewotICAgICAgICAgICAgVl9KSVRPcGVyYXRpb25fRUpKSiBvcGVyYXRpb247Ci0gICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsRGlyZWN0KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJp
Y3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24g
PSBvcGVyYXRpb25QdXRCeVZhbERpcmVjdE5vblN0cmljdDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9u
UHV0QnlWYWxTdHJpY3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbE5vblN0cmljdDsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLAot
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBs
b3dKU1ZhbHVlKGNoaWxkMykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGNoaWxkMSk7Ci0gICAgICAgIExWYWx1
ZSBpbmRleCA9IGxvd0ludDMyKGNoaWxkMik7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShjaGlsZDQpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlB1dEJ5VmFsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dGVy
TGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhtX291dC5tX2Jsb2NrLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGNoaWxkMywgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkludDMyKQotICAgICAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBjaGlsZDMsIFNwZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9
IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KLSAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5p
bmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsCi0gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
LCBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY29udGlndW91c1B1dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgICAgICAgICAg
ICAgIGNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKQotICAgICAgICAgICAgICAgICAgICA/IG9w
ZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QKLSAgICAgICAgICAgICAgICAg
ICAgOiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAg
ICAgICAgICAgICAgICBiYXNlLCBzdG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwg
ZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAg
ICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgY2hpbGQzLCBTcGVjRG91YmxlUmVhbCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUp
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgZWxlbWVu
dFBvaW50ZXIgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMu
aW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgp
LAotICAgICAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMp
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGVsZW1lbnRQ
b2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9m
Qm91bmRzKAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkK
LSAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5
Qm91bmRzU3RyaWN0Ci0gICAgICAgICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0RG91YmxlQnlW
YWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdCwKLSAgICAgICAgICAgICAgICAgICAgYmFzZSwg
c3RvcmFnZSwgaW5kZXgsIHZhbHVlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlRG91YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIG91dGVyTGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFR5cGVkQXJy
YXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyh0eXBlKSkgewotICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBwb2ludGVyID0gVHlwZWRQb2ludGVyKAotICAgICAgICAgICAg
ICAgICAgICBtX2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc2hsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludFB0ciksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIE91dHB1dDo6U3RvcmVUeXBlIHN0b3JlVHlwZTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1N0b3JlOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBM
VmFsdWUgaW50VmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQzLnVzZUtp
bmQoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOgotICAgICAgICAg
ICAgICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQzLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRWYWx1ZSA9IGxvd0ludDMyKGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5jYXN0VG9J
bnQzMihsb3dTdHJpY3RJbnQ1MihjaGlsZDMpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGlzQ2xhbXBlZCh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgaW50IGNsYW1wIGF0TGVhc3RaZXJvIikpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgaW50IGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGludFZhbHVlczsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8p
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmxlc3NUaGFuKGludFZhbHVlLCBtX291dC5pbnQz
Mlplcm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKGF0TGVhc3RaZXJvKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhhdExlYXN0WmVybywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5k
KG1fb3V0LmFuY2hvcihtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmdyZWF0ZXJUaGFuKGludFZhbHVlLCBtX291dC5jb25zdEludDMyKDI1NSkpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKDI1NSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlKSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBk
b3VibGVWYWx1ZSA9IGxvd0RvdWJsZShjaGlsZDMpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGF0TGVhc3RaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBk
b3VibGUgY2xhbXAgYXRMZWFzdFplcm8iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgd2l0aGluUmFuZ2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFs
IGRvdWJsZSBjbGFtcCB3aXRoaW5SYW5nZSIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5
VmFsIGRvdWJsZSBjbGFtcCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
LCAzPiBpbnRWYWx1ZXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFw
cGVuZChtX291dC5hbmNob3IobV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X291dC5kb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBtX291dC5kb3VibGVa
ZXJvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlv
biksIHVuc3VyZShhdExlYXN0WmVybykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oYXRMZWFzdFplcm8sIHdpdGhpblJhbmdlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDI1
NSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuKGRvdWJsZVZh
bHVlLCBtX291dC5jb25zdERvdWJsZSgyNTUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZSh3aXRoaW5SYW5nZSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVRvSW50
KGRvdWJsZVZhbHVlKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW50VmFsdWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0gZG91YmxlVG9JbnQzMihkb3VibGVWYWx1
ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICB2YWx1ZVRvU3RvcmUgPSBpbnRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChl
bGVtZW50U2l6ZSh0eXBlKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzJBczg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTMyQXMxNjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzI7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgZWxlbWVudCBzaXplIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9IGVsc2UgLyogIWlzSW50KHR5cGUpICovIHsKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IHZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVUb1N0b3JlID0gbV9vdXQuZG91YmxlVG9GbG9hdCh2YWx1ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRmxvYXQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBUeXBlRmxvYXQ2NDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IHZh
bHVlOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURv
dWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB0eXBlZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpIHx8IG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZh
bEFsaWFzKQotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUsIHBv
aW50ZXIsIHN0b3JlVHlwZSk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlzSW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1
dEJ5VmFsIHR5cGVkIGFycmF5IGluIGJvdW5kcyBjYXNlIikpOwotICAgICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5
VmFsIHR5cGVkIGFycmF5IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbG93SW50MzIoY2hpbGQ1KSksCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzSW5Cb3VuZHMpKTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbkJvdW5kcywgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5
cGUpOwotICAgICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxl
UHV0QWNjZXNzb3JCeUlkKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMigpKTsKLSAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClb
bV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9w
KCkgPT0gUHV0R2V0dGVyQnlJZCA/IG9wZXJhdGlvblB1dEdldHRlckJ5SWQgOiBvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25z
dEludFB0cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVz
KCkpLCBhY2Nlc3Nvcik7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlUHV0R2V0dGVyU2V0dGVy
QnlJZCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBnZXR0ZXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpOwotICAgICAgICBMVmFsdWUgc2V0dGVyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygp
KTsKLSAgICAgICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lk
VHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciksCi0gICAgICAg
ICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29u
c3RJbnQzMihtX25vZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgZ2V0dGVyLCBzZXR0ZXIpOwot
Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeVZhbCgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExW
YWx1ZSBzdWJzY3JpcHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBM
VmFsdWUgYWNjZXNzb3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICB2bUNh
bGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJh
dGlvbihtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlWYWwgPyBvcGVyYXRpb25QdXRHZXR0ZXJC
eVZhbCA6IG9wZXJhdGlvblB1dFNldHRlckJ5VmFsKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1l
LCBiYXNlLCBzdWJzY3JpcHQsIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJp
YnV0ZXMoKSksIGFjY2Vzc29yKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJyYXlQ
dXNoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQz
KCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFs
dWUgdmFsdWU7Ci0gICAgICAgICAgICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMikgewotICAgICAg
ICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNJbnQzMiwgaXNOb3RJbnQz
Mih2YWx1ZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzdG9yZVR5cGUg
PSBPdXRwdXQ6OlN0b3JlNjQ7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgICAgIEZU
TF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQyKCksIFNwZWNEb3VibGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZhbHVlLCB2YWx1ZSkpOwotICAgICAgICAgICAg
ICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3RvcmVEb3VibGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBz
LmZvckFycmF5VHlwZShtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSk7Ci0KLSAgICAgICAgICAg
IExWYWx1ZSBwcmV2TGVuZ3RoID0gbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVB1c2ggZmFzdCBwYXRoIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFycmF5UHVzaCBzbG93IHBhdGgiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UHVzaCBjb250aW51YXRpb24i
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIHByZXZMZW5ndGgs
IG1fb3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoZmFzdFBhdGgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmUoCi0gICAg
ICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBtX291dC56
ZXJvRXh0UHRyKHByZXZMZW5ndGgpKSwgc3RvcmVUeXBlKTsKLSAgICAgICAgICAgIExWYWx1ZSBu
ZXdMZW5ndGggPSBtX291dC5hZGQocHJldkxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmUzMihuZXdMZW5ndGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYm94SW50MzIobmV3TGVuZ3RoKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZh
bHVlIG9wZXJhdGlvbjsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSAhPSBBcnJheTo6RG91YmxlKQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2gpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2hEb3Vi
bGUpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxs
RnJhbWUsIHZhbHVlLCBiYXNlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50
NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcnJheVBvcCgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKLSAg
ICAgICAgCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKLSAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgSW5kZXhlZEFic3Ry
YWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UG9wIGZhc3QgY2FzZSIpKTsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBv
cCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UG9wIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmlzWmVybzMyKHByZXZMZW5ndGgpLCByYXJlbHkoY29udGludWF0aW9uKSwg
dXN1YWxseShmYXN0Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAg
ICAgICBMVmFsdWUgbmV3TGVuZ3RoID0gbV9vdXQuc3ViKHByZXZMZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdlLCBtX2hl
YXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBv
aW50ZXIgPSBtX291dC5iYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihu
ZXdMZW5ndGgpKTsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAh
PSBBcnJheTo6RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LmxvYWQ2NChwb2ludGVyKTsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0Lmlu
dDY0WmVybywgcG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQu
YW5jaG9yKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5sb2FkRG91YmxlKHBvaW50ZXIpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQobV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4oUE5hTikpLCBwb2ludGVyKTsKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3IoYm94RG91YmxlKHJlc3VsdCkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKHJlc3VsdCwgcmVzdWx0
KSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xv
d0Nhc2UpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKSwgbV9jYWxs
RnJhbWUsIGJhc2UpKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJl
c3VsdHMpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5
cGUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBzY29w
ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJs
ZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpOwotICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwotICAgICAgICBKU1ZhbHVlIGluaXRpYWxp
emF0aW9uVmFsdWUgPSBtX25vZGUtPmluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCk7
Ci0gICAgICAgIEFTU0VSVChpbml0aWFsaXphdGlvblZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgaW5p
dGlhbGl6YXRpb25WYWx1ZSA9PSBqc1REWlZhbHVlKCkpOwotICAgICAgICBpZiAodGFibGUtPnNp
bmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwKLSAgICAgICAg
ICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCks
IG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgICAgIHNj
b3BlLCB3ZWFrUG9pbnRlcih0YWJsZSksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGluaXRpYWxpemF0aW9uVmFsdWUpKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1
bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZh
dGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZhdGlvbiBjb250aW51YXRpb24iKSk7Ci0g
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Js
b2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZmFzdE9iamVj
dCA9IGFsbG9jYXRlT2JqZWN0PEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAgICAgICAgIEpT
TGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVyZSwgbV9v
dXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2
YXRpb24sIHNvIHRoZQotICAgICAgICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCi0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4
dCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVj
dCwgbV9oZWFwcy5KU1N5bWJvbFRhYmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKLSAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSksCi0gICAgICAgICAg
ICAgICAgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tp
XSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1
bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQ
dHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0
ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9u
c1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHRhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7Ci0gICAgICAg
ICAgICB9LAotICAgICAgICAgICAgc2NvcGUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRy
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgPT0gTmV3
RnVuY3Rpb24gfHwgbV9ub2RlLT5vcCgpID09IE5ld0Fycm93RnVuY3Rpb24gfHwgbV9ub2RlLT5v
cCgpID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uKTsKLSAgICAgICAgYm9vbCBpc0dlbmVyYXRvckZ1
bmN0aW9uID0gbV9ub2RlLT5vcCgpID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uOwotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgCi0gICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2Fz
dE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKLSAgICAgICAgaWYgKGV4ZWN1dGFibGUt
PnNpbmdsZXRvbkZ1bmN0aW9uKCktPmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBMVmFs
dWUgY2FsbFJlc3VsdCA9Ci0gICAgICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IHZt
Q2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1
bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgot
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRh
YmxlKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9Ci0gICAgICAgICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVy
ZSgpIDoKLSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBzbG93
IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiTmV3RnVuY3Rpb24gY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xv
d1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPQotICAgICAgICAg
ICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IGFsbG9jYXRlT2JqZWN0PEpTR2VuZXJhdG9yRnVuY3Rp
b24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpIDoKLSAgICAgICAgICAg
IGFsbG9jYXRlT2JqZWN0PEpTRnVuY3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywg
c2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8vIFdlIGRvbid0IG5lZWQg
bWVtb3J5IGJhcnJpZXJzIHNpbmNlIHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBmdW5jdGlvbiwg
c28gaXQKLSAgICAgICAgLy8gbXVzdCBiZSB5b3VuZy4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIo
c2NvcGUsIGZhc3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9zY29wZSk7Ci0gICAgICAgIG1f
b3V0LnN0b3JlUHRyKHdlYWtQb2ludGVyKGV4ZWN1dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBz
LkpTRnVuY3Rpb25fZXhlY3V0YWJsZSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0Lmlu
dFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9yYXJlRGF0YSk7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAg
ICBWZWN0b3I8TFZhbHVlPiBzbG93UGF0aEFyZ3VtZW50czsKLSAgICAgICAgc2xvd1BhdGhBcmd1
bWVudHMuYXBwZW5kKHNjb3BlKTsKLSAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xv
d1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzR2VuZXJhdG9yRnVuY3Rpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50
LAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludCwKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBs
b2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAg
ICAgc2xvd1BhdGhBcmd1bWVudHMpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0
ZURpcmVjdEFyZ3VtZW50cygpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVj
dGl2ZSB3YXkgb2YgZGVhbGluZyB3aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlz
IHRvIGhhdmUKLSAgICAgICAgLy8gdGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBu
b2RlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQyMjA3Ci0gICAgICAgIAotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9Ci0gICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRp
cmVjdEFyZ3VtZW50c1N0cnVjdHVyZSgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbWlu
Q2FwYWNpdHkgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+bnVtUGFyYW1ldGVycygpIC0gMTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVu
dHMgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBBcmd1bWVudHNMZW5n
dGggbGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICBMVmFs
dWUgZmFzdE9iamVjdDsKLSAgICAgICAgaWYgKGxlbmd0aC5pc0tub3duKSB7Ci0gICAgICAgICAg
ICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAg
ICAgICAgICBEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKHN0ZDo6bWF4KGxlbmd0aC5r
bm93biwgbWluQ2FwYWNpdHkpKSwgc3RydWN0dXJlLAotICAgICAgICAgICAgICAgIG1fb3V0Lmlu
dFB0clplcm8sIHNsb3dQYXRoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExWYWx1
ZSBzaXplID0gbV9vdXQuYWRkKAotICAgICAgICAgICAgICAgIG1fb3V0LnNobChsZW5ndGgudmFs
dWUsIG1fb3V0LmNvbnN0SW50MzIoMykpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2l6ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICBtX291dC5hYm92
ZU9yRXF1YWwobGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCi0g
ICAgICAgICAgICAgICAgc2l6ZSwgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFs
bG9jYXRpb25TaXplKG1pbkNhcGFjaXR5KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
YXN0T2JqZWN0ID0gYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4o
Ci0gICAgICAgICAgICAgICAgc2l6ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93
UGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3Ro
LnZhbHVlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOwotICAg
ICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpLCBmYXN0T2Jq
ZWN0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19taW5DYXBhY2l0eSk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJn
dW1lbnRzX292ZXJyaWRlcyk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgo
Ci0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25D
cmVhdGVEaXJlY3RBcmd1bWVudHMsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0
aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobWluQ2FwYWNpdHkpKTsKLSAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJl
c3VsdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7Ci0KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoZ2V0Q3VycmVudENhbGxlZSgpLCByZXN1bHQs
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2NhbGxlZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAo
bGVuZ3RoLmlzS25vd24pIHsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFz
c2VtYmx5SGVscGVyczo6YXJndW1lbnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGxlbmd0aC5rbm93
biwgbWluQ2FwYWNpdHkpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihzdGFydCArIGkpKSwK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9y
YWdlW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIExW
YWx1ZSBzdGFja0Jhc2UgPSBnZXRBcmd1bWVudHNTdGFydCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVE
aXJlY3RBcmd1bWVudHMgbG9vcCBib2R5IikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZW5k
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBlbmQi
KSk7Ci0KLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsTGVuZ3RoOwotICAgICAg
ICAgICAgaWYgKG1pbkNhcGFjaXR5KSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNhcGFjaXR5
ID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
bGVuZ3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCi0gICAgICAgICAg
ICAgICAgICAgIGxlbmd0aC52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihtaW5DYXBhY2l0eSkpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0
aFZhbHVlID0gbV9vdXQuemVyb0V4dFB0cihjYXBhY2l0eSk7Ci0gICAgICAgICAgICAgICAgb3Jp
Z2luYWxMZW5ndGggPSBtX291dC5hbmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChsb29wKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgTFZhbHVlIG9yaWdpbmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGxl
bmd0aC52YWx1ZSk7Ci0gICAgICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5hbmNo
b3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmlzTnVsbChvcmlnaW5hbExlbmd0aFZhbHVlKSwgdW5zdXJlKGVuZCksIHVuc3VyZShsb29w
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8obG9vcCwgZW5kKTsKLSAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c0lu
ZGV4ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgb3JpZ2luYWxMZW5ndGgpOwotICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9u
ZSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIG1fb3V0Lmxv
YWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHN0YWNrQmFzZSwgaW5kZXgp
KSwKLSAgICAgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVu
dHNfc3RvcmFnZSwgcmVzdWx0LCBpbmRleCkpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKLSAgICAgICAgICAgIG1fb3V0LmFkZElu
Y29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKLSAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5pc051bGwoaW5kZXgpLCB1bnN1cmUoZW5kKSwgdW5zdXJlKGxvb3ApKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZW5kLCBsYXN0TmV4dCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCkKLSAgICB7Ci0g
ICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMpLCBtX2Nh
bGxGcmFtZSwKLSAgICAgICAgICAgIHdlYWtQb2ludGVyKAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2NvcGVkQXJndW1l
bnRzU3RydWN0dXJlKCkpLAotICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJn
dW1lbnRzTGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSwgc2NvcGUpOwotICAgICAg
ICAKLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICB3
ZWFrUG9pbnRlcigKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKLSAg
ICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVl
LCBnZXRDdXJyZW50Q2FsbGVlKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNvcHlSZXN0KCkKLSAgICB7ICAgICAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGRvQ29weVJlc3QgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkNvcHlSZXN0IEMgY2FsbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGaWxsUmVzdFBhcmFtZXRlciBjb250aW51YXRpb24i
KSk7Ci0KLSAgICAgICAgTFZhbHVlIGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwo
YXJyYXlMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAotICAgICAgICAgICAgdW5zdXJlKGNv
bnRpbnVhdGlvbiksIHVuc3VyZShkb0NvcHlSZXN0KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51
YXRpb24pOwotICAgICAgICAvLyBBcmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAy
OmFyZ3VtZW50cyBzdGFydCwgMzpudW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkg
bGVuZ3RoCi0gICAgICAgIExWYWx1ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNv
bnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKLSAgICAgICAgdm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkNvcHlSZXN0KSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICBnZXRBcmd1bWVudHNTdGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgYXJy
YXlMZW5ndGgpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBjb21waWxlR2V0UmVzdExlbmd0aCgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBub25a
ZXJvTGVuZ3RoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIG5vbiB6ZXJv
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldFJlc3RMZW5ndGggY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgemVyb0xlbmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25z
dEludDMyKDApKTsKLQotICAgICAgICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBt
X291dC5jb25zdEludDMyKG1fbm9kZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7Ci0gICAg
ICAgIExWYWx1ZSBhcmd1bWVudHNMZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZTsK
LSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVy
T2ZBcmd1bWVudHNUb1NraXApLAotICAgICAgICAgICAgdW5zdXJlKG5vblplcm9MZW5ndGgpLCB1
bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vblplcm9MZW5ndGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG5vblplcm9MZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuc3ViKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKLSAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEludDMyKG1fb3V0LnBo
aShtX291dC5pbnQzMiwgemVyb0xlbmd0aFJlc3VsdCwgbm9uWmVyb0xlbmd0aFJlc3VsdCkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVOZXdPYmplY3QoKQotICAgIHsKLSAgICAgICAg
c2V0SlNWYWx1ZShhbGxvY2F0ZU9iamVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZU5ld0FycmF5KCkKLSAgICB7Ci0gICAgICAgIC8vIEZpcnN0
IHNwZWN1bGF0ZSBhcHByb3ByaWF0ZWx5IG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4uIERvIHRoaXMg
dW5jb25kaXRpb25hbGx5IHVwIGhlcmUKLSAgICAgICAgLy8gYmVjYXVzZSBzb21lIG9mIHRoZSBz
bG93IHBhdGhzIG1heSBvdGhlcndpc2UgZm9yZ2V0IHRvIGRvIGl0LiBJdCdzIHNvcnQgb2YgYXJn
dWFibGUKLSAgICAgICAgLy8gdGhhdCBkb2luZyB0aGUgc3BlY3VsYXRpb25zIHVwIGhlcmUgbWln
aHQgYmUgdW5wcm9maXRhYmxlIGZvciBSQSAtIHNvIHdlIGNhbiBjb25zaWRlcgotICAgICAgICAv
LyBzaW5raW5nIHRoaXMgdG8gYmVsb3cgdGhlIGFsbG9jYXRpb24gZmFzdCBwYXRoIGlmIHdlIGZp
bmQgdGhhdCB0aGlzIGhhcyBhIGxvdCBvZgotICAgICAgICAvLyByZWdpc3RlciBwcmVzc3VyZS4K
LSAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBt
X25vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KQotICAgICAgICAgICAgc3BlY3Vs
YXRlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpKTsKLSAgICAgICAg
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKLQotICAg
ICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJh
eVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1
cmUsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJbmRleCk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmluZGV4aW5nVHlwZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBBTExfVU5ERUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZGV4aW5nIHR5cGUiKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNh
c2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmVEb3VibGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBsb3dEb3VibGUoZWRnZSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbHVlcy5idXR0ZXJmbHksIG1faGVhcHMuaW5k
ZXhlZERvdWJsZVByb3BlcnRpZXNbb3BlcmFuZEluZGV4XSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9J
TlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VT
X0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5p
bmRleGluZ1R5cGUoKSktPmF0KG9wZXJhbmRJbmRleCkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW5k
ZXhpbmcgdHlwZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEpTVmFsdWUo
YXJyYXlWYWx1ZXMuYXJyYXkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoIW1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkgewotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdFbXB0eUFycmF5KSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpICogbV9ub2RlLT5udW1DaGlsZHJlbigpOwotICAgICAgICBBU1NF
UlQoc2NyYXRjaFNpemUpOwotICAgICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
dm0oKS5zY3JhdGNoQnVmZmVyRm9yU2l6ZShzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIEVuY29kZWRK
U1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZm
ZXItPmRhdGFCdWZmZXIoKSk7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJh
bmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVy
YW5kSW5kZXgpIHsKLSAgICAgICAgICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCBvcGVyYW5kSW5kZXgpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCi0g
ICAgICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZEluZGV4KSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnRQdHIoc2NyYXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVm
ZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXkpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKHN0cnVjdHVyZSksIG1fb3V0LmNvbnN0SW50UHRyKGJ1ZmZlciksCi0gICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihtX25vZGUtPm51bUNoaWxkcmVuKCkpKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIG1fb3V0LmFic29sdXRlKHNjcmF0
Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5ld0FycmF5QnVmZmVy
KCkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5n
VHlwZUR1cmluZ0FsbG9jYXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgp
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtX25vZGUtPm51bUNvbnN0YW50cygpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9j
YXRlSlNBcnJheShzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgSlNWYWx1ZSogZGF0YSA9IGNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihtX25vZGUt
PnN0YXJ0Q29uc3RhbnQoKSk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBtX25vZGUtPm51bUNvbnN0YW50cygpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICAg
ICAgaW50NjRfdCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpKQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2Fz
dDxpbnQ2NF90PihkYXRhW2luZGV4XS5hc051bWJlcigpKTsKLSAgICAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhd
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHZhbHVlKSwKLSAgICAgICAgICAgICAg
ICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAotICAgICAgICAgICAgICAgICAgICBtX2hlYXBz
LmZvckluZGV4aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheVZh
bHVlcy5hcnJheSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheUJ1ZmZlciksIG1fY2FsbEZyYW1lLAotICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5zdGFydENvbnN0YW50KCkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9u
b2RlLT5udW1Db25zdGFudHMoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTmV3
QXJyYXlXaXRoU2l6ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgcHVibGljTGVuZ3RoID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAotICAgICAgICAg
ICAgbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKLSAgICAgICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgICAg
ICBoYXNVbmRlY2lkZWQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAg
ICB8fCBoYXNJbnQzMihzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAg
IHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAg
IHx8IGhhc0NvbnRpZ3VvdXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwotCi0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJy
YXlXaXRoU2l6ZSBmYXN0IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgbGFyZ2UgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOZXdBcnJheVdpdGhTaXplIGZhaWwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIHNs
b3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291
dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9T
VE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkobGFy
Z2VDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBXZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4g
Zm9yIG5ldyBBcnJheShibGFoKS4KLSAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBw
dWJsaWNMZW5ndGg7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6
ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3Ro
LCBtX291dC5pbnRQdHIpLCBtX291dC5jb25zdEludFB0cigzKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHlTaXplID0gbV9vdXQuYWRkKAotICAgICAgICAgICAg
ICAgIHBheWxvYWRTaXplLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxv
Y2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoZW5kT2ZT
dG9yYWdlLCBwYXlsb2FkU2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFp
bENhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHB1YmxpY0xl
bmd0aCwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmUzMih2ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0
ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGhhc0Rv
dWJsZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGluaXRMb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGRv
dWJsZSBpbml0IGxvb3AiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdERvbmUg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgZG9u
ZSIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBv
cmlnaW5hbEluZGV4ID0gbV9vdXQuYW5jaG9yKHZlY3Rvckxlbmd0aCk7Ci0gICAgICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxQb2ludGVyID0gbV9vdXQuYW5jaG9yKGJ1dHRlcmZs
eSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RaZXJvMzIodmVjdG9yTGVuZ3RoKSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGlu
aXREb25lKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
aW5pdExhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5pdExvb3AsIGluaXREb25lKTsKLSAgICAg
ICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5waGkobV9vdXQuaW50MzIsIG9yaWdpbmFs
SW5kZXgpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKG1fb3V0
LmludFB0ciwgb3JpZ2luYWxQb2ludGVyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KGJpdHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksCi0gICAgICAgICAgICAgICAgICAgIFR5cGVk
UG9pbnRlcihtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9p
bnRlcikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0SW5k
ZXggPSBtX291dC5zdWIoaW5kZXgsIG1fb3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBt
X291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwb2ludGVyLCBtX291dC5hbmNo
b3IobV9vdXQuYWRkKHBvaW50ZXIsIG1fb3V0LmludFB0ckVpZ2h0KSkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG5l
eHRJbmRleCksIHVuc3VyZShpbml0TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluaXREb25lLCBpbml0TGFz
dE5leHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG9iamVjdCk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGxhcmdlQ2FzZSwgZmFpbENhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbGFyZ2VTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCi0gICAg
ICAgICAgICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSkpOwotICAgICAgICAgICAgbV9v
dXQuanVtcChzbG93Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGZhaWxDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYWls
U3RydWN0dXJlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpOwot
ICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
TFZhbHVlIHN0cnVjdHVyZVZhbHVlID0gbV9vdXQucGhpKAotICAgICAgICAgICAgICAgIG1fb3V0
LmludFB0ciwgbGFyZ2VTdHJ1Y3R1cmUsIGZhaWxTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgTFZh
bHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0g
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0
aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0
aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKLSAg
ICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNM
ZW5ndGgpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5z
ZWxlY3QoCi0gICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291
dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAotICAgICAgICAgICAgICAgIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJl
KSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSksIG1fY2FsbEZyYW1lLCBzdHJ1Y3R1cmVWYWx1
ZSwgcHVibGljTGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJh
eSgpCi0gICAgewotICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT50eXBlZEFy
cmF5VHlwZSgpOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNl
IEludDMyVXNlOiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9i
amVjdC0+dHlwZWRBcnJheVN0cnVjdHVyZSh0eXBlKTsKLQotICAgICAgICAgICAgTFZhbHVlIHNp
emUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgc21hbGxFbm91Z2hDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5
IHNtYWxsIGVub3VnaCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm9uWmVyb0Nh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld1R5cGVkQXJyYXkgbm9uLXplcm8gY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOZXdUeXBlZEFycmF5IHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBjb250
aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICBtX291dC5hYm92ZShzaXplLCBtX291dC5jb25zdEludDMyKEpTQXJyYXlCdWZmZXJWaWV3Ojpm
YXN0U2l6ZUxpbWl0KSksCi0gICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxs
eShzbWFsbEVub3VnaENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbWFsbEVub3VnaENhc2UsIG5vblplcm9DYXNlKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihzaXplKSwgdXN1YWxseShub25aZXJv
Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhu
b25aZXJvQ2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAgICBMVmFsdWUgYnl0ZVNpemUgPQot
ICAgICAgICAgICAgICAgIG1fb3V0LnNobChtX291dC56ZXJvRXh0UHRyKHNpemUpLCBtX291dC5j
b25zdEludDMyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVu
dFNpemUodHlwZSkgPCA4KSB7Ci0gICAgICAgICAgICAgICAgYnl0ZVNpemUgPSBtX291dC5iaXRB
bmQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZChieXRlU2l6ZSwgbV9vdXQuY29uc3RJ
bnRQdHIoNykpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cih+c3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KDcpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAg
ICAgTFZhbHVlIHN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZShieXRlU2l6ZSwgc2xvd0Nh
c2UpOwotCi0gICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0KLSAgICAgICAgICAg
ICAgICBhbGxvY2F0ZU9iamVjdDxKU0FycmF5QnVmZmVyVmlldz4oc3RydWN0dXJlLCBtX291dC5p
bnRQdHJaZXJvLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHN0b3Jh
Z2UsIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwot
ICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihzaXplLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMu
SlNBcnJheUJ1ZmZlclZpZXdfbGVuZ3RoKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9v
dXQuY29uc3RJbnQzMihGYXN0VHlwZWRBcnJheSksIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5K
U0FycmF5QnVmZmVyVmlld19tb2RlKTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFz
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
Q2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1
ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUo
dHlwZSksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc2l6ZSk7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dS
ZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNl
IFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwo
Ci0gICAgICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
TmV3VHlwZWRBcnJheVdpdGhPbmVBcmd1bWVudEZvclR5cGUodHlwZSkpLAotICAgICAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1
Y3R1cmUodHlwZSkpLCBhcmd1bWVudCk7Ci0KLSAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG9iamVj
dCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldFN0b3JhZ2UoYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkK
LSAgICB7Ci0gICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBtX25vZGUtPnRyYW5zaXRp
b24oKTsKLSAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UoCi0gICAgICAgICAgICByZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJh
bnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5leHQpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb21waWxlVG9TdHJpbmdPckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpCi0gICAgewotICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2Ug
U3RyaW5nT2JqZWN0VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxs
KG1fbm9kZS0+Y2hpbGQxKCksIGNlbGwpOwotICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0
ZXIobV9ub2RlLT5jaGlsZDEoKSwgU3BlY1N0cmluZ09iamVjdCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBl
ck9iamVjdF9pbnRlcm5hbFZhbHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOiB7Ci0g
ICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfc3RydWN0dXJlSUQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBub3RTdHJpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIFN0cmluZ09yU3Ry
aW5nT2JqZWN0IG5vdCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgU3RyaW5nT3JTdHJp
bmdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBzaW1wbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2VsbCk7Ci0gICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQs
IG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKLSAgICAgICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vdFN0cmluZywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09i
amVjdEZvclN0cnVjdHVyZUlEKG1fbm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWRSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAg
ICAgICAgICAgICAgbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9p
bnRlcm5hbFZhbHVlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNp
bXBsZVJlc3VsdCwgdW5ib3hlZFJlc3VsdCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nIHwgU3BlY1N0
cmluZ09iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICAgICAgTFZhbHVlIHZhbHVlOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBD
ZWxsVXNlL1VudHlwZWRVc2UgaXMgY2VsbCIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVk
VXNlIG5vdCBzdHJpbmciKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBjb250
aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBpc0NlbGxQcmVk
aWNhdGU7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2Vs
bFVzZSkKLSAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuVHJ1
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSB0
aGlzLT5pc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbFByZWRpY2F0ZSwgdW5zdXJlKGlzQ2VsbCksIHVuc3Vy
ZShub3RTdHJpbmcpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGwsIG5vdFN0cmluZyk7Ci0gICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBzaW1wbGVSZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOwotICAgICAg
ICAgICAgTFZhbHVlIGlzU3RyaW5nUHJlZGljYXRlOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+
Y2hpbGQxKCktPnByZWRpY3Rpb24oKSAmIFNwZWNTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBp
c1N0cmluZ1ByZWRpY2F0ZSA9IGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJl
ZGljYXRlID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
U3RyaW5nUHJlZGljYXRlLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwotICAgICAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCi0gICAgICAgICAgICAg
ICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/
IG9wZXJhdGlvblRvU3RyaW5nT25DZWxsIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9y
T25DZWxsKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBt
X291dC5vcGVyYXRpb24obV9ub2RlLT5vcCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJp
bmcgOiBvcGVyYXRpb25DYWxsU3RyaW5nQ29uc3RydWN0b3IpOwotICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgY29udmVydGVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChtX291dC5pbnQ2
NCwgb3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnQ2NCwgc2ltcGxlUmVzdWx0LCBjb252ZXJ0ZWRSZXN1bHQpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVUb1ByaW1pdGl2ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9QcmltaXRpdmUgY2VsbCBjYXNlIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBpc09iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvUHJpbWl0aXZlIG9iamVjdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkp
OwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250
aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNPYmplY3RDYXNlKTsKLSAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVuc3VyZShpc09iamVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpc09iamVjdENhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlKSwg
bV9jYWxsRnJhbWUsIHZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTWFrZVJvcGUoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIGtpZHNbM107Ci0gICAgICAgIHVuc2lnbmVkIG51bUtpZHM7Ci0gICAgICAgIGtpZHNb
MF0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBraWRzWzFdID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKLSAg
ICAgICAgICAgIGtpZHNbMl0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAg
ICAgbnVtS2lkcyA9IDM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBraWRzWzJdID0g
MDsKLSAgICAgICAgICAgIG51bUtpZHMgPSAyOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUg
c2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIk1ha2VSb3BlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNs
b3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0K
LSAgICAgICAgICAgIHZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3Rvcihz
aXplb2YoSlNSb3BlU3RyaW5nKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
YWxsb2NhdGVDZWxsKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciks
Ci0gICAgICAgICAgICB2bSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSwKLSAgICAgICAgICAgIHNs
b3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clpl
cm8sIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1LaWRzOyArK2kpCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihr
aWRzW2ldLCByZXN1bHQsIG1faGVhcHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG51bUtpZHM7IGkgPCBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJu
YWxSb3BlTGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQ
dHJaZXJvLCByZXN1bHQsIG1faGVhcHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7Ci0gICAgICAg
IExWYWx1ZSBmbGFncyA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2Zs
YWdzKTsKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBu
dW1LaWRzOyArK2kpIHsKLSAgICAgICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdzLCBt
X291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19mbGFncykpOwotICAgICAgICAg
ICAgQ2hlY2tWYWx1ZSogbGVuZ3RoQ2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCi0gICAgICAg
ICAgICAgICAgbGVuZ3RoLCBtX291dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19s
ZW5ndGgpKTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24obGVuZ3RoQ2hlY2ssIFVuY291
bnRhYmxlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKLSAgICAgICAgICAgIGxlbmd0
aCA9IGxlbmd0aENoZWNrOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAg
ICAgICAgICBtX291dC5iaXRBbmQobV9vdXQuY29uc3RJbnQzMihKU1N0cmluZzo6SXM4Qml0KSwg
ZmxhZ3MpLAotICAgICAgICAgICAgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKLSAg
ICAgICAgbV9vdXQuc3RvcmUzMihsZW5ndGgsIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19sZW5n
dGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihyZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZTsKLSAgICAgICAgc3dpdGNoIChudW1LaWRzKSB7
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
Ml0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHNsb3dSZXN1
bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3Rv
cjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9y
PiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIo
KSk7Ci0gICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgbnVtYmVyIG9mIGNoaWxkcmVuIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdD
aGFyQXQoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigp
KTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgZmFzdCBwYXRoIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5n
IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JF
cXVhbCgKLSAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFz
ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKSwKLSAgICAgICAgICAgIHJhcmVseShzbG93UGF0
aCksIHVzdWFsbHkoZmFzdFBhdGgpKTsKLSAgICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1f
aGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDgtYml0IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIFN0cmluZyAxNi1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Yml0c0NvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5n
IGJpdG5lc3MgY29udGludWF0aW9uIikpOwotICAgICAgICBMQmFzaWNCbG9jayBiaWdDaGFyYWN0
ZXIgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBiaWcgY2hhcmFjdGVy
IikpOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgIHVu
c3VyZShpczE2Qml0KSwgdW5zdXJlKGlzOEJpdCkpOwotICAgICAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2hhcjhCaXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5j
aGFyYWN0ZXJzOCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAg
ICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoYml0c0NvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oaXMxNkJpdCwgYmlnQ2hhcmFjdGVyKTsKLQotICAgICAgICBMVmFsdWUgY2hhcjE2Qml0VmFs
dWUgPSBtX291dC5sb2FkMTZaZXJvRXh0MzIoCi0gICAgICAgICAgICBtX291dC5iYXNlSW5kZXgo
Ci0gICAgICAgICAgICAgICAgbV9oZWFwcy5jaGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnpl
cm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hv
cihjaGFyMTZCaXRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChjaGFyMTZCaXRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDEwMCkp
LAotICAgICAgICAgICAgcmFyZWx5KGJpZ0NoYXJhY3RlciksIHVzdWFsbHkoYml0c0NvbnRpbnVh
dGlvbikpOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpZ0NoYXJhY3Rl
ciwgYml0c0NvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVl
RnJvbUJsb2NrLCA0PiByZXN1bHRzOwotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNo
YXIxNkJpdFZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oYml0c0NvbnRpbnVhdGlvbiwgc2xvd1Bh
dGgpOwotICAgICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjaGFyYWN0ZXIgPSBtX291dC5waGko
bV9vdXQuaW50MzIsIGNoYXI4Qml0LCBjaGFyMTZCaXQpOwotICAgICAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCgKLSAg
ICAgICAgICAgIG1faGVhcHMuc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBt
X291dC56ZXJvRXh0UHRyKGNoYXJhY3RlcikpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMs
IG5vVmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmludFB0clplcm8pKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoZ2xvYmFsT2JqZWN0LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY291bGQgYmUgY2FwdHVyZWQgdXNp
bmcgYSBTcGVjdWxhdGlvbiBtb2RlIHRoYXQgbWVhbnMKLSAgICAgICAgICAgICAgICAvLyAib3V0
LW9mLWJvdW5kcyBsb2FkcyByZXR1cm4gYSB0cml2aWFsIHZhbHVlIiwgc29tZXRoaW5nIGxpa2UK
LSAgICAgICAgICAgICAgICAvLyBTYW5lQ2hhaW5PdXRPZkJvdW5kcy4KLSAgICAgICAgICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseShnbG9iYWxPYmplY3QtPnN0cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbmVnYXRpdmVJbmRleCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiR2V0QnlWYWwgU3RyaW5nIG5lZ2F0aXZlIGluZGV4IikpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7Ci0gICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihpbmRl
eCwgbV9vdXQuaW50MzJaZXJvKSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KG5lZ2F0aXZl
SW5kZXgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZWdhdGl2ZUluZGV4LCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5h
cHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KSwgbV9jYWxsRnJhbWUs
IGJhc2UsIGluZGV4KSkpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJp
bmdDaGFyQ29kZUF0KCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nQ2hhckNvZGVBdCA4LWJpdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBpczE2Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFy
Q29kZUF0IDE2LWJpdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgY29udGludWF0aW9uIikp
OwotCi0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAg
IExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAg
Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCks
IDAsCi0gICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgaW5k
ZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3Ro
KSkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
KSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhC
aXQoKSkpLAotICAgICAgICAgICAgdW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpczhCaXQsIGlzMTZCaXQpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGNoYXI4Qml0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0
MzIobV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgs
IHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgIHByb3Zl
blZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyMTZC
aXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkMTZaZXJvRXh0MzIobV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2LCBzdG9y
YWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKLSAgICAgICAgICAgICAgICBwcm92ZW5WYWx1
ZShtX25vZGUtPmNoaWxkMigpKSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIAotICAgICAgICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIGNo
YXI4Qml0LCBjaGFyMTZCaXQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdGcm9t
Q2hhckNvZGUoKQotICAgIHsKLSAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBtX25vZGUtPmNoaWxk
MSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gVW50eXBl
ZFVzZSkgewotICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAg
ICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFy
Q29kZVVudHlwZWQpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNo
aWxkRWRnZSkpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
IGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UpOwotCi0gICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0ludDMyKGNoaWxkRWRnZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBz
bWFsbEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBz
bWFsbCBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBzbG93IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5n
RnJvbUNoYXJDb2RlIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHhm
ZikpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEludENhc2Up
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxs
SW50Q2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291
dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
OwotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cigKLSAgICAg
ICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIHNt
YWxsU3RyaW5ncywgbV9vdXQuemVyb0V4dFB0cih2YWx1ZSkpKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblN0cmluZ0Zyb21DaGFyQ29kZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsK
LSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotCi0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZUdldEJ5T2Zmc2V0KCkKLSAgICB7Ci0gICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhJiBkYXRhID0gbV9ub2RlLT5zdG9yYWdlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAg
ICAgICAgc2V0SlNWYWx1ZShsb2FkUHJvcGVydHkoCi0gICAgICAgICAgICBsb3dTdG9yYWdlKG1f
bm9kZS0+Y2hpbGQxKCkpLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIsIGRhdGEub2Zmc2V0KSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdldEdldHRlcigpCi0gICAgewotICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFw
cy5HZXR0ZXJTZXR0ZXJfZ2V0dGVyKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdl
dFNldHRlcigpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5HZXR0ZXJTZXR0ZXJfc2V0dGVyKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZU11bHRpR2V0QnlPZmZzZXQoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCk7Ci0KLSAgICAgICAgaWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJv
IGlucHV0cy4gTExWTSBkb2Vzbid0IGxpa2UgdGhhdC4KLSAgICAgICAgICAgIHRlcm1pbmF0ZShC
YWRDYWNoZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIFZlY3RvcjxMQmFzaWNCbG9jaywgMj4gYmxvY2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspCi0gICAgICAg
ICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQg
Y2FzZSAiLCBpKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgZmFpbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRp
bnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNl
czsKLSAgICAgICAgU3RydWN0dXJlU2V0IGJhc2VTZXQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGdldENhc2Uuc2V0KCkuc2l6ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBnZXRDYXNlLnNldCgpW2pdOwotICAgICAgICAgICAgICAgIGJh
c2VTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRj
aENhc2Uod2Vha1N0cnVjdHVyZUlEKHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rp
b24oCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBjYXNlcywgZXhpdCwgV2VpZ2h0KDApKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7Ci0gICAgICAgIAotICAgICAgICBW
ZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBNdWx0aUdldEJ5T2Zm
c2V0Q2FzZSBnZXRDYXNlID0gZGF0YS5jYXNlc1tpXTsKLSAgICAgICAgICAgIEdldEJ5T2Zmc2V0
TWV0aG9kIG1ldGhvZCA9IGdldENhc2UubWV0aG9kKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/
IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgp
KSB7Ci0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgotICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0
aG9kOjpDb25zdGFudDoKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShtZXRob2QuY29uc3RhbnQoKS0+dmFsdWUoKSkpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldE1ldGhvZDo6TG9hZDoKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6Okxv
YWRGcm9tUHJvdG90eXBlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsK
LSAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6
TG9hZCkKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2lu
dGVyKG1ldGhvZC5wcm90b3R5cGUoKS0+dmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpc0lubGluZU9mZnNldChtZXRob2Qub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eUJhc2UgPSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBsb2FkUHJvcGVydHkoCi0gICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5QmFzZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihiYXNlU2V0KSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUHV0QnlPZmZzZXQoKQotICAgIHsKLSAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIAotICAgICAgICBzdG9yZVByb3BlcnR5KAotICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMygpKSwKLSAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDEoKSksIGRhdGEuaWRlbnRpZmllck51bWJlciwgZGF0YS5vZmZzZXQpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIE11
bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
OwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52
YXJpYW50cy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTXVsdGlQdXRCeU9mZnNldCBjYXNlICIsIGkpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
ZXhpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBmYWlsIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik11bHRpUHV0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVj
dG9yPFN3aXRjaENhc2UsIDI+IGNhc2VzOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
LSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXpl
KCk7IGotLTspIHsKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlh
bnQub2xkU3RydWN0dXJlKClbal07Ci0gICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0
dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAg
IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBl
eGl0LCBXZWlnaHQoMCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5tX25leHRCbG9jazsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhibG9ja3NbaV0sIGkgKyAxIDwgZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFd
IDogZXhpdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlh
bnQgPSBkYXRhLnZhcmlhbnRzW2ldOwotCi0gICAgICAgICAgICBjaGVja0luZmVycmVkVHlwZSht
X25vZGUtPmNoaWxkMigpLCB2YWx1ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlOwotICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlID0gYmFzZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoYmFzZSk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFk
ZExhemlseSgKLSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAgICAgICAgICAgICAgICB2YXJpYW50
Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFu
c2l0aW9uKAotICAgICAgICAgICAgICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAotICAg
ICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7Ci0KLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3
U3RydWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZs
YWdzKCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxh
Z3MoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJh
bnNpdGlvbigpLT50eXBlSW5mbygpLnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50
eXBlSW5mbygpLnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAg
ICAgICAgICAgICAgICAgd2Vha1N0cnVjdHVyZUlEKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBi
YXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHN0b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGV4aXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JO
b2RlKG1fbm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
Ym9vbGVhblRydWUpOwotICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgY29tcGlsZUdldEdsb2JhbFZhcmlhYmxlKCkKLSAgICB7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2lu
dGVyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxl
KCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5hYnNvbHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRl
cigpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKCkKLSAgICB7
Ci0gICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOwot
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90
aWZ5V3JpdGUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0YXRl
ID0gbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0
ZSgpKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0
YXRlLCBtX291dC5jb25zdEludDMyKElzSW52YWxpZGF0ZWQpKSwKLSAgICAgICAgICAgIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlzTm90SW52YWxpZGF0ZWQpKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlk
YXRlZCwgY29udGludWF0aW9uKTsKLQotICAgICAgICBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BS
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0KSk7Ci0gICAgICAgICAgICB9KTsK
LSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldENhbGxlZSgpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihKU1N0YWNrOjpDYWxsZWUpKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldEFyZ3VtZW50Q291bnQoKQotICAgIHsKLSAgICAgICAgc2V0SW50MzIobV9v
dXQubG9hZDMyKHBheWxvYWRGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjb21waWxlR2V0U2NvcGUoKQotICAgIHsKLSAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNGdW5j
dGlvbl9zY29wZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoKQot
ICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSksIG1faGVhcHMuSlNTY29wZV9uZXh0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZUdldENsb3N1cmVWYXIoKQotICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAg
ICAgICAgIG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpLAotICAgICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJp
YWJsZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
NjQoCi0gICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAotICAgICAgICAg
ICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1faGVhcHMuSlNFbnZp
cm9ubWVudFJlY29yZF92YXJpYWJsZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUdldEZyb21Bcmd1bWVudHMoKQotICAgIHsK
LSAgICAgICAgc2V0SlNWYWx1ZSgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKLSAgICAgICAg
ICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgIG1faGVh
cHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNl
dCgpLm9mZnNldCgpXSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3Vt
ZW50cygpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMigpKSwKLSAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSksCi0gICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9k
ZS0+Y2FwdHVyZWRBcmd1bWVudHNPZmZzZXQoKS5vZmZzZXQoKV0pOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVDb21wYXJlRXEoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKEludDMyVXNlKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVz
ZUtpbmQoSW50NTJSZXBVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChEb3VibGVSZXBVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFu
VXNlKQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKQot
ICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpCi0g
ICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7Ci0gICAg
ICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RVc2UsIE9iamVjdE9yT3RoZXJVc2UpKSB7Ci0gICAgICAgICAgICBjb21wYXJlRXFPYmpl
Y3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDIoKSwgbV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RPck90aGVyVXNlLCBPYmplY3RVc2UpKSB7Ci0gICAg
ICAgICAgICBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDEoKSwg
bV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewot
ICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKAotICAgICAgICAgICAgICAgIFsmXSAo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAg
ICAgICAgb3BlcmF0aW9uQ29tcGFyZUVxKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkg
ewotICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9k
ZS0+Y2hpbGQxKCksIFNwZWNPdGhlcikpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51
bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMigpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51
bGxPclVuZGVmaW5lZCwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5k
KCkgPT0gT3RoZXJVc2UpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVk
c1R5cGVDaGVjayhtX25vZGUtPmNoaWxkMigpLCBTcGVjT3RoZXIpKTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNB
cmVGYWxzZSwgRXF1YWxOdWxsT3JVbmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlQ29tcGFyZVN0cmljdEVxKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChJbnQzMlVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAg
ICAgICAgICAgbV9vdXQuZXF1YWwobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkp
IHsKLSAgICAgICAgICAgIEludDUyS2luZCBraW5kOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQg
PSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbChsZWZ0LCByaWdodCkpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoRG91YmxlUmVwVXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAg
ICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSks
IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3Ry
aW5nSWRlbnRVc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAgICAgICAgICAg
IG1fb3V0LmVxdWFsKGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dTdHJpbmdJ
ZGVudChtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKLSAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFRyaXZpYWxseUVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ29tcGFyZVN0cmljdEVxL1N0cmluZyBub3QgdHJpdmlhbGx5IGVxdWFsIGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcS9TdHJpbmcgY29udGludWF0aW9uIikpOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCk7Ci0KLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1f
b3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RU
cml2aWFsbHlFcXVhbENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhub3RUcml2aWFsbHlFcXVhbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhtX25vZGUtPmNoaWxkMigpLCByaWdodCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Ioc3RyaW5nc0VxdWFsKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVz
ZSwgVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICAg
ICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9u
b2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE9iamVjdFVzZSkp
IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwo
Ci0gICAgICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSks
Ci0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmlu
YXJ5VXNlS2luZChPYmplY3RVc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2Jq
ZWN0KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNl
KSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVh
bChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQy
KCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxl
ZnQgPSBsb3dTeW1ib2wobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmln
aHQgPSBsb3dTeW1ib2wobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgbGVm
dFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGxlZnQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVO
YW1lKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHJpZ2h0LCBtX2hlYXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7Ci0gICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LmVxdWFsKGxlZnRTdHJpbmdJbXBsLCByaWdodFN0cmluZ0ltcGwpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE1pc2NVc2UsIFVudHlwZWRVc2UpCi0gICAgICAgICAgICB8fCBtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlLCBNaXNjVXNlKSkgewotICAgICAgICAgICAg
c3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFyVXNl
KQotICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTm90U3RyaW5nVmFyVXNl
LCBTdHJpbmdJZGVudFVzZSkpIHsKLSAgICAgICAgICAgIEVkZ2UgbGVmdEVkZ2UgPSBtX25vZGUt
PmNoaWxkRm9yKFN0cmluZ0lkZW50VXNlKTsKLSAgICAgICAgICAgIEVkZ2UgcmlnaHRFZGdlID0g
bV9ub2RlLT5jaGlsZEZvcihOb3RTdHJpbmdWYXJVc2UpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgbGVmdCA9IGxvd1N0cmluZ0lkZW50KGxlZnRFZGdlKTsKLSAgICAgICAgICAg
IExWYWx1ZSByaWdodFZhbHVlID0gbG93SlNWYWx1ZShyaWdodEVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVu
dCB0byBOb3RTdHJpbmdWYXIgaXMgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEg
U3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21w
YXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbChyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0
RWRnZSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub3RTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhbkZhbHNlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBp
c1N0cmluZyhyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAotICAgICAgICAgICAg
ICAgIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IG1fb3V0LmxvYWRQdHIocmlnaHRWYWx1
ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJ
ZGVudChyaWdodEVkZ2UsIHJpZ2h0VmFsdWUsIHJpZ2h0KTsKLSAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGlzU3RyaW5nUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKGxlZnQsIHJp
Z2h0KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJl
c3VsdCwgbm90U3RyaW5nUmVzdWx0LCBpc1N0cmluZ1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kcyIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21w
YXJlU3RyaWN0RXFDb25zdGFudCgpCi0gICAgewotICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0g
bV9ub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVlKCk7Ci0KLSAgICAgICAgc2V0Qm9vbGVhbigKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpl
bmNvZGUoY29uc3RhbnQpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJl
TGVzcygpCi0gICAgewotICAgICAgICBjb21wYXJlKAotICAgICAgICAgICAgWyZdIChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NU
aGFuKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91
YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIG9w
ZXJhdGlvbkNvbXBhcmVMZXNzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29tcGFy
ZUxlc3NFcSgpCi0gICAgewotICAgICAgICBjb21wYXJlKAotICAgICAgICAgICAgWyZdIChMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxl
c3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAg
WyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JFcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVHcmVhdGVyKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0g
ICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAg
ICAgICAgICAgIHJldHVybiBtX291dC5kb3VibGVHcmVhdGVyVGhhbihsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJlR3JlYXRlckVxKCkKLSAgICB7Ci0gICAg
ICAgIGNvbXBhcmUoCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGxlZnQs
IHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRl
clRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBv
cGVyYXRpb25Db21wYXJlR3JlYXRlckVxKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
TG9naWNhbE5vdCgpCi0gICAgewotICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmxvZ2ljYWxOb3Qo
Ym9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNh
bGxPckNvbnN0cnVjdCgpCi0gICAgewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAg
ICAgICB1bnNpZ25lZCBudW1BcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0KLSAgICAg
ICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLQotICAgICAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVI
ZWFkZXJTaXplICsgbnVtQXJnczsKLSAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBmcmFt
ZVNpemUpOwotCi0gICAgICAgIC8vIEpTLT5KUyBjYWxsaW5nIGNvbnZlbnRpb24gcmVxdWlyZXMg
dGhhdCB0aGUgY2FsbGVyIGFsbG93cyB0aGlzIG11Y2ggc3BhY2Ugb24gdG9wIG9mIHN0YWNrIHRv
Ci0gICAgICAgIC8vIGdldCB0cmFzaGVkIGJ5IHRoZSBjYWxsZWUsIGV2ZW4gaWYgbm90IGFsbCBv
ZiB0aGF0IHNwYWNlIGlzIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMuIFdlIHRlbGwKLSAgICAgICAg
Ly8gQjMgdGhpcyBleHBsaWNpdGx5IGZvciB0d28gcmVhc29uczoKLSAgICAgICAgLy8KLSAgICAg
ICAgLy8gLSBXZSB3aWxsIG9ubHkgcGFzcyBmcmFtZVNpemUgd29ydGggb2Ygc3R1ZmYuCi0gICAg
ICAgIC8vIC0gVGhlIHRyYXNoZWQgc3RhY2sgZ3VhcmFudGVlIGlzIGxvZ2ljYWxseSBzZXBhcmF0
ZSBmcm9tIHRoZSBhY3Qgb2YgcGFzc2luZyBhcmd1bWVudHMsIHNvIHdlCi0gICAgICAgIC8vICAg
c2hvdWxkbid0IHJlbHkgb24gQWlyIHRvIGluZmVyIHRoZSB0cmFzaGVkIHN0YWNrIHByb3BlcnR5
IGJhc2VkIG9uIHRoZSBhcmd1bWVudHMgaXQgZW5kcwotICAgICAgICAvLyAgIHVwIHNlZWluZy4K
LSAgICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYWxpZ25lZEZyYW1lU2l6ZSk7
Ci0KLSAgICAgICAgLy8gQ29sbGVjdCB0aGUgYXJndW1lbnRzLCBzaW5jZSB0aGlzIGNhbiBnZW5l
cmF0ZSBjb2RlIGFuZCB3ZSB3YW50IHRvIGdlbmVyYXRlIGl0IGJlZm9yZSB3ZSBlbWl0Ci0gICAg
ICAgIC8vIHRoZSBjYWxsLgotICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1l
bnRzOwotCi0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIEdQ
UjAgYmVjYXVzZSB0aGF0J3Mgd2hlcmUgdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0IHRoZQot
ICAgICAgICAvLyBjYWxsZWUgdG8gYmUuCi0gICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3Ry
YWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKLQot
ICAgICAgICBhdXRvIGFkZEFyZ3VtZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdp
c3RlciByZWcsIGludCBvZmZzZXQpIHsKLSAgICAgICAgICAgIGludHB0cl90IG9mZnNldEZyb21T
UCA9Ci0gICAgICAgICAgICAgICAgKHJlZy5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1l
QW5kUENTaXplKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXQ7Ci0gICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpzdGFj
a0FyZ3VtZW50KG9mZnNldEZyb21TUCkpKTsKLSAgICAgICAgfTsKLQotICAgICAgICBhZGRBcmd1
bWVudChqc0NhbGxlZSwgVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIDApOwotICAg
ICAgICBhZGRBcmd1bWVudChtX291dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0
ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCksIFBheWxvYWRPZmZzZXQpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKQotICAgICAgICAgICAgYWRkQXJndW1l
bnQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpLCAwKTsKLQotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBh
dGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+
YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNl
cHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hw
b2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBv
aW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgIHBhdGNocG9pbnQtPmNsb2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVy
c0ZvckpTQ2FsbCgpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZh
bHVlUmVwOjpyZWcoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotCi0gICAgICAgIENvZGVPcmln
aW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKLSAgICAg
ICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRk
VW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0
ZUluZGV4KTsKLQotICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKAotICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCi0g
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotCi0gICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwotCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNo
UHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFs
LCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKLQotICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBmYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLQotICAgICAgICAgICAgICAgIHNs
b3dQYXRoLmxpbmsoJmppdCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOwot
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGNhbGxM
aW5rSW5mby0+c2V0VXBDYWxsKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENv
bnN0cnVjdCA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLAot
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1Qw
KTsKLQotICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtU
YXNrKAotICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIo
bGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxl
QWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0
Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2spLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCi0gICAg
ewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
ID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7Ci0KLSAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFdlIHdhbnQgQjMgdG8gZ2l2ZSB1cyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB1c2luZyB3
aGF0ZXZlciBtZWNoYW5pc20gaXQgdGhpbmtzIGlzCi0gICAgICAgIC8vIGNvbnZlbmllbnQuIFRo
ZSBnZW5lcmF0b3IgdGhlbiBzaHVmZmxlcyB0aG9zZSBhcmd1bWVudHMgaW50byBvdXIgb3duIGNh
bGwgZnJhbWUsCi0gICAgICAgIC8vIGRlc3Ryb3lpbmcgb3VyIGZyYW1lIGluIHRoZSBwcm9jZXNz
LgotCi0gICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNw
ZWNpYWwgZm9yIGV4Y2VwdGlvbnMuIEEgdGFpbCBjYWxsIGlzIG9ubHkgYQotICAgICAgICAvLyB0
YWlsIGNhbGwgaWYgaXQgaXMgbm90IGluc2lkZSBhIHRyeSBibG9jay4KLQotICAgICAgICBWZWN0
b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOwotCi0gICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdU
MCkpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7
Ci0gICAgICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBsZXQgdGhlIHNodWZmbGVyIGRvIGJveGlu
ZyBmb3IgdXMsIGJ1dCBpdCdzIG5vdCBzdXBlciBjbGVhciB0aGF0IHRoaXMKLSAgICAgICAgICAg
IC8vIHdvdWxkIGJlIGJldHRlci4gQWxzbywgaWYgd2Ugd2FudGVkIHRvIGRvIHRoYXQsIHRoZW4g
d2UnZCBoYXZlIHRvIHRlYWNoIHRoZSBzaHVmZmxlcgotICAgICAgICAgICAgLy8gdGhhdCAzMi1i
aXQgdmFsdWVzIGNvdWxkIGxhbmQgYXQgNC1ieXRlIGFsaWdubWVudCBidXQgbm90IDgtYnl0ZSBh
bGlnbm1lbnQuCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY29u
c3RyYWluZWRWYWx1ZSgKLSAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSArIGkpKSwKLSAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6V2FybUFueSk7
Ci0gICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGNvbnN0cmFpbmVkVmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hw
b2ludChWb2lkKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7
Ci0KLSAgICAgICAgLy8gUHJldmVudCBhbnkgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHVzaW5nIHRo
ZSBzY3JhdGNoIHJlZ2lzdGVyLgotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAgICAgICAvLyBXZSBkb24n
dCBoYXZlIHRvIHRlbGwgdGhlIHBhdGNocG9pbnQgdGhhdCB3ZSB3aWxsIGNsb2JiZXIgcmVnaXN0
ZXJzLCBzaW5jZSB3ZSB3b24ndCByZXR1cm4KLSAgICAgICAgLy8gYW55d2F5LgotCi0gICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUo
KTsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5j
b21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwotICAgICAgICAgICAgICAgIHNo
dWZmbGVEYXRhLm51bUxvY2FscyA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3Rl
ckNvdW50OwotICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zl
cnk6OmluR1BSKEdQUkluZm86OnJlZ1QwLCBEYXRhRm9ybWF0SlMpOwotCi0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgc2h1ZmZsZURhdGEuYXJncy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpT
VmFsdWUoKSk7Ci0KLSAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVS
ZWdpc3RlcnMoaml0LmNvZGVCbG9jaygpKTsKLQotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5m
byogY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLQot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7
Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5j
aFB0cldpdGhQYXRjaCgKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVh
bCwgR1BSSW5mbzo6cmVnVDAsIHRhcmdldFRvQ2hlY2ssCi0gICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0KLSAgICAgICAgICAgICAgICBjYWxsTGlu
a0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAg
IENhbGxGcmFtZVNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5l
YXJUYWlsQ2FsbCgpOwotCi0gICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQot
ICAgICAgICAgICAgICAgIC8vIFllcywgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LiBZb3UgY291
bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGluIGEgaG9zdCBjYWxsIG9uIHRoZQotICAgICAgICAgICAg
ICAgIC8vIHNsb3cgcGF0aC4gVGhhdCdsbCByb3V0ZSB1cyB0byBsb29rdXBFeGNlcHRpb25IYW5k
bGVyKCksIHdoaWNoIHVud2luZHMgc3RhcnRpbmcKLSAgICAgICAgICAgICAgICAvLyB3aXRoIHRo
ZSBjYWxsIHNpdGUgaW5kZXggb2Ygb3VyIGZyYW1lLiBCYWQgdGhpbmdzIGhhcHBlbiBpZiBpdCdz
IG5vdCBzZXQuCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlciBzbG93UGF0aFNodWZmbGVyKGppdCwgc2h1ZmZsZURhdGEpOwotICAgICAgICAgICAgICAg
IHNsb3dQYXRoU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5m
bzo6cmVnVDApKTsKLSAgICAgICAgICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JT
bG93UGF0aCgpOwotCi0gICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLQotICAgICAg
ICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsK
LQotICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
VGFpbENhbGwsIGNvZGVPcmlnaW4sIEdQUkluZm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgICAg
IGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0o
KS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0Nh
bGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxs
TGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0
Q2FsbCkpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCi0gICAgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwotICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDMoKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRy
OwotICAgICAgICBib29sIGZvcndhcmRpbmcgPSBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgotICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6Ci0gICAgICAgICAgICBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAg
ICAgICBmb3J3YXJkaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBl
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0KLSAg
ICAgICAgLy8gQXBwZW5kIHRoZSBmb3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1
c2UgYmVmb3JlIGFueSBjbG9iYmVyaW5nIGhhcHBlbnMuCi0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChqc0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOwotICAgICAgICBp
ZiAoanNBcmd1bWVudHMpCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0
ZXIoanNBcmd1bWVudHMpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIo
dGhpc0FyZyk7Ci0KLSAgICAgICAgaWYgKCFmb3J3YXJkaW5nKSB7Ci0gICAgICAgICAgICAvLyBO
b3cgYXBwZW5kIHRoZW0gYWdhaW4gZm9yIGFmdGVyIGNsb2JiZXJpbmcuIE5vdGUgdGhhdCB0aGUg
Y29tcGlsZXIgbWF5IGFzayB1cyB0byB1c2UgYQotICAgICAgICAgICAgLy8gZGlmZmVyZW50IHJl
Z2lzdGVyIGZvciB0aGUgbGF0ZSBmb3IgdGhlIHBvc3QtY2xvYmJlcmluZyB2ZXJzaW9uIG9mIHRo
ZSB2YWx1ZS4gVGhpcyBnaXZlcwotICAgICAgICAgICAgLy8gdGhlIGNvbXBpbGVyIGEgY2hhbmNl
IHRvIHNwaWxsIHRoZXNlIHZhbHVlcyB3aXRob3V0IGhhdmluZyB0byBidXJuIGFueSBjYWxsZWUt
c2F2ZXMuCi0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVw
OjpMYXRlQ29sZEFueSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNBcmd1bWVu
dHMsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Ci0gICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmQodGhpc0FyZywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAg
ICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOwotICAg
ICAgICAKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3Jh
dGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3Rl
clNldDo6dm9sYXRpbGVSZWdpc3RlcnNGb3JKU0NhbGwoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQt
PnJlc3VsdENvbnN0cmFpbnQgPSBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BS
KTsKLQotICAgICAgICAvLyBUaGlzIGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjYWxsIGFyZyBh
cmVhIHN0YWNrIHNwYWNlIHRoYXQgYWxsIEpTLT5KUyBjYWxscyBhbHdheXMgaGF2ZS4KLSAgICAg
ICAgdW5zaWduZWQgbWluaW11bUpTQ2FsbEFyZWFTaXplID0KLSAgICAgICAgICAgIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSArCi0gICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7Ci0KLSAg
ICAgICAgbV9wcm9jLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUobWluaW11bUpTQ2FsbEFyZWFTaXpl
KTsKLSAgICAgICAgCi0gICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5E
ZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1z
KSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93
U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCA9Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVl
Q2FsbFNpdGVJbmRleChjb2RlT3JpZ2luKTsKLQotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotCi0g
ICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVu
d2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgaml0LnN0b3Jl
MzIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdG
b3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAg
ICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRk
Q2FsbExpbmtJbmZvKCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0g
bm9kZS0+Y2FsbFZhcmFyZ3NEYXRhKCk7Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJ
bmRleCA9IDE7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1thcmdJ
bmRleCsrXS5ncHIoKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoY2FsbGVlR1BSID09IEdQUklu
Zm86OnJlZ1QwKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0ganNBcmd1
bWVudHMgPyBwYXJhbXNbYXJnSW5kZXgrK10uZ3ByKCkgOiBJbnZhbGlkR1BSUmVnOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyB0aGlzR1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGNhbGxlZUxhdGVSZXA7Ci0gICAgICAgICAgICAg
ICAgQjM6OlZhbHVlUmVwIGFyZ3VtZW50c0xhdGVSZXA7Ci0gICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIHRoaXNMYXRlUmVwOwotICAgICAgICAgICAgICAgIGlmICghZm9yd2FyZGluZykgewot
ICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgZm9yd2FyZGluZyB0aGVuIHdlJ2xs
IG5lZWQgY2FsbGVlLCBhcmd1bWVudHMsIGFuZCB0aGlzIGFmdGVyIHdlCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgcG90ZW50aWFsbHkgY2xvYmJlcmVkIGNhbGxlZUdQUiwgYXJndW1lbnRz
R1BSLCBhbmQgdGhpc0dQUi4gT3VyIHRlY2huaXF1ZQotICAgICAgICAgICAgICAgICAgICAvLyBm
b3IgdGhpcyBpcyB0byBzdXBwbHkgYWxsIG9mIHRob3NlIG9wZXJhbmRzIGFzIGxhdGUgdXNlcyBp
biBhZGRpdGlvbiB0bwotICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoZW0gYXMg
ZWFybHkgdXNlcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBsYXRlIHVzZSB1c2VzIGEgc3BpbGwK
LSAgICAgICAgICAgICAgICAgICAgLy8gd2hpbGUgdGhlIGVhcmx5IHVzZSB1c2VzIGEgcmVnaXN0
ZXIsIGFuZCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgbGF0ZSBhbmQgZWFybHkKLSAgICAgICAgICAg
ICAgICAgICAgLy8gdXNlcyB0byB1c2UgZGlmZmVyZW50IHJlZ2lzdGVycy4gV2UgZG8ga25vdyB0
aGF0IHRoZSBsYXRlIHVzZXMgaW50ZXJmZXJlIHdpdGgKLSAgICAgICAgICAgICAgICAgICAgLy8g
YWxsIHZvbGF0aWxlIHJlZ2lzdGVycyBhbmQgc28gd29uJ3QgdXNlIHRob3NlLCBidXQgdGhlIGVh
cmx5IHVzZXMgbWF5IHVzZQotICAgICAgICAgICAgICAgICAgICAvLyB2b2xhdGlsZSByZWdpc3Rl
cnMgYW5kIGluIHRoZSBjYXNlIG9mIGNhbGxlZUdQUiwgaXQncyBwaW5uZWQgdG8gcmVnVDAgc28g
aXQKLSAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5pdGVseSB3aWxsLgotICAgICAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBi
ZSBzdXBlciBjYXJlZnVsIHdpdGggdGhlc2UuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZQotICAg
ICAgICAgICAgICAgICAgICAvLyB1c2UgYSBzaHVmZmxpbmcgb2YgdGhlIHJlZ2lzdGVycyB1c2Vk
IGZvciBjYWxsZWVHUFIsIGFyZ3VtZW50c0dQUiwgYW5kCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoaXNHUFIuIElmIHRoYXQgaGFwcGVucyBhbmQgd2UgZG8gZm9yIGV4YW1wbGU6Ci0gICAgICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vICAgICBjYWxsZWVMYXRlUmVw
LmVtaXRSZXN0b3JlKGppdCwgY2FsbGVlR1BSKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
IGFyZ3VtZW50c0xhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOwotICAgICAgICAg
ICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVuIHdlIG1pZ2h0IGVuZCB1
cCB3aXRoIGdhcmJhZ2UgaWYgY2FsbGVlTGF0ZVJlcC5ncHIoKSA9PSBhcmd1bWVudHNHUFIgYW5k
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgPT0gY2FsbGVl
R1BSLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
byBhIHZhcmlldHkgb2YgdGhpbmdzIHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gRm9y
IGV4YW1wbGUsIHdlIHVzZQotICAgICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRlUmVw
IGJlZm9yZSBuZWVkaW5nIHRoZSBvdGhlciB0d28gYW5kIGFmdGVyIHdlJ3ZlIGFscmVhZHkgc3Rv
cHBlZAotICAgICAgICAgICAgICAgICAgICAvLyB1c2luZyB0aGUgKkdQUnMuIEFsc28sIHdlIHBp
biBjYWxsZWVHUFIgdG8gcmVnVDAsIGFuZCByZWx5IG9uIHRoZSBmYWN0IHRoYXQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhlICpMYXRlUmVwcyBjYW5ub3QgdXNlIHZvbGF0aWxlIHJlZ2lzdGVy
cyAoc28gdGhleSBjYW5ub3QgYmUgcmVnVDAsIHNvCi0gICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxlZUdQUiAhPSBhcmd1bWVudHNMYXRlUmVwLmdwcigpIGFuZCBjYWxsZWVHUFIgIT0gdGhpc0xh
dGVSZXAuZ3ByKCkpLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAg
ICAvLyBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBoYXZlIGJlZW4gdG8ganVzdCB1c2UgZWFybHkgdXNl
cyBhbmQgZWFybHktY2xvYmJlciBhbGwKLSAgICAgICAgICAgICAgICAgICAgLy8gdm9sYXRpbGUg
cmVnaXN0ZXJzLiBCdXQgdGhhdCB3b3VsZCBmb3JjZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRo
aXMgaW50bwotICAgICAgICAgICAgICAgICAgICAvLyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZXZl
biBpZiB3ZSBoYXZlIHRvIHNwaWxsIHRoZW0uIFdlIGRvbid0IHdhbnQgc3BpbGxpbmcgdG8KLSAg
ICAgICAgICAgICAgICAgICAgLy8gdXNlIHVwIHRocmVlIGNhbGxlZS1zYXZlcy4KLSAgICAgICAg
ICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVEw7RFI6IFRoZSB3YXkgd2Ug
dXNlIExhdGVSZXBzIGhlcmUgaXMgZGFuZ2Vyb3VzIGFuZCBiYXJlbHkgd29ya3MgYnV0IGFjaGll
dmVzCi0gICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgZGVzaXJhYmxlIHBlcmZvcm1hbmNlIHBy
b3BlcnRpZXMsIHNvIGRvbid0IG1pc3Rha2UgdGhlIGNsZXZlcm5lc3MgZm9yCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGVsZWdhbmNlLgotICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVw
ID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNMYXRl
UmVwID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJl
cCA9IHBhcmFtc1thcmdJbmRleCsrXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBHZXQgc29tZSBzY3JhdGNoIHJlZ2lzdGVycy4KLSAgICAgICAgICAgICAgICBSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzOwotICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVy
Z2UoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7
Ci0gICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKLSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxs
ZWVHUFIpOwotICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJl
ZykKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsK
LSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY2FsbGVlTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLnNldChjYWxsZWVMYXRlUmVwLnJlZygpKTsKLSAgICAgICAgICAgICAgICBpZiAo
YXJndW1lbnRzTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0
ZXJzLnNldChhcmd1bWVudHNMYXRlUmVwLnJlZygpKTsKLSAgICAgICAgICAgICAgICBpZiAodGhp
c0xhdGVSZXAuaXNSZWcoKSkKLSAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQo
dGhpc0xhdGVSZXAucmVnKCkpOwotICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBhbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIxID0gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjMgPSBmb3J3YXJkaW5nID8gYWxsb2Nh
dG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpIDogSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghYWxsb2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOwot
Ci0gICAgICAgICAgICAgICAgYXV0byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lk
KiBjYWxsZWUpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNhbGxlZSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BS
KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9u
QXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0
LmVtaXRFeGNlcHRpb25DaGVjayhBc3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNr
LCBBc3NlbWJseUhlbHBlcnM6OkZhckp1bXBXaWR0aCkpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICBhdXRvIGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICB9OwotCi0gICAgICAgICAgICAgICAg
dW5zaWduZWQgb3JpZ2luYWxTdGFja0hlaWdodCA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZm9yd2FyZGluZykgewotICAgICAgICAgICAgICAgICAg
ICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0
IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nh
c2U7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGpp
dCwgc2NyYXRjaEdQUjIsIHNjcmF0Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5v
ZGUtPmNoaWxkMigpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCwgc2xvd0Nhc2UpOwotCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2UubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhl
Y1N0YXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0
d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93
aW5nUGF0aERpZE5vdFRocm93KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFj
ayhzY3JhdGNoR1BSMik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hl
aWdodCAvIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBz
Y3JhdGNoR1BSMSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdP
ZmZzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKLQotICAgICAg
ICAgICAgICAgICAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQ
UjEpOwotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0
Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9y
ZShqaXQsIGFyZ3VtZW50c0dQUik7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXRTZXRWYXJhcmdz
RnJhbWUoaml0LCBzY3JhdGNoR1BSMSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7
Ci0gICAgICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoLW1pbmltdW1KU0NhbGxBcmVhU2l6ZSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShzY3JhdGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMihkYXRhLT5maXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKLSAg
ICAgICAgICAgICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFjayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIEdQ
UkluZm86OnJlZ1QwKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBub3QgZW1p
dCBjb2RlIGlmIHRoaXNHUFIgZ290IGEgY2FsbGVlLXNhdmUuIEFsc28sIHdlJ3JlIGd1YXJhbnRl
ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzR1BSICE9IEdQUkluZm86OnJlZ1Qw
IGJlY2F1c2UgcmVnVDAgaW50ZXJmZXJlcyB3aXRoIGl0LgotICAgICAgICAgICAgICAgICAgICB0
aGlzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIHRoaXNHUFIpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpy
ZWdUMCwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7Ci0g
ICAgICAgICAgICAgICAgaml0LnN0b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVB
cmd1bWVudFNsb3QoMCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIENhbGxM
aW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gQ29uc3RydWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzKQotICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29u
c3RydWN0VmFyYXJnczsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IFRh
aWxDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCi0g
ICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFy
Z3M7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgYm9vbCBpc1RhaWxDYWxsID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlw
ZSkgPT0gQ2FsbE1vZGU6OlRhaWw7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAot
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdU
MCwgdGFyZ2V0VG9DaGVjaywKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKDApKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OkNhbGwgZmFzdENhbGw7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGRvbmU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwp
IHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAg
ICAgICAgICAgICAgICAgICAgaml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKLSAgICAgICAg
ICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwo
KTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGppdC5qdW1wKCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmpp
dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNUYWlsQ2FsbCkKLSAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5u
ZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChpc1RhaWxD
YWxsKQotICAgICAgICAgICAgICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBkb25lLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2Fs
bExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BS
SW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5hZGRQ
dHIoCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmln
aW5hbFN0YWNrSGVpZ2h0KSwKLSAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAg
ICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0
b3IpLmNvZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93
Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8t
PnNldENhbGxMb2NhdGlvbnMoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mTmVhckNhbGwoc2xvd0NhbGwpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgewotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKLSAgICAgICAg
Y2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQotICAgIHsKLSAgICAg
ICAgTG9hZFZhcmFyZ3NEYXRhKiBkYXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKLSAg
ICAgICAgTFZhbHVlIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGggPSB2bUNhbGwoCi0gICAgICAgICAgICBt
X291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2Nh
bGxGcmFtZSwganNBcmd1bWVudHMsCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEt
Pm9mZnNldCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNl
IHRoYXQgd2Ugd2lsbCBjYWxsIGFuIGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRo
aXMgaXMgc2FmZQotICAgICAgICAvLyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGlu
dGVncml0eSwgYnV0IGl0J3Mgc3VidGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKLSAg
ICAgICAgLy8gc3RhbmRwb2ludC4gVGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJl
IHdlIGNhbiBleGl0ICppbnRvKiB0aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0Ci0gICAgICAgIC8v
IHBhc3QgdGhlIHNpemluZy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTQ0OAotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1
ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAgIHNw
ZWN1bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRy
LAotICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29u
c3RJbnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIo
bGVuZ3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxs
eS4gSWYgb3BlcmF0aW9uTGFvZFZhcmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCi0g
ICAgICAgIC8vIG9mIGEgVmlydHVhbFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRo
aXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE2NjAKLSAgICAgICAgTFZhbHVlIG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCi0gICAgICAg
ICAgICBtX291dC5zdWIoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZh
bHVlKCksIG1fY2FsbEZyYW1lKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsK
LSAgICAgICAgCi0gICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKLSAgICAg
ICAgICAgIG1fb3V0LmNhc3RUb0ludDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291
dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCksCi0gICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVGb3J3YXJkVmFyYXJncygpCi0gICAgewotICAgICAgICBMb2FkVmFyYXJnc0RhdGEq
IGRhdGEgPSBtX25vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwotICAgICAgICBJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0QXJn
dW1lbnRzTGVuZ3RoKGlubGluZUNhbGxGcmFtZSkudmFsdWU7Ci0gICAgICAgIExWYWx1ZSBsZW5n
dGhJbmNsdWRpbmdUaGlzID0gbV9vdXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxIC0g
ZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICBWYXJhcmdzT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgIG1fb3V0
LmFib3ZlKGxlbmd0aEluY2x1ZGluZ1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQp
KSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMs
IHBheWxvYWRGb3IoZGF0YS0+bWFjaGluZUNvdW50KSk7Ci0gICAgICAgIAotICAgICAgICBMVmFs
dWUgc291cmNlU3RhcnQgPSBnZXRBcmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOwotICAg
ICAgICBMVmFsdWUgdGFyZ2V0U3RhcnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCku
dmFsdWUoKTsKLQotICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyB1bmRlZmluZWQgbG9vcCBib2R5IikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBtYWluTG9vcEVudHJ5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJG
b3J3YXJkVmFyYXJncyBtYWluIGxvb3AgZW50cnkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG1h
aW5Mb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxvb3Ag
Ym9keSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgbGVuZ3RoQXNQdHIgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7Ci0gICAg
ICAgIExWYWx1ZSBsb29wQm91bmRWYWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRh
dG9yeU1pbmltdW0pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsb29wQm91bmQgPSBtX291dC5h
bmNob3IobG9vcEJvdW5kVmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICBtX291dC5hYm92ZShsb29wQm91bmRWYWx1ZSwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZp
bmVkTG9vcCksIHVuc3VyZShtYWluTG9vcEVudHJ5KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIG1haW5Mb29w
RW50cnkpOwotICAgICAgICBMVmFsdWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5p
bnRQdHIsIGxvb3BCb3VuZCk7Ci0gICAgICAgIExWYWx1ZSBjdXJyZW50SW5kZXggPSBtX291dC5z
dWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2
NCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
dGFyZ2V0U3RhcnQsIGN1cnJlbnRJbmRleCkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0
SW5kZXggPSBtX291dC5hbmNob3IoY3VycmVudEluZGV4KTsKLSAgICAgICAgbV9vdXQuYWRkSW5j
b21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwotICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICBtX291dC5hYm92ZShjdXJyZW50SW5kZXgsIGxlbmd0aEFzUHRyKSwg
dW5zdXJlKHVuZGVmaW5lZExvb3ApLCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFpbkxvb3BFbnRyeSwgbWFpbkxvb3ApOwotICAgICAg
ICBsb29wQm91bmQgPSBtX291dC5hbmNob3IobGVuZ3RoQXNQdHIpOwotICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQubm90TnVsbChsZW5ndGhBc1B0ciksIHVuc3VyZShtYWluTG9vcCksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5M
b29wLCBjb250aW51YXRpb24pOwotICAgICAgICBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgbG9vcEJvdW5kKTsKLSAgICAgICAgY3VycmVudEluZGV4ID0gbV9vdXQuc3Vi
KHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9
IG1fb3V0LmxvYWQ2NCgKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAg
ICAgICBtX2hlYXBzLnZhcmlhYmxlcywgc291cmNlU3RhcnQsCi0gICAgICAgICAgICAgICAgbV9v
dXQuYWRkKGN1cnJlbnRJbmRleCwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+b2Zmc2V0KSkpKTsK
LSAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFy
aWFibGVzLCB0YXJnZXRTdGFydCwgY3VycmVudEluZGV4KSk7Ci0gICAgICAgIG5leHRJbmRleCA9
IG1fb3V0LmFuY2hvcihjdXJyZW50SW5kZXgpOwotICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC5pc051bGwoY3VycmVudEluZGV4KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShtYWlu
TG9vcCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSnVtcCgpCi0gICAgewotICAgICAg
ICBtX291dC5qdW1wKGxvd0Jsb2NrKG1fbm9kZS0+dGFyZ2V0QmxvY2soKSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVCcmFuY2goKQotICAgIHsKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgYm9vbGlmeShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIFdl
aWdodGVkVGFyZ2V0KAotICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0
YSgpLT50YWtlbi5ibG9jayksCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCkt
PnRha2VuLmNvdW50KSwKLSAgICAgICAgICAgIFdlaWdodGVkVGFyZ2V0KAotICAgICAgICAgICAg
ICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayksCi0gICAg
ICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPm5vdFRha2VuLmNvdW50KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZVN3aXRjaCgpCi0gICAgewotICAgICAgICBTd2l0Y2hE
YXRhKiBkYXRhID0gbV9ub2RlLT5zd2l0Y2hEYXRhKCk7Ci0gICAgICAgIHN3aXRjaCAoZGF0YS0+
a2luZCkgewotICAgICAgICBjYXNlIFN3aXRjaEltbTogewotICAgICAgICAgICAgVmVjdG9yPFZh
bHVlRnJvbUJsb2NrLCAyPiBpbnRWYWx1ZXM7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzd2l0
Y2hPbkludHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaW50IGNh
c2UiKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8obV9vdXQubV9ibG9jaywgc3dpdGNoT25JbnRzKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAg
ICAgICAgICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBl
bmQobV9vdXQuYW5jaG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAg
ICAgICAgbV9vdXQuanVtcChzd2l0Y2hPbkludHMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOiB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNJbnQgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgaW50IikpOwotICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzTm90SW50ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNo
SW1tIGlzIG5vdCBpbnQiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNEb3VibGUg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgZG91YmxlIikpOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBib3hlZFZhbHVlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2go
aXNOb3RJbnQzMihib3hlZFZhbHVlKSwgdW5zdXJlKGlzTm90SW50KSwgdW5zdXJlKGlzSW50KSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW50LCBpc05vdEludCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQz
Mihib3hlZFZhbHVlKSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRz
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc05v
dEludCwgaXNEb3VibGUpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNDZWxsT3JNaXNjKGJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZh
bGxUaHJvdWdoLmJsb2NrKSksIHJhcmVseShpc0RvdWJsZSkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsK
LSAgICAgICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZShib3hlZFZh
bHVlKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgaW50SW5Eb3VibGUgPSBtX291dC5kb3VibGVU
b0ludChkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291
dC5hbmNob3IoaW50SW5Eb3VibGUpKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKG1fb3V0LmludFRvRG91YmxlKGlu
dEluRG91YmxlKSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoc3dp
dGNoT25JbnRzKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN3aXRjaE9u
SW50cywgbGFzdE5leHQpOwotICAgICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50
MzIsIG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogewotICAg
ICAgICAgICAgTFZhbHVlIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHVzZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB1bnN1cmUoKSBmb3Ig
dGhlIGJyYW5jaCB3ZWlnaHQKLSAgICAgICAgICAgIC8vIG9mIHRoZSBmYWxsVGhyb3VnaCBibG9j
ay4gVGhlIG1haW4gY2hhbGxlbmdlIGlzIGp1c3QgdGhhdCB3ZSBoYXZlIG11bHRpcGxlCi0gICAg
ICAgICAgICAvLyBicmFuY2hlcyB0byBmYWxsVGhyb3VnaCBidXQgYSBzaW5nbGUgY291bnQsIHNv
IHdlIHdvdWxkIG5lZWQgdG8gZGl2dnkgaXQgdXAKLSAgICAgICAgICAgIC8vIGFtb25nIHRoZSBk
aWZmZXJlbnQgbG93ZXJlZCBicmFuY2hlcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkwODIKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICAgICAgY2Fz
ZSBTdHJpbmdVc2U6IHsKLSAgICAgICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAg
ICAgICAgICAgIExWYWx1ZSB1bmJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIGNlbGwi
KSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBpcyBzdHJpbmciKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBpc05vdENlbGwodW5ib3hlZFZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwK
LSAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJs
b2NrKSksIHVuc3VyZShpc0NlbGxDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBp
c1N0cmluZ0Nhc2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBjZWxsVmFsdWUgPSB1bmJveGVk
VmFsdWU7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAg
ICBpc05vdFN0cmluZyhjZWxsVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAot
ICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxv
Y2spKSwgdW5zdXJlKGlzU3RyaW5nQ2FzZSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbGFzdE5leHQpOwotICAgICAgICAg
ICAgICAgIHN0cmluZ1ZhbHVlID0gY2VsbFZhbHVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxlbmd0aElzMSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaENoYXIgbGVuZ3RoIGlzIDEiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBuZWVkUmVzb2x1dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENo
YXIgcmVzb2x1dGlvbiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHJlc29sdmVkID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciByZXNvbHZlZCIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaENoYXIgOGJpdCIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIDE2Yml0IikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2hhciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVh
cHMuSlNTdHJpbmdfbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9j
aykpLCB1bnN1cmUobGVuZ3RoSXMxKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVuZ3RoSXMxLCBuZWVkUmVzb2x1dGlv
bik7Ci0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHZhbHVlczsKLSAgICAg
ICAgICAgIExWYWx1ZSBmYXN0VmFsdWUgPSBtX291dC5sb2FkUHRyKHN0cmluZ1ZhbHVlLCBtX2hl
YXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9vdXQuYW5j
aG9yKGZhc3RWYWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChm
YXN0VmFsdWUpLCByYXJlbHkobmVlZFJlc29sdXRpb24pLCB1c3VhbGx5KHJlc29sdmVkKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5lZWRSZXNvbHV0aW9uLCBy
ZXNvbHZlZCk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcigKLSAgICAg
ICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
UmVzb2x2ZVJvcGUpLCBtX2NhbGxGcmFtZSwgc3RyaW5nVmFsdWUpKSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKHJlc29sdmVkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8ocmVzb2x2ZWQsIGlzOEJpdCk7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291
dC5waGkobV9vdXQuaW50UHRyLCB2YWx1ZXMpOwotICAgICAgICAgICAgTFZhbHVlIGNoYXJhY3Rl
ckRhdGEgPSBtX291dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7Ci0g
ICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblpl
cm8zMigKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLlN0
cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgICAgICB1bnN1cmUo
aXM4Qml0KSwgdW5zdXJlKGlzMTZCaXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVj
dG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBjaGFyYWN0ZXJzOwotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKLSAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKG1f
b3V0LmFuY2hvcihtX291dC5sb2FkOFplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNo
YXJhY3RlcnM4WzBdKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgY2hhcmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0
LmxvYWQxNlplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnMxNlswXSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICBidWlsZFN3aXRjaChkYXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0Lmlu
dDMyLCBjaGFyYWN0ZXJzKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOiB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIFN0cmluZ0lkZW50
VXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBsb3dTdHJpbmdJZGVu
dChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBW
ZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0
cmluZ0ltcGwoKSk7Ci0gICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJsb2NrID0gbG93
QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKTsKLSAgICAgICAgICAgICAgICAgICAg
V2VpZ2h0IHdlaWdodCA9IFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpOwotICAg
ICAgICAgICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh2YWx1ZSwgYmxvY2ssIHdl
aWdodCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5n
SW1wbCwgY2FzZXMsIGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKLSAgICAgICAg
ICAgICAgICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY2FzZSBTdHJpbmdVc2U6IHsKLSAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwg
bG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGlzQ2VsbEJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5n
IFVudHlwZWQgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3Ry
aW5nQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgVW50
eXBlZCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBt
X291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxC
bG9jayksIHVuc3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbEJsb2NrLCBpc1N0cmluZ0Jsb2NrKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIGlzU3Ry
aW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAgICAgICAgICAgICAg
ICAgICAgdW5zdXJlKGlzU3RyaW5nQmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNTdHJpbmdCbG9jaywgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHN3aXRjaFN0cmluZyhkYXRhLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVz
ZSBraW5kIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTd2l0
Y2hDZWxsOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbDsKLSAgICAgICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQ2VsbFVzZTog
ewotICAgICAgICAgICAgICAgIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENlbGwg
Y2VsbCBjYXNlIikpOwotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgICAgICAgICAgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrKSkpOwotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNl
bGxDYXNlKTsKLSAgICAgICAgICAgICAgICBjZWxsID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNl
IGtpbmQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGJ1aWxkU3dpdGNoKG1fbm9kZS0+c3dpdGNoRGF0YSgpLCBtX291
dC5pbnRQdHIsIGNlbGwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IH0KLSAgICAg
ICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQi
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUmV0dXJuKCkKLSAgICB7Ci0gICAgICAg
IG1fb3V0LnJldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlRm9yY2VPU1JFeGl0KCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZShJ
bmFkZXF1YXRlQ292ZXJhZ2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUaHJvdygp
Ci0gICAgewotICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVJbnZhbGlkYXRpb25Qb2ludCgpCi0gICAgewotICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFs
aWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJc
biIpOwotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0
T0spOwotICAgICAgICAKLSAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChWb2lkKTsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0
b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOwotICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBl
bmRDb2xkQW55cyhidWlsZEV4aXRBcmd1bWVudHMoZGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQs
IG5vVmFsdWUoKSkpOwotICAgICAgICAKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3Rh
dGU7Ci0KLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIE1hY3JvQXNzZW1ibGVyIGtub3dzIG1v
cmUgYWJvdXQgdGhpcyB0aGFuIEIzIGRvZXMuIFRoZSB3YXRjaHBvaW50TGFiZWwoKSBtZXRob2QK
LSAgICAgICAgICAgICAgICAvLyB3aWxsIGVuc3VyZSB0aGF0IHRoaXMgaXMgZm9sbG93ZWQgYnkg
YSBub3Agc2hhZG93IGJ1dCBvbmx5IHdoZW4gdGhpcyBpcyBhY3R1YWxseQotICAgICAgICAgICAg
ICAgIC8vIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxh
YmVsID0gaml0LndhdGNocG9pbnRMYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPE9T
UkV4aXRIYW5kbGU+IGhhbmRsZSA9IGRlc2NyaXB0b3ItPmVtaXRPU1JFeGl0TGF0ZXIoCi0gICAg
ICAgICAgICAgICAgICAgICpzdGF0ZSwgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIG9yaWdpbiwg
cGFyYW1zKTsKLQotICAgICAgICAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gc3Rh
dGUtPmppdENvZGUuZ2V0KCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0g
ICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAg
ICAgICAgICAgICAgICAgICAgSnVtcFJlcGxhY2VtZW50IGp1bXBSZXBsYWNlbWVudCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWwpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxh
YmVsKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uanVtcFJlcGxh
Y2VtZW50cy5hcHBlbmQoanVtcFJlcGxhY2VtZW50KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICB9KTsKLQotICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3VzIHRoaW5ncy4K
LSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOwotICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc0xvY2FsU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc0xvY2FsU3RhdGUgPSBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFRoaXMgaXMgaG93IHdlIHRlbGwgQjMgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGp1
bXAgcmVwbGFjZW1lbnQuCi0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5
cyA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29t
ZSBwcmlvciBicmFuY2ggdG8gZGV0ZXJtaW5lIHRoZSBzYWZldHkgb2YgdGhpcyBvcGVyYXRpb24u
IEl0J3MgYWx3YXlzCi0gICAgICAgIC8vIGZpbmUgdG8gZXhlY3V0ZSB0aGlzIG9uIHNvbWUgcGF0
aCB0aGF0IHdvdWxkbid0IGhhdmUgb3JpZ2luYWxseSBleGVjdXRlZCBpdCBiZWZvcmUKLSAgICAg
ICAgLy8gb3B0aW1pemF0aW9uLgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmNvbnRyb2xE
ZXBlbmRlbnQgPSBmYWxzZTsKLQotICAgICAgICAvLyBJZiB0aGlzIGZhbGxzIHRocm91Z2ggdGhl
biBpdCB3b24ndCB3cml0ZSBhbnl0aGluZy4KLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53
cml0ZXMgPSBIZWFwUmFuZ2UoKTsKLQotICAgICAgICAvLyBXaGVuIHRoaXMgYWJydXB0bHkgdGVy
bWluYXRlcywgaXQgY291bGQgcmVhZCBhbnkgaGVhcCBsb2NhdGlvbi4KLSAgICAgICAgcGF0Y2hw
b2ludC0+ZWZmZWN0cy5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUlzVW5kZWZpbmVkKCkKLSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4oZXF1
YWxOdWxsT3JVbmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1
YWxVbmRlZmluZWQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSXNCb29sZWFuKCkK
LSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4oaXNCb29sZWFuKGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSksIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlSXNOdW1iZXIoKQotICAgIHsKLSAgICAgICAgc2V0Qm9vbGVhbihpc051
bWJlcihsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUlzU3RyaW5nKCkKLSAgICB7
Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJJc1N0cmluZyBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNTdHJpbmcgY29udGludWF0aW9uIikp
OwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1
cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5w
aGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3QgY2VsbCBjYXNlIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IklzT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwot
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQu
cGhpKG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCi0gICAgewotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgRWRnZSBjaGlsZCA9IG1fbm9kZS0+
Y2hpbGQxKCk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQpOwotICAg
ICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzT2JqZWN0T3JOdWxsIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90
RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3Qg
ZnVuY3Rpb24gY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9y
TnVsbCBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgY2VsbCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
T2JqZWN0T3JOdWxsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwg
dW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlvbkNhc2UpOwotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpc0Z1bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJv
b2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRnVuY3Rp
b24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIG9iamVjdENhc2UpOwotICAgICAgICBWYWx1ZUZy
b21CbG9jayBub3RPYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNl
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVuc3VyZShvYmplY3RDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob2JqZWN0
Q2FzZSwgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAot
ICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2FzZSk7Ci0g
ICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc09iamVj
dCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3RaZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUg
bm90Q2VsbFJlc3VsdFZhbHVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG5vdENlbGxSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQu
cGhpKAotICAgICAgICAgICAgbV9vdXQuYm9vbGVhbiwKLSAgICAgICAgICAgIGlzRnVuY3Rpb25S
ZXN1bHQsIG5vdE9iamVjdFJlc3VsdCwgb2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0LCBub3RDZWxs
UmVzdWx0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVJc0Z1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsK
LSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5j
dGlvbiBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBub3QgZnVuY3Rpb24gY2FzZSIpKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
RnVuY3Rpb24gc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gY29udGludWF0aW9uIikpOwotICAg
ICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZnVuY3Rpb25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVh
blRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0Z1bmN0aW9uKHZh
bHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9u
KSwgdW5zdXJlKG5vdEZ1bmN0aW9uQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90RnVuY3Rpb25DYXNlLCBzbG93UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJv
dmVuVHlwZShjaGlsZCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShj
b250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNs
b3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwg
bG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxs
KHNsb3dSZXN1bHRWYWx1ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaSgKLSAgICAgICAgICAgIG1fb3V0LmJv
b2xlYW4sIG5vdENlbGxSZXN1bHQsIGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwotICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVR5cGVPZigpCi0gICAgewotICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5j
aGlsZDEoKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7Ci0gICAg
ICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlR5cGVPZiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgIAotICAg
ICAgICBidWlsZFR5cGVPZigKLSAgICAgICAgICAgIGNoaWxkLCB2YWx1ZSwKLSAgICAgICAgICAg
IFsmXSAoVHlwZW9mVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bV9vdXQuYW5jaG9yKHdlYWtQb2ludGVyKHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlw
ZSkpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJl
c3VsdHMpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSW4oKQotICAgIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAgICAgRWRnZSBiYXNlID0gbm9kZS0+Y2hpbGQy
KCk7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChiYXNlKTsKLSAgICAgICAgaWYgKEpT
U3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0
cmluZyo+KCkpIHsKLSAgICAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYm
IHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKLSAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogc3RyID0gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBs
Kj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7Ci0gICAgICAgICAgICAgICAgQjM6OlBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAg
ICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihjZWxsKTsKLSAgICAgICAg
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdp
c3RlcnMoKSk7Ci0KLSAgICAgICAgICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
LSAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gcGFyYW1zWzFdLmdwcigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHBhcmFtc1swXS5ncHIoKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCktPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6Oklu
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENvZGVP
cmlnaW4obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
dWJJbmZvLT5jb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+
KGJhc2VHUFIpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVl
R1BSID0gc3RhdGljX2Nhc3Q8aW50OF90PihyZXN1bHRHUFIpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLnVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVS
ZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRj
aGFibGVKdW1wIGp1bXAgPSBqaXQucGF0Y2hhYmxlSnVtcCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcC5saW5rKCZq
aXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IHNsb3dQYXRoQmVnaW4gPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWls
YWJsZVJlZ2lzdGVycygpLCBqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcmlnaW4uc2VtYW50aWMsIG51bGxwdHIsIG9wZXJhdGlvbkluT3B0aW1pemUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIGJhc2VHUFIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RyKSkuY2FsbCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25l
LCAmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXIm
IGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENh
bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2Nh
dGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZihkb25lKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5j
ZUJldHdlZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZm
ZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhC
ZWdpbikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gCi0KLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZW5lcmljSW4pLCBtX2Nh
bGxGcmFtZSwgY2VsbCwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQot
ICAgIHZvaWQgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKCkKLSAgICB7Ci0gICAgICAgIEpT
RnVuY3Rpb24qIGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
PihtX25vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotCi0gICAgICAgIExWYWx1ZSBjb25z
dHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBoYXNJ
bnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgTEJhc2lj
QmxvY2sgZGVmYXVsdEhhc0luc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlk
ZXNIYXNJbnN0YW5jZSBTeW1ib2wuaGFzSW5zdGFuY2UgaXMgZGVmYXVsdCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlk
ZXNIYXNJbnN0YW5jZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgLy8gVW5saWtlIGluIHRo
ZSBERkcsIHdlIGRvbid0IHdvcnJ5IGFib3V0IGNsZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhl
IGNhc2Ugd2hlcmUgd2UgaGF2ZSBwcm92ZW4gdGhlIGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25z
dGFudCBhcyBMTFZNIHNob3VsZCBmaXggaXQgZm9yIHVzLgotCi0gICAgICAgIEFTU0VSVCghbV9u
b2RlLT5jaGlsZDIoKS5ub2RlKCktPmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3Rh
bmNlRnVuY3Rpb24gPT0gbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCktPmFzQ2VsbCgpKTsKLQotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBub3REZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90
RXF1YWwoaGFzSW5zdGFuY2UsIG1fb3V0LmNvbnN0SW50UHRyKGRlZmF1bHRIYXNJbnN0YW5jZUZ1
bmN0aW9uKSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoZGVmYXVsdEhhc0luc3RhbmNl
KSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkZWZh
dWx0SGFzSW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQudGVz
dElzWmVybzMyKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY29uc3RydWN0b3Is
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOwotICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGlt
cGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQsIG5vdERlZmF1bHRIYXNJbnN0YW5jZVJl
c3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpCi0g
ICAgewotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlSW5mb0ZsYWdzLCBu
b1ZhbHVlKCksIDAsCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9o
ZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMihtX25vZGUtPnR5cGVJbmZvT3BlcmFuZCgpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVJbnN0YW5jZU9mKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsOwotICAgICAg
ICAKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2Up
Ci0gICAgICAgICAgICBjZWxsID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgcHJvdG90eXBlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkluc3RhbmNlT2YgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGxvb3AiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFlldEluc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJJbnN0YW5jZU9mIG5vdCB5ZXQgaW5zdGFuY2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjb250aW51YXRp
b24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgY29uZGl0aW9uOwotICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgIGNv
bmRpdGlvbiA9IGlzQ2VsbChjZWxsLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhblRydWU7Ci0g
ICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24s
IHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBs
b29wKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBub1ZhbHVlKCksIDAs
IGlzTm90T2JqZWN0KHByb3RvdHlwZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSkpOwot
ICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2luYWxWYWx1ZSA9IG1fb3V0LmFu
Y2hvcihjZWxsKTsKLSAgICAgICAgbV9vdXQuanVtcChsb29wKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGxvb3AsIG5vdFlldEluc3RhbmNlKTsKLSAgICAgICAgTFZhbHVlIHZh
bHVlID0gbV9vdXQucGhpKG1fb3V0LmludDY0LCBvcmlnaW5hbFZhbHVlKTsKLSAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUpOwotICAgICAgICBMVmFsdWUgY3Vy
cmVudFByb3RvdHlwZSA9IG1fb3V0LmxvYWQ2NChzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJl
X3Byb3RvdHlwZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzSW5zdGFuY2VSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBtX291dC5lcXVhbChjdXJyZW50UHJvdG90eXBlLCBwcm90b3R5cGUpLAotICAg
ICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RZZXRJbnN0YW5jZSkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90WWV0SW5zdGFuY2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdEluc3RhbmNlUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9Q
aGkodmFsdWUsIG1fb3V0LmFuY2hvcihjdXJyZW50UHJvdG90eXBlKSk7Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChpc0NlbGwoY3VycmVudFByb3RvdHlwZSksIHVuc3VyZShsb29wKSwgdW5zdXJlKGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4oCi0gICAgICAgICAgICBtX291dC5w
aGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgaXNJbnN0YW5jZVJlc3VsdCwgbm90SW5z
dGFuY2VSZXN1bHQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9t
KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDMoKSk7Ci0KLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVx
dWFsKG1fb3V0LmNvbnN0SW50MzIoMCksIHZtQ2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0
aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZDdXN0b20pLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGNvbnN0
cnVjdG9yLCBoYXNJbnN0YW5jZSkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNv
dW50RXhlY3V0aW9uKCkKLSAgICB7Ci0gICAgICAgIFR5cGVkUG9pbnRlciBjb3VudGVyID0gbV9v
dXQuYWJzb2x1dGUobV9ub2RlLT5leGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSk7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlNjQobV9vdXQuYWRkKG1fb3V0LmxvYWQ2NChjb3VudGVyKSwgbV9vdXQu
Y29uc3RJbnQ2NCgxKSksIGNvdW50ZXIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVT
dG9yZUJhcnJpZXIoKQotICAgIHsKLSAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7Ci0KLSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAgICAg
IG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3Vv
dXNQcm9wZXJ0aWVzOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hvbGUgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjaGVj
ayBob2xlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBzbG93IGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjb250aW51YXRpb24i
KSk7Ci0KLSAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5s
b2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
KSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja0hv
bGUpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2hl
Y2tIb2xlKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhjaGVja0hvbGUsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVS
ZXN1bHRWYWx1ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2
NChiYXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3Io
Y2hlY2tIb2xlUmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9s
ZVJlc3VsdFZhbHVlLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwot
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1fY2FsbEZyYW1l
LCBiYXNlLCBpbmRleCkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBjaGVja0hvbGVS
ZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dT
dG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBJbmRl
eGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllczsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIb2xlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIGNoZWNrIGhvbGUiKSk7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiSGFzSW5kZXhlZFByb3BlcnR5IGRvdWJsZSBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4
ZWRQcm9wZXJ0eSBkb3VibGUgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1
YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCi0gICAgICAgICAg
ICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7Ci0KLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xl
LCBzbG93Q2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2Fk
RG91YmxlKGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkp
OwotICAgICAgICAgICAgTFZhbHVlIGNoZWNrSG9sZVJlc3VsdFZhbHVlID0gbV9vdXQuZG91Ymxl
RXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGNoZWNrSG9sZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7
Ci0gICAgICAgICAgICBtX291dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKLSAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGlu
ZGV4KSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVydHkoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUg
cHJvcGVydHkgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQ
cm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0eSkpOwotICAgIH0KLQotICAgIHZv
aWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBi
YXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHByb3Bl
cnR5ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVy
YXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29ycmVjdFN0cnVjdHVyZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJv
cGVydHkgY29ycmVjdCBzdHJ1Y3R1cmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHdyb25nU3Ry
dWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSB3cm9u
ZyBzdHJ1Y3R1cmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJvcGVydHkgY29udGludWF0aW9uIikpOwot
Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAgICAgIHJhcmVseSh3cm9uZ1N0cnVjdHVyZSks
IHVzdWFsbHkoY29ycmVjdFN0cnVjdHVyZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY29ycmVjdFN0cnVjdHVyZSwgd3JvbmdTdHJ1Y3R1cmUpOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBjb3JyZWN0U3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdyb25nU3RydWN0dXJlLCBjb250aW51YXRpb24p
OwotICAgICAgICBWYWx1ZUZyb21CbG9jayB3cm9uZ1N0cnVjdHVyZVJlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKLSAgICAgICAgICAg
ICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5l
cmljUHJvcGVydHkpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9v
bGVhbiwgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCwgd3JvbmdTdHJ1Y3R1cmVSZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpCi0gICAgewotICAgICAgICBM
VmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKLSAg
ICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBjaGVj
a09mZnNldCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY2hlY2sgb2Zm
c2V0IikpOwotICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJHZXREaXJlY3RQbmFtZSBpbmxpbmUgbG9hZCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZMaW5lTG9hZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUg
b3V0LW9mLWxpbmUgbG9hZCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIHNsb3cgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJl
Y3RQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5v
dEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBz
LkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOwotCi0gICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tPZmZzZXQsIGlubGluZUxv
YWQpOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBtX291
dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkSW5saW5lQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgIHVuc3VyZShvdXRPZkxpbmVMb2FkKSwg
dW5zdXJlKGlubGluZUxvYWQpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2Fk
LCBvdXRPZkxpbmVMb2FkKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCi0gICAgICAgICAgICAgICAgYmFzZSwg
bV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50NjQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7
Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOwot
ICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKLSAgICAgICAg
ICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7
Ci0gICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50
MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2Nh
bGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKAotICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgaW5saW5lUmVzdWx0LCBvdXRPZkxpbmVSZXN1bHQsIHNsb3dDYXNlUmVzdWx0KSk7Ci0g
ICAgfQotCi0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdl
dFByb3BlcnR5RW51bWVyYXRvcigpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKSwgbV9j
YWxsRnJhbWUsIGJhc2UpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGluIGJvdW5kcyIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSBvdXQgb2YgYm91bmRzIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAot
ICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOwotCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91
dE9mQm91bmRzKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1l
cmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3IpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVh
cHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250
ZW50cywgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpKSk7Ci0gICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5k
cywgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KG1fb3V0LmludDY0LCBpbkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCkKLSAgICB7Ci0g
ICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAg
ICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUgaW4gYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRP
ZkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZSBvdXQgb2YgYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgY29udGludWF0
aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFy
ZWx5KG91dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGlu
ZGV4KSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZy
b21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0
KFZhbHVlTnVsbCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRP
ZkJvdW5kc1Jlc3VsdCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3Ry
aW5nKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAgICAgICAgICAgc3RydWN0dXJlLCBub1ZhbHVl
KCksIEJhZENhY2hlLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAotICAgICAgICAgICAgW3RoaXNd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgewotICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3Ry
dWN0dXJlKHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKQotICAgIHsKLSAgICAgICAgT2JqZWN0TWF0
ZXJpYWxpemF0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0
YSgpOwotICAgICAgICAKLSAgICAgICAgLy8gTG93ZXIgdGhlIHZhbHVlcyBmaXJzdCwgdG8gYXZv
aWQgY3JlYXRpbmcgdmFsdWVzIGluc2lkZSBhIGNvbnRyb2wgZmxvdyBkaWFtb25kLgotICAgICAg
ICAKLSAgICAgICAgVmVjdG9yPExWYWx1ZSwgOD4gdmFsdWVzOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kKGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEg
KyBpKSkpOwotICAgICAgICAKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSBtX25v
ZGUtPnN0cnVjdHVyZVNldCgpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2Nr
LCAxPiBibG9ja3Moc2V0LnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspCi0gICAgICAgICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNhc2UgIiwgaSkpOwotICAgICAgICBMQmFzaWNCbG9j
ayBkdW1teURlZmF1bHQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGRlZmF1bHQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVh
dGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhz
ZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykK
LSAgICAgICAgICAgIGNhc2VzW2ldID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSks
IGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKTsKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24o
Ci0gICAgICAgICAgICBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNh
c2VzLCBkdW1teURlZmF1bHQsIFdlaWdodCgwKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNC
bG9jayBvdXRlckxhc3ROZXh0ID0gbV9vdXQubV9uZXh0QmxvY2s7Ci0gICAgICAgIAotICAgICAg
ICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDE+IHJlc3VsdHM7Ci0gICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBk
dW1teURlZmF1bHQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHNldFtpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsK
LSAgICAgICAgICAgIExWYWx1ZSBidXR0ZXJmbHk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgICAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRv
ciogYWxsb2NhdG9yID0gJnZtKCkuaGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1
Y3RvcihhbGxvY2F0aW9uU2l6ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXpl
TmV3T2JqZWN0IGNvbXBsZXggb2JqZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwK
LSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIExWYWx1ZSBmYXN0QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBl
bmRPZlN0b3JhZ2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSBm
YXN0T2JqZWN0VmFsdWUgPSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUs
IHNsb3dQYXRoKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3Qg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7
Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwotCi0gICAgICAgICAgICAgICAgTFZhbHVlIHNsb3dPYmplY3RWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNo
b3Ioc2xvd09iamVjdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKHNsb3dPYmplY3RWYWx1ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgb2JqZWN0
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRl
cmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIC8vIEluIHRoZSBlYXN5IGNhc2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2Nh
dGlvbiwgd2Ugc2ltcGx5IGFsbG9jYXRlIHRoZQotICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0
byBkaXJlY3RseSBoYXZlIHRoZSBkZXNpcmVkIHN0cnVjdHVyZS4KLSAgICAgICAgICAgICAgICBv
YmplY3QgPSBhbGxvY2F0ZU9iamVjdChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGJ1dHRl
cmZseSA9IG51bGxwdHI7IC8vIERvbid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5
IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBk
YXRhLm1fcHJvcGVydGllc1tpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRl
bnRpZmllcnMoKVt2YWx1ZS5tX2lkZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQp
ID8gb2JqZWN0IDogYnV0dGVyZmx5OwotICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5
KHZhbHVlc1tpXSwgYmFzZSwgdmFsdWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihvYmplY3QpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24p
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1
bHQsIG91dGVyQ29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1
bHRzKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0
aW9uKCkKLSAgICB7Ci0gICAgICAgIE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBt
X25vZGUtPm9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKTsKLQotICAgICAgICBWZWN0b3I8TFZh
bHVlLCA4PiB2YWx1ZXM7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1f
cHJvcGVydGllcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNW
YWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMiArIGkpKSk7Ci0KLSAgICAgICAgTFZh
bHVlIHNjb3BlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAg
ICAgICBTeW1ib2xUYWJsZSogdGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxl
Kj4oKTsKLSAgICAgICAgQVNTRVJUKHRhYmxlID09IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKS0+Y2FzdENvbnN0YW50PFN5bWJvbFRhYmxlKj4oKSk7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1Bh
dGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbiBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uIGNvbnRpbnVhdGlvbiIp
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nr
c0JlZm9yZShzbG93UGF0aCk7Ci0KLSAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0
ZU9iamVjdDxKU0xleGljYWxFbnZpcm9ubWVudD4oCi0gICAgICAgICAgICBKU0xleGljYWxFbnZp
cm9ubWVudDo6YWxsb2NhdGlvblNpemUodGFibGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clpl
cm8sIHNsb3dQYXRoKTsKLQotICAgICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVj
dCwgbV9oZWFwcy5KU1Njb3BlX25leHQpOwotICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9p
bnRlcih0YWJsZSksIGZhc3RPYmplY3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1i
b2xUYWJsZSk7Ci0KLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGZhc3RPYmplY3QpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IC8vIFdlIGVuc3VyZSBhbGxvY2F0aW9uIHNpbmtpbmcgZXhwbGljdGx5IHNldHMgYm90dG9tIHZh
bHVlcyBmb3IgYWxsIGZpZWxkIG1lbWJlcnMuIAotICAgICAgICAvLyBUaGVyZWZvcmUsIGl0IGRv
ZXNuJ3QgbWF0dGVyIHdoYXQgSlNWYWx1ZSB3ZSBwYXNzIGluIGFzIHRoZSBpbml0aWFsaXphdGlv
biB2YWx1ZQotICAgICAgICAvLyBiZWNhdXNlIGFsbCBmaWVsZHMgd2lsbCBiZSBvdmVyd3JpdHRl
bi4KLSAgICAgICAgLy8gRklYTUU6IEl0IG1heSBiZSB3b3J0aCBjcmVhdGluZyBhbiBvcGVyYXRp
b24gdGhhdCBjYWxscyBhIGNvbnN0cnVjdG9yIG9uIEpTTGV4aWNhbEVudmlyb25tZW50IHRoYXQg
Ci0gICAgICAgIC8vIGRvZXNuJ3QgaW5pdGlhbGl6ZSBldmVyeSBzbG90IGJlY2F1c2Ugd2UgYXJl
IGd1YXJhbnRlZWQgdG8gZG8gdGhhdCBoZXJlLgotICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9
IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKLSAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSk7Ci0gICAgICAgICAgICB9LCBzY29wZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSAgbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhpKG1fb3V0LmludFB0
ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEu
bV9wcm9wZXJ0aWVzLnNpemUoKSA9PSB0YWJsZS0+c2NvcGVTaXplKCkpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWVzW2ldLAotICAgICAgICAgICAgICAgIGFjdGl2
YXRpb24sCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3Zhcmlh
Ymxlc1tkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXJdKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAvLyBW
YWxpZGF0ZSB0byBtYWtlIHN1cmUgZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUgaGFzIG9uZSB2YWx1
ZS4KLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2sp
OwotICAgICAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5k
ID0gdGFibGUtPmVuZChsb2NrZXIpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlci0+dmFsdWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA9PSBkYXRhLm1f
cHJvcGVydGllc1tpXS5tX2lkZW50aWZpZXJOdW1iZXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZm91bmQsIGZvdW5kKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIHNldEpTVmFsdWUoYWN0aXZhdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hl
Y2tXYXRjaGRvZ1RpbWVyKCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHRpbWVyRGlkRmly
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIHRpbWVyIGRpZCBm
aXJlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrV2F0Y2hkb2dUaW1lciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0
ZSh2bSgpLndhdGNoZG9nKCktPnRpbWVyRGlkRmlyZUFkZHJlc3MoKSkpOwotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuaXNaZXJvMzIoc3RhdGUpLAotICAgICAgICAgICAgdXN1YWxseShjb250
aW51YXRpb24pLCByYXJlbHkodGltZXJEaWRGaXJlKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh0aW1lckRpZEZpcmUsIGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9j
YXRpb24+JikgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKG9wZXJhdGlvbkhhbmRsZVdhdGNo
ZG9nVGltZXIsIEludmFsaWRHUFJSZWcpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLQotICAgIExWYWx1ZSBkaWRPdmVyZmxvd1N0
YWNrKCkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIGxlYWYgZnVu
Y3Rpb24gYW5hbHlzaXMuIFRoZSBpbnZhcmlhbnQgb2YgRlRMIGNhbGwKLSAgICAgICAgLy8gZnJh
bWVzIGlzIHRoYXQgdGhlIGNhbGxlciBoYWQgYWxyZWFkeSBkb25lIGVub3VnaCBvZiBhIHN0YWNr
IGNoZWNrIHRvCi0gICAgICAgIC8vIHByb3ZlIHRoYXQgdGhpcyBjYWxsIGZyYW1lIGhhcyBlbm91
Z2ggc3RhY2sgdG8gcnVuLCBhbmQgYWxzbyBlbm91Z2ggc3RhY2sKLSAgICAgICAgLy8gdG8gbWFr
ZSBydW50aW1lIGNhbGxzLiBTbywgd2Ugb25seSBuZWVkIHRvIHN0YWNrIGNoZWNrIHdoZW4gbWFr
aW5nIGNhbGxzCi0gICAgICAgIC8vIHRvIG90aGVyIEpTIGZ1bmN0aW9ucy4gSWYgd2UgZG9uJ3Qg
ZmluZCBzdWNoIGNhbGxzIHRoZW4gd2UgZG9uJ3QgbmVlZCB0bwotICAgICAgICAvLyBkbyBhbnkg
c3RhY2sgY2hlY2tzLgotICAgICAgICAKLSAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7
Ci0gICAgICAgICAgICBERkc6OkJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKLSAgICAgICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0g
YmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoK
LSAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5SWQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBDYWxs
OgotICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0OgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuYmVsb3coCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZGVExTdGFja0xpbWl0KCkp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsK
LSAgICB9Ci0gICAgCi0gICAgc3RydWN0IEFyZ3VtZW50c0xlbmd0aCB7Ci0gICAgICAgIEFyZ3Vt
ZW50c0xlbmd0aCgpCi0gICAgICAgICAgICA6IGlzS25vd24oZmFsc2UpCi0gICAgICAgICAgICAs
IGtub3duKFVJTlRfTUFYKQotICAgICAgICAgICAgLCB2YWx1ZShudWxscHRyKQotICAgICAgICB7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgaXNLbm93bjsKLSAgICAgICAgdW5z
aWduZWQga25vd247Ci0gICAgICAgIExWYWx1ZSB2YWx1ZTsKLSAgICB9OwotICAgIEFyZ3VtZW50
c0xlbmd0aCBnZXRBcmd1bWVudHNMZW5ndGgoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUpCi0gICAgewotICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoOwotCi0gICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKLSAg
ICAgICAgICAgIGxlbmd0aC5rbm93biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSAtIDE7Ci0gICAgICAgICAgICBsZW5ndGguaXNLbm93biA9IHRydWU7Ci0gICAgICAgICAgICBs
ZW5ndGgudmFsdWUgPSBtX291dC5jb25zdEludDMyKGxlbmd0aC5rbm93bik7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBsZW5ndGgua25vd24gPSBVSU5UX01BWDsKLSAgICAgICAgICAg
IGxlbmd0aC5pc0tub3duID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBhcmd1bWVudENvdW50UmVnaXN0ZXI7Ci0gICAgICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZSkKLSAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudENvdW50UmVnaXN0ZXI7Ci0gICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5z
dWIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0
LmludDMyT25lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGxlbmd0aDsK
LSAgICB9Ci0gICAgCi0gICAgQXJndW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gZ2V0QXJndW1lbnRzTGVuZ3RoKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBnZXRDdXJy
ZW50Q2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGZyYW1lID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBp
ZiAoZnJhbWUtPmlzQ2xvc3VyZUNhbGwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkp
KTsKLSAgICAgICAgICAgIHJldHVybiB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3Zlcnku
Y29uc3RhbnQoKS5hc0NlbGwoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb3V0Lmxv
YWRQdHIoYWRkcmVzc0ZvcihKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGdldEFyZ3VtZW50c1N0YXJ0KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQot
ICAgIHsKLSAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjph
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihzdGFydCkudmFsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0
YXJ0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRBcmd1bWVudHNTdGFydChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgIExW
YWx1ZSBzdHJ1Y3R1cmVEaXNjcmltaW5hbnQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0
ZWRWYWx1ZSwgRXhpdEtpbmQgZXhpdEtpbmQsCi0gICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0LCBjb25zdCBGdW5jdG9yJiB3ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KQotICAgIHsKLSAg
ICAgICAgaWYgKHNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZShleGl0S2lu
ZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc2V0LnNp
emUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhp
dEtpbmQsIGZvcm1hdHRlZFZhbHVlLCAwLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbMF0p
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1
Y3R1cmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5leHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNoZWNrU3RydWN0dXJlIG5leHRTdHJ1Y3R1cmUiKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3
ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KHNldFtpXSkpLAotICAgICAgICAgICAgICAgIHVuc3Vy
ZShjb250aW51YXRpb24pLCB1bnN1cmUobmV4dFN0cnVjdHVyZSkpOwotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obmV4dFN0cnVjdHVyZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKLSAg
ICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVj
dHVyZURpc2NyaW1pbmFudChzZXQubGFzdCgpKSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50
MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBp
bnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlZhbHVlVG9JbnQzMiBub3QgaW50IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRvdWJs
ZUNhc2UgPSAwOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gMDsKLSAgICAg
ICAgaWYgKGVkZ2UudXNlS2luZCgpID09IE5vdENlbGxVc2UpIHsKLSAgICAgICAgICAgIGRvdWJs
ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBkb3VibGUgY2FzZSIp
KTsKLSAgICAgICAgICAgIG5vdE51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZh
bHVlVG9JbnQzMiBub3QgbnVtYmVyIGNhc2UiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2Nr
PiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIodmFs
dWUpLCB1bnN1cmUobm90SW50Q2FzZSksIHVuc3VyZShpbnRDYXNlKSk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIG5vdElu
dENhc2UpOwotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMih2
YWx1ZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGVkZ2UudXNlS2luZCgpID09IE51bWJlclVzZSkgewotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90SW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwg
aXNDZWxsT3JNaXNjKHZhbHVlKSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3IoZG91YmxlVG9JbnQzMih1bmJveERvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhub3RJbnRDYXNlLCBkb3VibGVDYXNlKTsKLSAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBpc0NlbGxPck1pc2ModmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpLCB1bnN1cmUobm90TnVtYmVyQ2FzZSksIHVuc3VyZShkb3VibGVDYXNlKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdE51bWJl
ckNhc2UpOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRv
SW50MzIodW5ib3hEb3VibGUodmFsdWUpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RO
dW1iZXJDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2
YWx1ZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3BlY2lhbFJlc3VsdCA9
IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmludDMyT25lLCBtX291dC5pbnQzMlplcm8pOwotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHNwZWNpYWxSZXN1bHQpKTsKLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291
dC5waGkobV9vdXQuaW50MzIsIHJlc3VsdHMpOwotICAgIH0KLQotICAgIHZvaWQgY2hlY2tJbmZl
cnJlZFR5cGUoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVz
Y3JpcHRvciYgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQ
RV9DSEVDSyBvciB0eXBlQ2hlY2soKSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFz
IGluIGEgbm9kZSBsaWtlOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9m
ZnNldCguLi4pCi0gICAgICAgIC8vCi0gICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgotICAg
ICAgICAvLwotICAgICAgICAvLyAgICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgewotICAg
ICAgICAvLyAgICAgY2FzZSA0MjoKLSAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlw
ZSguLi4sIHR5cGUxKTsKLSAgICAgICAgLy8gICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAg
ICBicmVhazsKLSAgICAgICAgLy8gICAgIGNhc2UgNDM6Ci0gICAgICAgIC8vICAgICAgICAgY2hl
Y2tJbmZlcnJlZFR5cGUoLi4uLCB0eXBlMik7Ci0gICAgICAgIC8vICAgICAgICAgLi4uCi0gICAg
ICAgIC8vICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vICAgICB9Ci0gICAgICAgIC8vCi0gICAg
ICAgIC8vIHdoZXJlIHR5cGUxIGFuZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hl
Y2soKSB3b3VsZCBtZWFuIHRoYXQgdGhlIGVkZ2Ugd291bGQgYmUKLSAgICAgICAgLy8gZmlsdGVy
ZWQgYnkgdHlwZTEgJiB0eXBlMiwgaW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgotICAgICAgICAK
LSAgICAgICAgc3dpdGNoICh0eXBlLmtpbmQoKSkgewotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6Qm90dG9tOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkJvb2xlYW46Ci0gICAgICAgICAgICBz
cGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90
Qm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPdGhlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpJbnQzMjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJv
dmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5m
ZXJyZWRUeXBlOjpOdW1iZXI6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6OlN0cmluZzoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksIGlzTm90U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3lt
Ym9sKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAgICAgaWYgKCFhYnN0
cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUu
c3RydWN0dXJlKCkpKSkgewotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAg
bV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVk
VHlwZTo6T2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXI6IHsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBP
YmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJl
ZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Y2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9u
IikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5v
dENlbGxDYXNlKTsKLQotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgewotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkg
JiB+U3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBl
OjpPYmplY3Q6Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLCBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hl
Y2tJbmZlcnJlZFR5cGUgT2JqZWN0T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVj
a0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShj
ZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7Ci0KLSAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1
ZSwgcHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENh
c2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAg
ICAgICAgICBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7
Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCBpbmZlcnJlZCB0eXBlIik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb2Fk
UHJvcGVydHkoTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRk
cmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3RvcmVQcm9wZXJ0eSgKLSAgICAgICAgTFZhbHVlIHZhbHVlLCBM
VmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc09mUHJv
cGVydHkoc3RvcmFnZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7Ci0gICAgfQotICAgIAot
ICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzT2ZQcm9wZXJ0eSgKLSAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKAotICAgICAgICAgICAgbV9oZWFwcy5w
cm9wZXJ0aWVzW2lkZW50aWZpZXJOdW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFz
ZShvZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9u
KAotICAgICAgICBMVmFsdWUgb2JqZWN0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgICAg
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkK
LSAgICB7Ci0gICAgICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQotICAgICAgICAgICAg
cmV0dXJuIG9iamVjdDsKLSAgICAgICAgCi0gICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBuZXh0U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KQotICAgICAgICAgICAgcmV0dXJuIGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKCFwcmV2aW91c1N0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0g
ICAgICAgICAgICAgICAgb2JqZWN0LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KSwK
LSAgICAgICAgICAgICAgICBwcmV2aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3Ry
dWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7Ci0gICAgICAgICAgICByZXR1cm4gdm1DYWxsKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmludFB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9w
ZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFjaXR5KSwKLSAgICAgICAgICAgICAgICBtX2NhbGxG
cmFtZSwgb2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAotICAgICAgICBMVmFsdWUg
b2JqZWN0LCBMVmFsdWUgb2xkU3RvcmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJl
KiBuZXh0KQotICAgIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZM
aW5lR3Jvd3RoRmFjdG9yOyAKLQotICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUg
PT0gbmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJl
dmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBu
ZXdBbGxvY1NpemUgPSBtX291dC5jb25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25SZWFsbG9jYXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwg
bV9jYWxsRnJhbWUsIG9iamVjdCwgbmV3QWxsb2NTaXplKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJ
bXBsKG5ld1NpemUpOwotCi0gICAgICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJ
bmRleGluZ0hlYWRlcikgLSBzaXplb2Yodm9pZCopOwotICAgICAgICBwdHJkaWZmX3QgZW5kU3Rv
cmFnZSA9IGhlYWRlclNpemUgLSBzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXpl
b2YoSlNWYWx1ZSkpOwotCi0gICAgICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNp
emU7IG9mZnNldCA+IGVuZFN0b3JhZ2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgbG9hZGVkID0gCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0ciht
X291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdl
LCBvZmZzZXQpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRk
cmVzcyhtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291
dC5hZGRyZXNzKG9iamVjdCwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQotICAgIHsK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZVdpdGhTaXplSW1wbCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxs
b2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihzaXplSW5WYWx1ZXMgKiBzaXplb2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7Ci0gICAgICAgIAot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgbV9vdXQuYWRkKG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRl
cikpLCBlbmRPZlN0b3JhZ2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250
aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHNsb3dCdXR0ZXJmbHlWYWx1ZTsK
LSAgICAgICAgaWYgKHNpemVJblZhbHVlcyA9PSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpIHsK
LSAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAg
ICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRy
PExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAg
fSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBs
YXp5U2xvd1BhdGgoCi0gICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHNpemVJblZhbHVlcykpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Io
c2xvd0J1dHRlcmZseVZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBMVmFs
dWUgZ2V0QnlJZChMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25v
ZGU7Ci0gICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJz
KClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXTsKLQotICAgICAgICBCMzo6UGF0Y2hwb2ludFZh
bHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7Ci0gICAgICAgIHBhdGNo
cG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKLQotICAgICAgICAvLyBGSVhNRTogSWYg
dGhpcyBpcyBhIEdldEJ5SWRGbHVzaCwgd2UgbWlnaHQgZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYm9v
c3QgaWYgd2UgY2xhaW0gdGhhdCBpdAotICAgICAgICAvLyBjbG9iYmVycyB2b2xhdGlsZSByZWdp
c3RlcnMgbGF0ZS4gSXQncyBub3QgbmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgdGhvdWdoLCBz
aW5jZSB0aGUKLSAgICAgICAgLy8gSUMgY29kZSBpcyBzdXBlciBzbWFydCBhYm91dCBzYXZpbmcg
cmVnaXN0ZXJzLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUyODQ4Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0KLSAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigK
LSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJh
dGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENv
ZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJnZXQgZm9y
IG9wZXJhdGlvbiBjYWxscy4KLSAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1w
TGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+
c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGV4aXQgZm9yIGNhbGwgSUMncyBjcmVhdGVkIGJ5IHRoZSBnZXRC
eUlkIGZvciBnZXR0ZXJzLiBXZSBkb24ndCBoYXZlCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8g
YW55dGhpbmcgd2VpcmQgb3RoZXIgdGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwgYXNzb2Np
YXRlIHRoZSBleGl0IHdpdGgKLSAgICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW5kZXgu
Ci0gICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZv
clVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgYXV0byBn
ZW5lcmF0b3IgPSBCb3g8SklUR2V0QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAg
ICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxTaXRl
SW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+
Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQ
YXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1Bh
dGhKdW1wKCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBwYXJh
bXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlk
KSkuY2FsbCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9u
ZSwgJmppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0U2xv
d1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVmZmVyKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsK
LQotICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZEJ1
dHRlcmZseVdpdGhCYXJyaWVyKExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
Y29weUJhcnJpZXIoCi0gICAgICAgICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBt
X2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7Ci0gICAg
fQotICAgIAotICAgIExWYWx1ZSBsb2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9i
amVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOwotICAgICAgICByZXR1cm4g
Y29weUJhcnJpZXIoCi0gICAgICAgICAgICBmYXN0UmVzdWx0VmFsdWUsCi0gICAgICAgICAgICBb
Jl0gKCkgLT4gTFZhbHVlIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIHNsb3cgcGF0aCIp
KTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImxvYWRWZWN0b3JXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7Ci0KLSAg
ICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZh
c3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVk
QXJyYXkob2JqZWN0KSwgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsK
LQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jl
c3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlC
dWZmZXJWZWN0b3IsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9LCBvYmplY3QpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1f
b3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50
ZXIsIFBfSklUT3BlcmF0aW9uX0VDIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBy
ZXR1cm4gY29weUJhcnJpZXIoCi0gICAgICAgICAgICBwb2ludGVyLAotICAgICAgICAgICAgWyZd
ICgpIC0+IExWYWx1ZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKLSAg
ICAgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMp
IC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3dQYXRoRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9j
YXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsK
LSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgTFZhbHVlIGNvcHlCYXJyaWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNvcHlCYXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBjb250
aW51YXRpb24iKSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihwb2ludGVyKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50
ZXIpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwotCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVh
dGlvbik7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihmdW5jdG9yKCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVy
biBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgaXNJblRvU3BhY2UoTFZhbHVlIHBvaW50ZXIpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQudGVzdElzWmVyb1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihD
b3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpOwotICAgIH0KLQotICAgIExWYWx1ZSBsb2FkQnV0
dGVyZmx5UmVhZE9ubHkoTFZhbHVlIG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZW1v
dmVTcGFjZUJpdHMobV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVy
Zmx5KSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2Jq
ZWN0KQotICAgIHsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQ
dHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7Ci0KLSAgICAgICAg
TEJhc2ljQmxvY2sgcG9zc2libHlGcm9tU3BhY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxv
YWRWZWN0b3JSZWFkT25seSBwb3NzaWJseSBmcm9tIHNwYWNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFk
T25seSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOwotCi0gICAgICAgIG1fb3V0LmJyYW5j
aChpc0luVG9TcGFjZShmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShwb3NzaWJseUZyb21TcGFjZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8ocG9zc2libHlGcm9tU3BhY2UsIGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAg
IGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1bHRWYWx1
ZSksIGZhc3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIExWYWx1ZSByZW1vdmVTcGFjZUJp
dHMoTFZhbHVlIHN0b3JhZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5kKAot
ICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0
cl90PihDb3B5QmFycmllckJhc2U6OnNwYWNlQml0cykpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
aXNGYXN0VHlwZWRBcnJheShMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFwcy5KU0Fy
cmF5QnVmZmVyVmlld19tb2RlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5
cGVkQXJyYXkpKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRl
eGVkQWJzdHJhY3RIZWFwJiBoZWFwLCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBFZGdl
IGVkZ2UsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmJhc2VJbmRleCgKLSAgICAgICAgICAgIGhlYXAsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpLCBwcm92ZW5WYWx1ZShlZGdlKSwgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBJbnRGdW5jdG9yLCB0eXBlbmFtZSBEb3VibGVGdW5jdG9yPgotICAgIHZvaWQg
Y29tcGFyZSgKLSAgICAgICAgY29uc3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgY29uc3QgRG91
YmxlRnVuY3RvciYgZG91YmxlRnVuY3RvciwKLSAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGhl
bHBlckZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KEludDMyVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkpIHsKLSAgICAgICAgICAgIElu
dDUyS2luZCBraW5kOwotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1
MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxv
d0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihp
bnRGdW5jdG9yKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBV
c2UpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4oZG91YmxlRnVuY3RvcihsZWZ0LCByaWdodCkp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKLSAgICAgICAgICAgIG5vblNw
ZWN1bGF0aXZlQ29tcGFyZShpbnRGdW5jdG9yLCBoZWxwZXJGdW5jdGlvbik7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGFy
ZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQp
Ci0gICAgewotICAgICAgICBMVmFsdWUgcmlnaHRDZWxsID0gbG93Q2VsbChyaWdodENoaWxkKTsK
LSAgICAgICAgTFZhbHVlIGxlZnRWYWx1ZSA9IGxvd0pTVmFsdWUobGVmdENoaWxkLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2Jq
ZWN0KHJpZ2h0Q2hpbGQsIHJpZ2h0Q2VsbCwgU3BlY09iamVjdCk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsZWZ0Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBh
cmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCBsZWZ0IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGVmdE5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJl
RXFPYmplY3RPck90aGVyVG9PYmplY3QgbGVmdCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVF
cU9iamVjdE9yT3RoZXJUb09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0NlbGwobGVmdFZhbHVlLCBwcm92ZW5UeXBl
KGxlZnRDaGlsZCkpLAotICAgICAgICAgICAgdW5zdXJlKGxlZnRDZWxsQ2FzZSksIHVuc3VyZShs
ZWZ0Tm90Q2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obGVmdENlbGxDYXNlLCBsZWZ0Tm90Q2VsbENhc2UpOwotICAgICAg
ICBzcGVjdWxhdGVUcnV0aHlPYmplY3QobGVmdENoaWxkLCBsZWZ0VmFsdWUsIFNwZWNPYmplY3Qg
fCAoflNwZWNDZWxsKSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuZXF1YWwocmlnaHRDZWxsLCBsZWZ0VmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bGVmdE5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBGVExfVFlQRV9DSEVDSygK
LSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShsZWZ0VmFsdWUpLCBsZWZ0Q2hpbGQsIFNwZWNPdGhl
ciB8IFNwZWNDZWxsLCBpc05vdE90aGVyKGxlZnRWYWx1ZSkpOwotICAgICAgICBWYWx1ZUZyb21C
bG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShtX291dC5ib29sZWFuLCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVl
IGNlbGwsIFNwZWN1bGF0ZWRUeXBlIGZpbHRlcikKLSAgICB7Ci0gICAgICAgIGlmIChtYXNxdWVy
YWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICBG
VExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmpl
Y3QoY2VsbCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNO
b3RPYmplY3QoY2VsbCkpOwotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgbV9vdXQudGVz
dE5vblplcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBt
X2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSW50RnVuY3Rvcj4KLSAgICB2b2lkIG5vblNwZWN1bGF0aXZlQ29tcGFyZShjb25z
dCBJbnRGdW5jdG9yJiBpbnRGdW5jdG9yLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rp
b24pCi0gICAgewotICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsZWZ0SXNJbnQgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGxlZnQgaXMgaW50IikpOwotICAgICAgICBM
QmFzaWNCbG9jayBmYXN0UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVu
dHlwZWQgZmFzdCBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgc2xvdyBwYXRoIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBh
cmVFcSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJy
YW5jaChpc05vdEludDMyKGxlZnQpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGxlZnRJc0lu
dCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhsZWZ0SXNJbnQsIGZhc3RQYXRoKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50
MzIocmlnaHQpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGludEZ1bmN0b3IodW5ib3hJ
bnQzMihsZWZ0KSwgdW5ib3hJbnQzMihyaWdodCkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQubm90TnVsbCh2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnRQdHIsIG1f
b3V0Lm9wZXJhdGlvbihoZWxwZXJGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgc3RyaW5nc0VxdWFsKExWYWx1ZSBsZWZ0SlNTdHJpbmcsIExWYWx1
ZSByaWdodEpTU3RyaW5nKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5
VW5lcXVhbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBub3QgdHJp
dmlhbGx5IHVuZXF1YWwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbm90IGVtcHR5IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoInN0cmluZ3NFcXVhbCBsZWZ0IHJlYWR5IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IHJpZ2h0UmVhZHlDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmln
aHQgcmVhZHkgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGVmdDhCaXRDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgbGVmdCA4LWJpdCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayByaWdodDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgcmlnaHQgOC1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbG9v
cCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxvb3AiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGJ5dGVzRXF1YWwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NF
cXVhbCBieXRlcyBlcXVhbCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCB0cnVlIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGZhbHNlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFs
IGZhbHNlIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgc2xvdyBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihs
ZWZ0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKLQotICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmxvYWQzMihy
aWdodEpTU3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpLAotICAgICAgICAgICAgdW5z
dXJlKGZhbHNlQ2FzZSksIHVuc3VyZShub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSkpOwotCi0gICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5VW5l
cXVhbENhc2UsIG5vdEVtcHR5Q2FzZSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmlz
WmVybzMyKGxlbmd0aCksIHVuc3VyZSh0cnVlQ2FzZSksIHVuc3VyZShub3RFbXB0eUNhc2UpKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RFbXB0eUNhc2UsIGxlZnRSZWFkeUNhc2UpOwot
Ci0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbV9vdXQubG9hZFB0cihsZWZ0SlNTdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291dC5sb2FkUHRy
KHJpZ2h0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotCi0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3ROdWxsKGxlZnQpLCB1c3VhbGx5KGxlZnRSZWFkeUNhc2UpLCByYXJl
bHkoc2xvd0Nhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhsZWZ0UmVhZHlDYXNlLCBy
aWdodFJlYWR5Q2FzZSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90
TnVsbChyaWdodCksIHVzdWFsbHkocmlnaHRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhyaWdodFJlYWR5Q2FzZSwgbGVmdDhCaXRDYXNlKTsK
LQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9o
YXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1w
bDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAgICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUo
bGVmdDhCaXRDYXNlKSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdDhCaXRDYXNlLCBy
aWdodDhCaXRDYXNlKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHJpZ2h0LCBtX2hl
YXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAgICAgICAgdW5zdXJlKHNs
b3dDYXNlKSwgdW5zdXJlKHJpZ2h0OEJpdENhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhyaWdodDhCaXRDYXNlLCBsb29wKTsKLQotICAgICAgICBMVmFsdWUgbGVmdERhdGEgPSBtX291
dC5sb2FkUHRyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKLSAgICAgICAgTFZhbHVl
IHJpZ2h0RGF0YSA9IG1fb3V0LmxvYWRQdHIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRh
KTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmRleEF0U3RhcnQgPSBtX291dC5hbmNob3Io
bGVuZ3RoKTsKLQotICAgICAgICBtX291dC5qdW1wKGxvb3ApOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3AsIGJ5dGVzRXF1YWwpOwotCi0gICAgICAgIExWYWx1ZSBpbmRleEF0TG9vcFRv
cCA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW5kZXhBdFN0YXJ0KTsKLSAgICAgICAgTFZhbHVl
IGluZGV4SW5Mb29wID0gbV9vdXQuc3ViKGluZGV4QXRMb29wVG9wLCBtX291dC5pbnQzMk9uZSk7
Ci0KLSAgICAgICAgTFZhbHVlIGxlZnRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCi0gICAg
ICAgICAgICBtX291dC5iYXNlSW5kZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgbGVmdERhdGEsIG1f
b3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3ApKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodEJ5dGUg
PSBtX291dC5sb2FkOFplcm9FeHQzMigKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLmNoYXJhY3RlcnM4LCByaWdodERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3Ap
KSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGxlZnRCeXRlLCByaWdo
dEJ5dGUpLCB1bnN1cmUoZmFsc2VDYXNlKSwgdW5zdXJlKGJ5dGVzRXF1YWwpKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyhieXRlc0VxdWFsLCB0cnVlQ2FzZSk7Ci0KLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgaW5kZXhGb3JOZXh0SXRlcmF0aW9uID0gbV9vdXQuYW5jaG9yKGluZGV4SW5Mb29w
KTsKLSAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleEF0TG9vcFRvcCwgaW5kZXhG
b3JOZXh0SXRlcmF0aW9uKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihp
bmRleEluTG9vcCksIHVuc3VyZShsb29wKSwgdW5zdXJlKHRydWVDYXNlKSk7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8odHJ1ZUNhc2UsIGZhbHNlQ2FzZSk7Ci0gICAgICAgIAotICAgICAgICBW
YWx1ZUZyb21CbG9jayB0cnVlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVl
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGZhbHNlQ2FzZSwgc2xvd0Nhc2UpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
bHNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2Fz
ZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gdm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlU3RyaW5nRXEpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIGxlZnRKU1N0cmluZywg
cmlnaHRKU1N0cmluZyk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3IodW5ib3hCb29sZWFuKHNsb3dSZXN1bHRWYWx1ZSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1
ZVJlc3VsdCwgZmFsc2VSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIGVudW0gU2Ny
YXRjaEZQUlVzYWdlIHsKLSAgICAgICAgRG9udE5lZWRTY3JhdGNoRlBSLAotICAgICAgICBOZWVk
U2NyYXRjaEZQUgotICAgIH07Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdl
bmVyYXRvciwgU2NyYXRjaEZQUlVzYWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRj
aEZQUj4KLSAgICB2b2lkIGVtaXRCaW5hcnlTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93
UGF0aEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQp
OwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOwotICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVt
YmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwotICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
LSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
LSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMjsKLSAgICAgICAgaWYgKHNjcmF0
Y2hGUFJVc2FnZSA9PSBOZWVkU2NyYXRjaEZQUikKLSAgICAgICAgICAgIHBhdGNocG9pbnQtPm51
bUZQU2NyYXRjaFJlZ2lzdGVycysrOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9
ICZtX2Z0bFN0YXRlOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0gICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJV
c2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9u
SGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8QmluYXJ5QXJpdGhPcEdlbmVyYXRvcj46
OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwg
SlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmZwU2NyYXRjaCgx
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUlVz
YWdlID09IE5lZWRTY3JhdGNoRlBSID8gcGFyYW1zLmZwU2NyYXRjaCgyKSA6IEludmFsaWRGUFJS
ZWcpOwotCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7
Ci0KLSAgICAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLT5kaWRFbWl0RmFzdFBhdGgoKSkgewot
ICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVs
KCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgp
LmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdw
cigpLCBwYXJhbXNbMV0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0u
Z3ByKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHNl
dEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmlu
YXJ5Qml0T3BHZW5lcmF0b3I+Ci0gICAgdm9pZCBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0KEpfSklU
T3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9k
ZSA9IG1fbm9kZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhj
ZXB0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MTY4NgotICAgICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1
ZShub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9k
ZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBl
dE9wZXJhbmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVz
dWx0VHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBw
ZW5kU29tZVJlZ2lzdGVyKGxlZnQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVn
aXN0ZXIocmlnaHQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1
ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3RlcikpOwotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVn
aXN0ZXJzID0gMTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFj
cm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChD
Q2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMp
IHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9
IEJveDxCaW5hcnlCaXRPcEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1
ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7Ci0KLSAgICAgICAg
ICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgoaml0KTsKLSAgICAgICAgICAgICAg
ICBnZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKLQotICAgICAgICAgICAgICAg
IHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBl
cnMmIGppdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCku
bGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJd
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUs
ICZqaXQpOwotICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgfQotCi0gICAgdm9pZCBlbWl0UmlnaHRT
aGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNoaWZ0VHlwZSkK
LSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogTWFrZSB0aGlzIGRvIGV4Y2VwdGlvbnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE2ODYKLSAgICAgICAgICAgIAotICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFs
dWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBTbmlwcGV0
T3BlcmFuZCBsZWZ0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3Vs
dFR5cGUoKSk7Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQyKCkpLnJlc3VsdFR5cGUoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7
Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKHJpZ2h0KTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+YXBwZW5kKG1fdGFnTWFzaywgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKLSAgICAgICAgUmVmUHRy
PFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9Ci0gICAgICAgICAg
ICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7Ci0gICAgICAgIHBh
dGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Ci0gICAgICAgIHBhdGNocG9pbnQt
Pm51bUZQU2NyYXRjaFJlZ2lzdGVycyA9IDE7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIo
UmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKLSAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAg
ICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFy
YW1zKS0+anVtcHMoaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
YXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUmlnaHRTaGlmdEdlbmVyYXRvcj46OmNyZWF0ZSgKLSAg
ICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3Mo
cGFyYW1zWzBdLmdwcigpKSwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1z
WzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKLSAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwgSW52YWxpZEZQ
UlJlZywgc2hpZnRUeXBlKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVG
YXN0UGF0aChqaXQpOwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5s
aW5rKCZqaXQpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGpp
dC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPnNsb3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbiA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hpZnRUeXBlID09IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6
OlNpZ25lZFNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25WYWx1
ZUJpdFJTaGlmdCA6IG9wZXJhdGlvblZhbHVlQml0VVJTaGlmdDsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygp
LCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg
c2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxs
KExWYWx1ZSBhbGxvY2F0b3IsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgib2JqZWN0IGFsbG9j
YXRpb24gc3VjY2VzcyIpKTsKLSAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdDsKLSAgICAgICAg
TFZhbHVlIGNvbmRpdGlvbjsKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMo
KSkgewotICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuaW50UHRyWmVybzsKLSAgICAgICAgICAg
IGNvbmRpdGlvbiA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0LmxvYWRQdHIoCi0gICAgICAgICAgICAgICAgYWxsb2NhdG9y
LCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwotICAgICAgICAgICAgY29u
ZGl0aW9uID0gbV9vdXQubm90TnVsbChyZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChjb25kaXRpb24sIHVzdWFsbHkoc3VjY2VzcyksIHJhcmVseShzbG93UGF0aCkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3VjY2Vzcyk7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5zdG9yZVB0cigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBt
X2hlYXBzLkpTQ2VsbF9mcmVlTGlzdE5leHQpLAotICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hl
YXBzLk1hcmtlZEFsbG9jYXRvcl9mcmVlTGlzdEhlYWQpOwotCi0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0
LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBtX291dC5jb25z
dEludDMyKHN0cnVjdHVyZS0+b2JqZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAotICAgICAgICAg
ICAgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF91c2VmdWxCeXRlcyk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGFsbG9jYXRlQ2VsbChMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
TEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxs
b2NhdGVDZWxsKGFsbG9jYXRvciwgc2xvd1BhdGgpOwotICAgICAgICBzdG9yZVN0cnVjdHVyZShy
ZXN1bHQsIHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGFsbG9jYXRlT2JqZWN0KAotICAgICAgICBMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3Ry
dWN0dXJlLCBzbG93UGF0aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgcmVz
dWx0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KLSAgICBMVmFs
dWUgYWxsb2NhdGVPYmplY3QoCi0gICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAg
ICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9y
T2JqZWN0T2ZUeXBlPENsYXNzVHlwZT4oc2l6ZSk7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0ZU9i
amVjdChtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwg
c2xvd1BhdGgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+
Ci0gICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUg
YnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
bGxvY2F0ZU9iamVjdDxDbGFzc1R5cGU+KAotICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0
aW9uU2l6ZSgwKSwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKLSAgICB9Ci0gICAg
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xhc3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3QoCi0gICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgTFZhbHVlIGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNw
YWNlOjpwcmVjaXNlU3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6
OmltcHJlY2lzZVN0ZXAgJiAoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJr
ZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotCi0gICAg
ICAgIExWYWx1ZSBzdWJzcGFjZSA9IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3Bh
Y2VGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNtYWxsQ2FzZUJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3Qgc21hbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFy
Z2VPck92ZXJzaXplQ2FzZUJsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZh
cmlhYmxlU2l6ZWRPYmplY3QgbGFyZ2Ugb3Igb3ZlcnNpemUgY2FzZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFyZ2VDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRl
VmFyaWFibGVTaXplZE9iamVjdCBsYXJnZSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXpl
ZE9iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdXByb3Vu
ZGVkU2l6ZSA9IG1fb3V0LmFkZChzaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpw
cmVjaXNlU3RlcCAtIDEpKTsKLSAgICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1
cHJvdW5kZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0b2Zm
KSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc1NtYWxsLCB1bnN1cmUoc21hbGxDYXNlQmxvY2sp
LCB1bnN1cmUobGFyZ2VPck92ZXJzaXplQ2FzZUJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsQ2FzZUJsb2NrLCBsYXJn
ZU9yT3ZlcnNpemVDYXNlQmxvY2spOwotICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2Vf
cHJlY2lzZUFsbG9jYXRvcnMsIHN1YnNwYWNlLAotICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0
cihtX291dC5sU2hyKHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1h
cmtlZFNwYWNlOjpwcmVjaXNlU3RlcCkpKSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFs
bEFsbG9jYXRvciA9IG1fb3V0LmFuY2hvcihhZGRyZXNzLnZhbHVlKCkpOwotICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhs
YXJnZU9yT3ZlcnNpemVDYXNlQmxvY2ssIGxhcmdlQ2FzZUJsb2NrKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29u
c3RJbnQzMihNYXJrZWRTcGFjZTo6aW1wcmVjaXNlQ3V0b2ZmKSksCi0gICAgICAgICAgICB1c3Vh
bGx5KGxhcmdlQ2FzZUJsb2NrKSwgcmFyZWx5KHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhsYXJnZUNhc2VCbG9jaywgY29udGludWF0aW9uKTsKLSAgICAgICAg
YWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3Bh
Y2VfU3Vic3BhY2VfaW1wcmVjaXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAgICBt
X291dC56ZXJvRXh0UHRyKG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQz
MihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXApKSkpKTsKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbGFyZ2VBbGxvY2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VB
bGxvY2F0b3IpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9j
YXRvciwgc3RydWN0dXJlLCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKLSAgICB9Ci0gICAgCi0gICAg
Ly8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi4KLSAgICBM
VmFsdWUgYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoTFZhbHVlIHNpemUsIExCYXNpY0Js
b2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3Ig
PSB2bSgpLmhlYXAuc3RvcmFnZUFsbG9jYXRvcigpOwotICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgc3VjY2VzcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RvcmFnZSBhbGxvY2F0aW9u
IHN1Y2Nlc3MiKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVtYWluaW5nID0gbV9vdXQu
bG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFJlbWFpbmluZykpOwot
ICAgICAgICBMVmFsdWUgbmV3UmVtYWluaW5nID0gbV9vdXQuc3ViKHJlbWFpbmluZywgc2l6ZSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5sZXNz
VGhhbihuZXdSZW1haW5pbmcsIG1fb3V0LmludFB0clplcm8pLAotICAgICAgICAgICAgcmFyZWx5
KHNsb3dQYXRoKSwgdXN1YWxseShzdWNjZXNzKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhzdWNjZXNzKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG5ld1Jl
bWFpbmluZywgbV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRSZW1haW5pbmcpKTsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LnN1YigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9v
dXQuYWJzb2x1dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmlu
Zyk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlKExWYWx1ZSBzaXpl
LCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5zdWIo
YWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRHZXRFbmQoc2l6ZSwgc2xvd1BhdGgpLCBzaXplKTsKLSAg
ICB9Ci0gICAgCi0gICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJl
KQotICAgIHsKLSAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6
YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAgTWFy
a2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdp
dGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBz
bG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYWxsb2NhdGVPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZv
cmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKGFsbG9jYXRvciksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgp
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0
aW9uc1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSkpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5w
aGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0gICAgCi0g
ICAgc3RydWN0IEFycmF5VmFsdWVzIHsKLSAgICAgICAgQXJyYXlWYWx1ZXMoKQotICAgICAgICAg
ICAgOiBhcnJheSgwKQotICAgICAgICAgICAgLCBidXR0ZXJmbHkoMCkKLSAgICAgICAgewotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBBcnJheVZhbHVlcyhMVmFsdWUgYXJyYXksIExWYWx1
ZSBidXR0ZXJmbHkpCi0gICAgICAgICAgICA6IGFycmF5KGFycmF5KQotICAgICAgICAgICAgLCBi
dXR0ZXJmbHkoYnV0dGVyZmx5KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSBhcnJheTsKLSAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKLSAgICB9OwotICAg
IEFycmF5VmFsdWVzIGFsbG9jYXRlSlNBcnJheSgKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIHVuc2lnbmVkIG51bUVsZW1lbnRzLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCgKLSAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkKLSAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KQotICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KSk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChC
QVNFX1ZFQ1RPUl9MRU4sIG51bUVsZW1lbnRzKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBl
bmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVv
ZihJbmRleGluZ0hlYWRlcikpLAotICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9IG1fb3V0LnN1YigKLSAgICAgICAgICAgIGVuZE9mU3Rv
cmFnZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKSk7
Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJh
eT4oCi0gICAgICAgICAgICBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwg
YnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICBtX291
dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIodmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hl
YXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGhhc0Rv
dWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtRWxlbWVudHM7IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAgICAgICAgICAgICAgYnV0
dGVyZmx5LCBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVj
dCwgYnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgCi0gICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0Fy
cmF5KFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICB7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0Fy
cmF5IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBBcnJh
eVZhbHVlcyBmYXN0VmFsdWVzID0gYWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVu
dHMsIHNsb3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdEFycmF5ID0gbV9vdXQu
YW5jaG9yKGZhc3RWYWx1ZXMuYXJyYXkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0
dGVyZmx5ID0gbV9vdXQuYW5jaG9yKGZhc3RWYWx1ZXMuYnV0dGVyZmx5KTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIExWYWx1ZSBzbG93
QXJyYXlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSk7
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9v
dXQuYW5jaG9yKHNsb3dBcnJheVZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1
dHRlcmZseSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd0Fy
cmF5VmFsdWUsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7Ci0KLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gQXJyYXlWYWx1
ZXMoCi0gICAgICAgICAgICBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QXJyYXksIHNsb3dB
cnJheSksCi0gICAgICAgICAgICBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5
LCBzbG93QnV0dGVyZmx5KSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBib29saWZ5KEVkZ2Ug
ZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAg
Y2FzZSBCb29sZWFuVXNlOgotICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKLSAgICAgICAg
ICAgIHJldHVybiBsb3dCb29sZWFuKGVkZ2UpOwotICAgICAgICBjYXNlIEludDMyVXNlOgotICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm8zMihsb3dJbnQzMihlZGdlKSk7Ci0gICAgICAg
IGNhc2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZU5vdEVx
dWFsQW5kT3JkZXJlZChsb3dEb3VibGUoZWRnZSksIG1fb3V0LmRvdWJsZVplcm8pOwotICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubG9naWNh
bE5vdCgKLSAgICAgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKLSAgICAgICAgICAg
ICAgICAgICAgZWRnZSwgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0LCBTcGVjdWxhdGVOdWxsT3JV
bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgICAgIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikp
OwotICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ1Zh
bHVlID0gbG93U3RyaW5nKGVkZ2UpOwotICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0
LmxvYWQzMk5vbk5lZ2F0aXZlKHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291dC5pbnQzMlpl
cm8pOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gSW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6Ci0g
ICAgICAgICAgICAvLyBpZiAodmFsdWUgaXMgY2VsbCkgewotICAgICAgICAgICAgLy8gICAgIGlm
ICh2YWx1ZSBpcyBzdHJpbmcpCi0gICAgICAgICAgICAvLyAgICAgICAgIHJlc3VsdCA9ICEhdmFs
dWUtPmxlbmd0aAotICAgICAgICAgICAgLy8gICAgIGVsc2UgewotICAgICAgICAgICAgLy8gICAg
ICAgICBkbyBldmlsIHRoaW5ncyBmb3IgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkCi0gICAgICAg
ICAgICAvLyAgICAgICAgIHJlc3VsdCA9IHRydWUKLSAgICAgICAgICAgIC8vICAgICB9Ci0gICAg
ICAgICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIGludDMyKSB7Ci0gICAgICAgICAgICAvLyAg
ICAgcmVzdWx0ID0gISF1bmJveEludDMyKHZhbHVlKQotICAgICAgICAgICAgLy8gfSBlbHNlIGlm
ICh2YWx1ZSBpcyBudW1iZXIpIHsKLSAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94
RG91YmxlKHZhbHVlKQotICAgICAgICAgICAgLy8gfSBlbHNlIHsKLSAgICAgICAgICAgIC8vICAg
ICByZXN1bHQgPSB2YWx1ZSA9PSBqc1RydWUKLSAgICAgICAgICAgIC8vIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBzdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgc3Ry
aW5nIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmdDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90IHN0cmluZyBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkJvb2xpZnkgdW50eXBlZCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaW50MzJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQg
aW50MzIgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEludDMyQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBpbnQzMiBjYXNlIikpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQm9vbGlmeSB1bnR5cGVkIGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbm90RG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVk
IG5vdCBkb3VibGUgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1
bHRzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oY2VsbENhc2UsIHN0cmluZ0Nhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYg
U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKG5v
dFN0cmluZ0Nhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c3RyaW5nQ2FzZSwgbm90U3RyaW5nQ2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgbm9uRW1wdHlT
dHJpbmcgPSBtX291dC5ub3RaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7Ci0gICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iobm9uRW1wdHlTdHJpbmcpKTsKLSAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90U3RyaW5nQ2FzZSwgbm90Q2VsbENhc2UpOwotICAgICAgICAgICAgTFZh
bHVlIGlzVHJ1dGh5T2JqZWN0OwotICAgICAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgaXNUcnV0aHlPYmpl
Y3QgPSBtX291dC5ib29sZWFuVHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG1hc3F1ZXJhZGVzQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIG1hc3F1ZXJhZGVzIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5U
cnVlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUlu
Zm9GbGFncyksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51
YXRpb24pLCByYXJlbHkobWFzcXVlcmFkZXNDYXNlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFzcXVlcmFkZXNDYXNlKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpc1RydXRoeU9iamVjdCA9IG1fb3V0Lm5vdEVxdWFsKAot
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBtX291
dC5sb2FkUHRyKGxvYWRTdHJ1Y3R1cmUodmFsdWUpLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxP
YmplY3QpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihpc1RydXRoeU9iamVjdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxs
Q2FzZSwgaW50MzJDYXNlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAg
ICAgICBpc0ludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKLSAgICAg
ICAgICAgICAgICB1bnN1cmUoaW50MzJDYXNlKSwgdW5zdXJlKG5vdEludDMyQ2FzZSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbnQzMkNhc2UsIG5vdEludDMy
Q2FzZSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90
WmVybzMyKHVuYm94SW50MzIodmFsdWUpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJ
bnQzMkNhc2UsIGRvdWJsZUNhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgICAgIGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoZG91YmxlQ2FzZSksIHVuc3VyZShub3REb3VibGVDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2Us
IG5vdERvdWJsZUNhc2UpOwotICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUlzVHJ1dGh5ID0gbV9v
dXQuZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKAotICAgICAgICAgICAgICAgIHVuYm94RG91Ymxl
KHZhbHVlKSwgbV9vdXQuY29uc3REb3VibGUoMCkpOwotICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQobV9vdXQuYW5jaG9yKGRvdWJsZUlzVHJ1dGh5KSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vdERvdWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBMVmFsdWUgbWlzY0lz
VHJ1dGh5ID0gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKTsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtaXNjSXNUcnV0aHkpKTsKLSAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmJvb2xlYW4sIHJlc3VsdHMpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBl
bnVtIFN0cmluZ09yT2JqZWN0TW9kZSB7Ci0gICAgICAgIEFsbENlbGxzQXJlRmFsc2UsCi0gICAg
ICAgIENlbGxDYXNlU3BlY3VsYXRlc09iamVjdAotICAgIH07Ci0gICAgZW51bSBFcXVhbE51bGxP
clVuZGVmaW5lZE1vZGUgewotICAgICAgICBFcXVhbE51bGwsCi0gICAgICAgIEVxdWFsVW5kZWZp
bmVkLAotICAgICAgICBFcXVhbE51bGxPclVuZGVmaW5lZCwKLSAgICAgICAgU3BlY3VsYXRlTnVs
bE9yVW5kZWZpbmVkCi0gICAgfTsKLSAgICBMVmFsdWUgZXF1YWxOdWxsT3JVbmRlZmluZWQoCi0g
ICAgICAgIEVkZ2UgZWRnZSwgU3RyaW5nT3JPYmplY3RNb2RlIGNlbGxNb2RlLCBFcXVhbE51bGxP
clVuZGVmaW5lZE1vZGUgcHJpbWl0aXZlTW9kZSwKLSAgICAgICAgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBvcGVyYW5kTW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0g
ICAgICAgIGJvb2wgdmFsaWRXYXRjaHBvaW50ID0gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNo
cG9pbnRJc1N0aWxsVmFsaWQoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgb3BlcmFuZE1vZGUpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVk
IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmluZWQgcHJpbWl0aXZlIGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiRXF1YWxOdWxsT3JVbmRlZmluZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3Vy
ZShwcmltaXRpdmVDYXNlKSwgdW5zdXJlKGNlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmltaXRpdmVD
YXNlKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAoY2VsbE1vZGUpIHsKLSAgICAgICAgY2FzZSBB
bGxDZWxsc0FyZUZhbHNlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbENh
c2VTcGVjdWxhdGVzT2JqZWN0OgotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2Jq
ZWN0LCBpc05vdE9iamVjdCh2YWx1ZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICh2YWxpZFdhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKLSAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIG1hc3F1ZXJhZGVzQ2FzZSA9Ci0gICAgICAgICAgICAgICAgRlRMX05F
V19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBtYXNxdWVyYWRlcyBjYXNlIikp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5
cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkobWFzcXVlcmFkZXND
YXNlKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8obWFzcXVlcmFkZXNDYXNlLCBwcmltaXRpdmVDYXNlKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50UHRyKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hl
YXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVl
IHByaW1pdGl2ZVJlc3VsdDsKLSAgICAgICAgc3dpdGNoIChwcmltaXRpdmVNb2RlKSB7Ci0gICAg
ICAgIGNhc2UgRXF1YWxOdWxsOgotICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQu
ZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBFcXVhbFVuZGVmaW5lZDoKLSAgICAgICAgICAgIHByaW1pdGl2
ZVJlc3VsdCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZp
bmVkKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFcXVhbE51bGxPclVuZGVm
aW5lZDoKLSAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IGlzT3RoZXIodmFsdWUsIHByb3Zl
blR5cGUoZWRnZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3BlY3VsYXRl
TnVsbE9yVW5kZWZpbmVkOgotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAg
ICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlz
Tm90T3RoZXIodmFsdWUpKTsKLSAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmJv
b2xlYW5UcnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKHByaW1pdGl2ZVJlc3VsdCkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5waGko
bV9vdXQuYm9vbGVhbiwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZT4KLSAgICB2b2lkIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRz
KAotICAgICAgICBGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbiwgTFZhbHVlIGJhc2UsIExW
YWx1ZSBzdG9yYWdlLCBMVmFsdWUgaW5kZXgsIExWYWx1ZSB2YWx1ZSwKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGlzTm90SW5Cb3VuZHMg
PSBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7Ci0gICAg
ICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIG5vdEluQm91bmRzQ2FzZSA9Ci0gICAgICAgICAgICAgICAgRlRMX05FV19C
TE9DSyhtX291dCwgKCJQdXRCeVZhbCBub3QgaW4gYm91bmRzIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgcGVyZm9ybVN0b3JlID0KLSAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlB1dEJ5VmFsIHBlcmZvcm0gc3RvcmUiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbkJvdW5kcywgdW5zdXJlKG5vdEluQm91bmRzQ2Fz
ZSksIHVuc3VyZShwZXJmb3JtU3RvcmUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90SW5Cb3VuZHNDYXNlLCBw
ZXJmb3JtU3RvcmUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGlzT3V0
T2ZCb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgaW5kZXgsIG1f
b3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgMCwgaXNPdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kc0Nhc2UgPQotICAgICAgICAg
ICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG91dCBvZiBib3VuZHMi
KSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaG9sZUNhc2UgPQotICAgICAgICAgICAg
ICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGhvbGUgY2FzZSIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT3V0T2ZC
b3VuZHMsIHJhcmVseShvdXRPZkJvdW5kc0Nhc2UpLCB1c3VhbGx5KGhvbGVDYXNlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kc0Nhc2UsIGhvbGVDYXNlKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAgICAgICAg
ICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24pLAotICAg
ICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgsIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyho
b2xlQ2FzZSwgaW5uZXJMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQuYWRkKGluZGV4
LCBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9oZWFwcy5CdXR0
ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAocGVyZm9ybVN0b3JlKTsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBlcmZvcm1T
dG9yZSwgbGFzdE5leHQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgYnVpbGRT
d2l0Y2goU3dpdGNoRGF0YSogZGF0YSwgTFR5cGUgdHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHR5cGUgPT0gbV9vdXQuaW50UHRyIHx8IHR5cGUgPT0gbV9v
dXQuaW50MzIpOwotCi0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBTd2l0Y2hDYXNlIG5ld0Nhc2U7Ci0KLSAgICAgICAgICAgIGlmICh0eXBlID09IG1f
b3V0LmludFB0cikgewotICAgICAgICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0
LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEt
PmtpbmQpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFy
Z2V0LmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOwotICAgICAg
ICAgICAgfSBlbHNlIGlmICh0eXBlID09IG1fb3V0LmludDMyKSB7Ci0gICAgICAgICAgICAgICAg
bmV3Q2FzZSA9IFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihkYXRhLT5jYXNlc1tpXS52YWx1
ZS5zd2l0Y2hMb29rdXBWYWx1ZShkYXRhLT5raW5kKSksCi0gICAgICAgICAgICAgICAgICAgIGxv
d0Jsb2NrKGRhdGEtPmNhc2VzW2ldLnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tp
XS50YXJnZXQuY291bnQpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIENS
QVNIKCk7Ci0KLSAgICAgICAgICAgIGNhc2VzLmFwcGVuZChuZXdDYXNlKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCi0gICAgICAgICAgICBz
d2l0Y2hWYWx1ZSwgY2FzZXMsCi0gICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3Vn
aC5ibG9jayksIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5jb3VudCkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHN3aXRjaFN0cmluZyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQot
ICAgIHsKLSAgICAgICAgYm9vbCBjYW5Eb0JpbmFyeVN3aXRjaCA9IHRydWU7Ci0gICAgICAgIHVu
c2lnbmVkIHRvdGFsTGVuZ3RoID0gMDsKLSAgICAgICAgCi0gICAgICAgIGZvciAoREZHOjpTd2l0
Y2hDYXNlIG15Q2FzZSA6IGRhdGEtPmNhc2VzKSB7Ci0gICAgICAgICAgICBTdHJpbmdJbXBsKiBz
dHJpbmcgPSBteUNhc2UudmFsdWUuc3RyaW5nSW1wbCgpOwotICAgICAgICAgICAgaWYgKCFzdHJp
bmctPmlzOEJpdCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FuRG9CaW5hcnlTd2l0Y2ggPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlm
IChzdHJpbmctPmxlbmd0aCgpID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENh
c2VMZW5ndGgoKSkgewotICAgICAgICAgICAgICAgIGNhbkRvQmluYXJ5U3dpdGNoID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0b3Rh
bExlbmd0aCArPSBzdHJpbmctPmxlbmd0aCgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11
bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaFN0
cmluZ1Nsb3coZGF0YSwgc3RyaW5nKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmlu
ZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291
dC5sb2FkMzIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIAotICAg
ICAgICBMQmFzaWNCbG9jayBoYXNJbXBsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3
aXRjaC9Td2l0Y2hTdHJpbmcgaGFzIGltcGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
aXM4Qml0QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcg
aXMgOCBiaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Jsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIHNsb3cgY2FzZSIpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwoc3RyaW5nSW1wbCksIHVuc3Vy
ZShzbG93QmxvY2spLCB1bnN1cmUoaGFzSW1wbEJsb2NrKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0ltcGxCbG9jaywgaXM4Qml0
QmxvY2spOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9v
dXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJbXBs
LCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAgICAgICAgdW5z
dXJlKHNsb3dCbG9jayksIHVuc3VyZShpczhCaXRCbG9jaykpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXM4Qml0QmxvY2ssIHNsb3dCbG9jayk7Ci0gICAgICAgIAotICAgICAg
ICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmlu
Z0ltcGxfZGF0YSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3Bh
Z2F0ZSBicmFuY2ggd2VpZ2h0IGRhdGEgdG8gdGhlIGNhc2VzIG9mIHRoaXMgc3dpdGNoLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY4Ci0g
ICAgICAgIAotICAgICAgICBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAg
IGZvciAoREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA6IGRhdGEtPmNhc2VzKQotICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKFN0cmluZ1N3aXRjaENhc2UobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSwg
bG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jaykpKTsKLSAgICAgICAgc3RkOjpzb3J0KGNhc2Vz
LmJlZ2luKCksIGNhc2VzLmVuZCgpKTsKLSAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZShkYXRh
LCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgMCwgZmFsc2UpOwot
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dCbG9jaywgbGFzdE5leHQpOwotICAgICAgICBz
d2l0Y2hTdHJpbmdTbG93KGRhdGEsIHN0cmluZyk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBj
b2RlIGZvciBzdHJpbmcgc3dpdGNoaW5nIGlzIGJhc2VkIGNsb3NlbHkgb24gdGhlIHNhbWUgY29k
ZSBpbiB0aGUgREZHIGJhY2tlbmQuIFdoaWxlIGl0Ci0gICAgLy8gd291bGQgYmUgbmljZSB0byBy
ZWR1Y2UgdGhlIGFtb3VudCBvZiBzaW1pbGFyLWxvb2tpbmcgY29kZSwgaXQgc2VlbXMgbGlrZSB0
aGlzIGlzIG9uZSBvZgotICAgIC8vIHRob3NlIGFsZ29yaXRobXMgd2hlcmUgZmFjdG9yaW5nIG91
dCB0aGUgY29tbW9uIGJpdHMgd291bGQgcmVzdWx0IGluIG1vcmUgY29kZSB0aGFuIGp1c3QKLSAg
ICAvLyBkdXBsaWNhdGluZy4KLSAgICAKLSAgICBzdHJ1Y3QgU3RyaW5nU3dpdGNoQ2FzZSB7Ci0g
ICAgICAgIFN0cmluZ1N3aXRjaENhc2UoKSB7IH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZ1N3
aXRjaENhc2UoU3RyaW5nSW1wbCogc3RyaW5nLCBMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgICAg
ICAgICA6IHN0cmluZyhzdHJpbmcpCi0gICAgICAgICAgICAsIHRhcmdldCh0YXJnZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZ1N3
aXRjaENhc2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3Ry
aW5nTGVzc1RoYW4oKnN0cmluZywgKm90aGVyLnN0cmluZyk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZzsKLSAgICAgICAgTEJhc2ljQmxvY2sgdGFyZ2V0
OwotICAgIH07Ci0gICAgCi0gICAgc3RydWN0IENoYXJhY3RlckNhc2UgewotICAgICAgICBDaGFy
YWN0ZXJDYXNlKCkKLSAgICAgICAgICAgIDogY2hhcmFjdGVyKDApCi0gICAgICAgICAgICAsIGJl
Z2luKDApCi0gICAgICAgICAgICAsIGVuZCgwKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIENoYXJhY3RlckNhc2UoTENoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQotICAgICAgICAgICAgOiBjaGFyYWN0ZXIoY2hhcmFjdGVyKQotICAg
ICAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAgICAgICAgICwgZW5kKGVuZCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBDaGFy
YWN0ZXJDYXNlJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGNo
YXJhY3RlciA8IG90aGVyLmNoYXJhY3RlcjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
TENoYXIgY2hhcmFjdGVyOwotICAgICAgICB1bnNpZ25lZCBiZWdpbjsKLSAgICAgICAgdW5zaWdu
ZWQgZW5kOwotICAgIH07Ci0gICAgCi0gICAgdm9pZCBzd2l0Y2hTdHJpbmdSZWN1cnNlKAotICAg
ICAgICBTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgYnVmZmVyLCBMVmFsdWUgbGVuZ3RoLCBjb25z
dCBWZWN0b3I8U3RyaW5nU3dpdGNoQ2FzZT4mIGNhc2VzLAotICAgICAgICB1bnNpZ25lZCBudW1D
aGVja2VkLCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kLCB1bnNpZ25lZCBhbHJlYWR5Q2hl
Y2tlZExlbmd0aCwKLSAgICAgICAgdW5zaWduZWQgY2hlY2tlZEV4YWN0TGVuZ3RoKQotICAgIHsK
LSAgICAgICAgTEJhc2ljQmxvY2sgZmFsbFRocm91Z2ggPSBsb3dCbG9jayhkYXRhLT5mYWxsVGhy
b3VnaC5ibG9jayk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7Ci0gICAg
ICAgICAgICBtX291dC5qdW1wKGZhbGxUaHJvdWdoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbWluTGVuZ3RoID0gY2FzZXNbYmVn
aW5dLnN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbW1vbkNoYXJzID0gbWlu
TGVuZ3RoOwotICAgICAgICBib29sIGFsbExlbmd0aHNFcXVhbCA9IHRydWU7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCBteUNvbW1vbkNoYXJzID0gbnVtQ2hlY2tlZDsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxpbWl0ID0gc3RkOjptaW4oY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCksIGNhc2VzW2ld
LnN0cmluZy0+bGVuZ3RoKCkpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbnVtQ2hl
Y2tlZDsgaiA8IGxpbWl0OyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FzZXNbYmVnaW5d
LnN0cmluZy0+YXQoaikgIT0gY2FzZXNbaV0uc3RyaW5nLT5hdChqKSkKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgbXlDb21tb25DaGFycysrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY29tbW9uQ2hhcnMgPSBzdGQ6Om1pbihjb21tb25DaGFycywgbXlD
b21tb25DaGFycyk7Ci0gICAgICAgICAgICBpZiAobWluTGVuZ3RoICE9IGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgYWxsTGVuZ3Roc0VxdWFsID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtaW5MZW5ndGggPSBzdGQ6Om1pbihtaW5MZW5ndGgsIGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hlY2tlZEV4
YWN0TGVuZ3RoKSB7Ci0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxy
ZWFkeUNoZWNrZWRMZW5ndGggPT0gbWluTGVuZ3RoKTsKLSAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbV9ub2RlLCBhbGxMZW5ndGhzRXF1YWwpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbWluTGVuZ3RoID49IGNvbW1vbkNo
YXJzKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYWxsTGVuZ3Roc0VxdWFsICYmIGFscmVhZHlD
aGVja2VkTGVuZ3RoIDwgbWluTGVuZ3RoKQotICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQu
YmVsb3cobGVuZ3RoLCBtX291dC5jb25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRo
cm91Z2gpKTsKLSAgICAgICAgaWYgKGFsbExlbmd0aHNFcXVhbCAmJiAoYWxyZWFkeUNoZWNrZWRM
ZW5ndGggPCBtaW5MZW5ndGggfHwgIWNoZWNrZWRFeGFjdExlbmd0aCkpCi0gICAgICAgICAgICBt
X291dC5jaGVjayhtX291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVu
Z3RoKSksIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtQ2hlY2tlZDsgaSA8IGNvbW1vbkNoYXJzOyArK2kpIHsKLSAgICAgICAgICAg
IG1fb3V0LmNoZWNrKAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVy
czhbaV0pLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0
PHVpbnQxNl90PihjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChpKSkpKSwKLSAgICAgICAgICAgICAg
ICB1bnN1cmUoZmFsbFRocm91Z2gpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KG1pbkxlbmd0aCA9PSBjb21tb25DaGFycykgewotICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUg
Y2FzZSB3aGVyZSBvbmUgb2YgdGhlIGNhc2VzIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgb3Ro
ZXIgY2FzZXMuCi0gICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUg
aW5wdXQgc3RyaW5nIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgY2FzZXMsCi0gICAgICAgICAg
ICAvLyBzbyB3ZSBqdXN0IGNoZWNrIGxlbmd0aCB0byBqdW1wIHRvIHRoYXQgY2FzZS4KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2Jl
Z2luXS5zdHJpbmctPmxlbmd0aCgpID09IGNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKQotICAgICAgICAgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpID4gY29t
bW9uQ2hhcnMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFs
KSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA9PSBi
ZWdpbiArIDEpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2FzZXNbYmVnaW5dLnRhcmdl
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5jaGVjaygKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChs
ZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoY29tbW9uQ2hhcnMpKSwKLSAgICAgICAgICAgICAgICB1
bnN1cmUoY2FzZXNbYmVnaW5dLnRhcmdldCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBXZSd2ZSBjaGVja2VkIGlmIHRoZSBsZW5ndGggaXMgPj0gbWluTGVuZ3RoLCBhbmQgdGhlbiB3
ZSBjaGVja2VkIGlmIHRoZSBsZW5ndGggaXMKLSAgICAgICAgICAgIC8vID09IGNvbW1vbkNoYXJz
LiBXZSBnZXQgdG8gdGhpcyBwb2ludCBpZiBpdCBpcyA+PSBtaW5MZW5ndGggYnV0IG5vdCA9PSBj
b21tb25DaGFycy4KLSAgICAgICAgICAgIC8vIEhlbmNlIHdlIGtub3cgdGhhdCBpdCBub3cgbXVz
dCBiZSA+IG1pbkxlbmd0aCwgaS5lLiB0aGF0IGl0J3MgPj0gbWluTGVuZ3RoICsgMS4KLSAgICAg
ICAgICAgIHN3aXRjaFN0cmluZ1JlY3Vyc2UoCi0gICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVy
LCBsZW5ndGgsIGNhc2VzLCBjb21tb25DaGFycywgYmVnaW4gKyAxLCBlbmQsIG1pbkxlbmd0aCAr
IDEsIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgdGhlIHN0cmluZyBpcyBsb25nZXIg
dGhhbiBjb21tb25DaGFycywgYW5kIHdlJ3ZlIG9ubHkgdmVyaWZpZWQKLSAgICAgICAgLy8gY29t
bW9uQ2hhcnMuIFVzZSBhIGJpbmFyeSBzd2l0Y2ggb24gdGhlIG5leHQgdW5jaGVja2VkIGNoYXJh
Y3RlciwgaS5lLgotICAgICAgICAvLyBzdHJpbmdbY29tbW9uQ2hhcnNdLgotICAgICAgICAKLSAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA+PSBiZWdpbiArIDIpOwotICAg
ICAgICAKLSAgICAgICAgTFZhbHVlIHVuY2hlY2tlZENoYXIgPSBtX291dC5sb2FkOFplcm9FeHQz
MihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVyczhbY29tbW9uQ2hhcnNdKTsKLSAgICAgICAgCi0g
ICAgICAgIFZlY3RvcjxDaGFyYWN0ZXJDYXNlPiBjaGFyYWN0ZXJDYXNlczsKLSAgICAgICAgQ2hh
cmFjdGVyQ2FzZSBjdXJyZW50Q2FzZShjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChjb21tb25DaGFy
cyksIGJlZ2luLCBiZWdpbiArIDEpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiAr
IDE7IGkgPCBlbmQ7ICsraSkgewotICAgICAgICAgICAgTENoYXIgY3VycmVudENoYXIgPSBjYXNl
c1tpXS5zdHJpbmctPmF0KGNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2hh
ciAhPSBjdXJyZW50Q2FzZS5jaGFyYWN0ZXIpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2Fz
ZS5lbmQgPSBpOwotICAgICAgICAgICAgICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50
Q2FzZSk7Ci0gICAgICAgICAgICAgICAgY3VycmVudENhc2UgPSBDaGFyYWN0ZXJDYXNlKGN1cnJl
bnRDaGFyLCBpLCBpICsgMSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBj
dXJyZW50Q2FzZS5lbmQgPSBpICsgMTsKLSAgICAgICAgfQotICAgICAgICBjaGFyYWN0ZXJDYXNl
cy5hcHBlbmQoY3VycmVudENhc2UpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Js
b2NrPiBjaGFyYWN0ZXJCbG9ja3M7Ci0gICAgICAgIGZvciAoQ2hhcmFjdGVyQ2FzZSYgbXlDYXNl
IDogY2hhcmFjdGVyQ2FzZXMpCi0gICAgICAgICAgICBjaGFyYWN0ZXJCbG9ja3MuYXBwZW5kKEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBjYXNlIGZvciAiLCBteUNh
c2UuY2hhcmFjdGVyLCAiIGF0IGluZGV4ICIsIGNvbW1vbkNoYXJzKSkpOwotICAgICAgICAKLSAg
ICAgICAgVmVjdG9yPFN3aXRjaENhc2U+IHN3aXRjaENhc2VzOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY2hhcmFjdGVyQ2FzZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChpKQotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjaGFy
YWN0ZXJDYXNlc1tpIC0gMV0uY2hhcmFjdGVyIDwgY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVy
KTsKLSAgICAgICAgICAgIHN3aXRjaENhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKSwgY2hh
cmFjdGVyQmxvY2tzW2ldLCBXZWlnaHQoKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN3
aXRjaEluc3RydWN0aW9uKHVuY2hlY2tlZENoYXIsIHN3aXRjaENhc2VzLCBmYWxsVGhyb3VnaCwg
V2VpZ2h0KCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5tX25leHRCbG9jazsKLSAgICAgICAgY2hhcmFjdGVyQmxvY2tzLmFwcGVuZChsYXN0TmV4dCk7
IC8vIE1ha2VzIGl0IGNvbnZlbmllbnQgdG8gc2V0IG5leHRCbG9jay4KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3RlckNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGFyYWN0ZXJCbG9ja3NbaV0sIGNoYXJhY3RlckJsb2Nrc1tp
ICsgMV0pOwotICAgICAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZSgKLSAgICAgICAgICAgICAg
ICBkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIGNvbW1vbkNoYXJzICsgMSwKLSAgICAgICAg
ICAgICAgICBjaGFyYWN0ZXJDYXNlc1tpXS5iZWdpbiwgY2hhcmFjdGVyQ2FzZXNbaV0uZW5kLCBt
aW5MZW5ndGgsIGFsbExlbmd0aHNFcXVhbCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX291dC5tX25leHRCbG9jayA9PSBsYXN0TmV4
dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3dpdGNoU3RyaW5nU2xvdyhTd2l0Y2hEYXRhKiBk
YXRhLCBMVmFsdWUgc3RyaW5nKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFdlIG91Z2h0IHRv
IGJlIGFibGUgdG8gdXNlIGNvbXB1dGVkIGdvdG9zIGhlcmUuIFdlIHdvdWxkIHNhdmUgdGhlIGxh
YmVscyBvZiB0aGUKLSAgICAgICAgLy8gYmxvY2tzIHdlIHdhbnQgdG8ganVtcCB0bywgYW5kIHRo
ZW4gcmVxdWVzdCB0aGVpciBhZGRyZXNzZXMgYWZ0ZXIgY29tcGlsYXRpb24gY29tcGxldGVzLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY5
Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgYnJhbmNoT2Zmc2V0ID0gdm1DYWxsKAotICAgICAg
ICAgICAgbV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdB
bmRHZXRCcmFuY2hPZmZzZXQpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0
SW50UHRyKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwotICAgICAgICAKLSAgICAg
ICAgU3RyaW5nSnVtcFRhYmxlJiB0YWJsZSA9IGNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1w
VGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8
U3dpdGNoQ2FzZT4gY2FzZXM7Ci0gICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxpbnQzMl90PiBh
bHJlYWR5SGFuZGxlZDsgLy8gVGhlc2UgbWF5IGJlIG5lZ2F0aXZlLCBvciB6ZXJvLCBvciBwcm9i
YWJseSBvdGhlciBzdHVmZiwgdG9vLiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBIYXNoU2V0
J3MgY29ybmVyIGNhc2VzIGFuZCB3ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aHJvdWdocHV0
IGhlcmUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXpl
KCk7ICsraSkgewotICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBmYWN0IHRoYXQgd2UncmUgdXNp
bmcgdGhlIGJ5dGVjb2RlJ3Mgc3dpdGNoIHRhYmxlIG1lYW5zIHRoYXQgdGhlCi0gICAgICAgICAg
ICAvLyBmb2xsb3dpbmcgREZHIElSIHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIGludmFsaWQuCi0g
ICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gT3JpZ2luYWwgY29kZToKLSAgICAgICAgICAg
IC8vICAgICBzd2l0Y2ggKHYpIHsKLSAgICAgICAgICAgIC8vICAgICBjYXNlICJmb28iOgotICAg
ICAgICAgICAgLy8gICAgIGNhc2UgImJhciI6Ci0gICAgICAgICAgICAvLyAgICAgICAgIHRoaW5n
cygpOwotICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAg
ICB9Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gTmV3IGNvZGU6Ci0gICAgICAgICAg
ICAvLyAgICAgc3dpdGNoICh2KSB7Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiZm9vIjoKLSAg
ICAgICAgICAgIC8vICAgICAgICAgaW5zdHJ1bWVudEZvbygpOwotICAgICAgICAgICAgLy8gICAg
ICAgICBnb3RvIF90aGluZ3M7Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKLSAgICAg
ICAgICAgIC8vICAgICAgICAgaW5zdHJ1bWVudEJhcigpOwotICAgICAgICAgICAgLy8gICAgIF90
aGluZ3M6Ci0gICAgICAgICAgICAvLyAgICAgICAgIHRoaW5ncygpOwotICAgICAgICAgICAgLy8g
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
Ly8gICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vICAgICB9Ci0gICAgICAgICAgICAvLwot
ICAgICAgICAgICAgLy8gTHVja2lseSwgd2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueSBzdWNoIHRy
YW5zZm9ybWF0aW9uLiBCdXQgaXQncyBraW5kIG9mIHNpbGx5IHRoYXQKLSAgICAgICAgICAgIC8v
IHRoaXMgaXMgYW4gaXNzdWUuCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjM1Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGRzo6
U3dpdGNoQ2FzZSBteUNhc2UgPSBkYXRhLT5jYXNlc1tpXTsKLSAgICAgICAgICAgIFN0cmluZ0p1
bXBUYWJsZTo6U3RyaW5nT2Zmc2V0VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPQotICAgICAgICAgICAg
ICAgIHRhYmxlLm9mZnNldFRhYmxlLmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7Ci0g
ICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXRlciAhPSB0YWJsZS5vZmZz
ZXRUYWJsZS5lbmQoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghYWxyZWFkeUhh
bmRsZWQuaW5zZXJ0KGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCkuc2Vjb25kKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgK
LSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNl
dCksCi0gICAgICAgICAgICAgICAgbG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jayksIFdlaWdo
dChteUNhc2UudGFyZ2V0LmNvdW50KSkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBt
X291dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIGJyYW5jaE9mZnNldCwgY2FzZXMs
IGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKLSAgICAgICAgICAgIFdlaWdodChk
YXRhLT5mYWxsVGhyb3VnaC5jb3VudCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBDYWxscyB0aGUg
ZnVuY3RvciBhdCB0aGUgcG9pbnQgb2YgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIGtub3cgd2hh
dCB0aGUgcmVzdWx0IHR5cGUgaXMuCi0gICAgLy8gWW91IGNhbiBlbWl0IHdoYXRldmVyIGNvZGUg
eW91IGxpa2UgYXQgdGhhdCBwb2ludC4gRXhwZWN0cyB5b3UgdG8gdGVybWluYXRlIHRoZSBiYXNp
YyBibG9jay4KLSAgICAvLyBXaGVuIGJ1aWxkVHlwZU9mKCkgcmV0dXJucywgaXQgd2lsbCBoYXZl
IHRlcm1pbmF0ZWQgYWxsIGJhc2ljIGJsb2NrcyB0aGF0IGl0IGNyZWF0ZWQuIFNvLCBpZgotICAg
IC8vIHlvdSBhcmVuJ3QgdXNpbmcgdGhpcyBhcyB0aGUgdGVybWluYXRvciBvZiBhIGhpZ2gtbGV2
ZWwgYmxvY2ssIHlvdSBzaG91bGQgY3JlYXRlIHlvdXIgb3duCi0gICAgLy8gY29udGluYXRpb24g
YW5kIHNldCBpdCBhcyB0aGUgbmV4dEJsb2NrIChtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
Y29udGludWF0aW9uKSkgYmVmb3JlCi0gICAgLy8gY2FsbGluZyB0aGlzLiBGb3IgZXhhbXBsZToK
LSAgICAvLwotICAgIC8vIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTXkgY29udGludWF0aW9uIikpOwotICAgIC8vIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7Ci0gICAgLy8gYnVp
bGRUeXBlT2YoCi0gICAgLy8gICAgIGNoaWxkLCB2YWx1ZSwKLSAgICAvLyAgICAgWyZdIChUeXBl
b2ZUeXBlIHR5cGUpIHsKLSAgICAvLyAgICAgICAgICBkbyB0aGluZ3M7Ci0gICAgLy8gICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgIC8vICAgICB9KTsKLSAgICAvLyBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgotICAgIHZvaWQgYnVpbGRUeXBlT2YoRWRnZSBjaGlsZCwgTFZhbHVlIHZhbHVl
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBi
cmFuY2hpbmcgc3RydWN0dXJlOgotICAgICAgICAvLwotICAgICAgICAvLyBpZiAoaXMgY2VsbCkg
ewotICAgICAgICAvLyAgICAgaWYgKGlzIG9iamVjdCkgewotICAgICAgICAvLyAgICAgICAgIGlm
IChpcyBmdW5jdGlvbikgewotICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247
Ci0gICAgICAgIC8vICAgICAgICAgfSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwIGFu
ZCBkb2Vzbid0IG1hc3F1ZXJhZGUgYXMgdW5kZWZpbmVkKSB7Ci0gICAgICAgIC8vICAgICAgICAg
ICAgIHJldHVybiBvYmplY3QKLSAgICAgICAgLy8gICAgICAgICB9IGVsc2UgewotICAgICAgICAv
LyAgICAgICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKLSAgICAgICAgLy8gICAgICAgICB9Ci0g
ICAgICAgIC8vICAgICB9IGVsc2UgaWYgKGlzIHN0cmluZykgewotICAgICAgICAvLyAgICAgICAg
IHJldHVybiBzdHJpbmcKLSAgICAgICAgLy8gICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vICAgICAg
ICAgcmV0dXJuIHN5bWJvbAotICAgICAgICAvLyAgICAgfQotICAgICAgICAvLyB9IGVsc2UgaWYg
KGlzIG51bWJlcikgewotICAgICAgICAvLyAgICAgcmV0dXJuIG51bWJlcgotICAgICAgICAvLyB9
IGVsc2UgaWYgKGlzIG51bGwpIHsKLSAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKLSAgICAg
ICAgLy8gfSBlbHNlIGlmIChpcyBib29sZWFuKSB7Ci0gICAgICAgIC8vICAgICByZXR1cm4gYm9v
bGVhbgotICAgICAgICAvLyB9IGVsc2UgewotICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5l
ZAotICAgICAgICAvLyB9Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgY2VsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBvYmplY3QgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZnVuY3Rpb25DYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBmdW5jdGlvbiBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIG5vdCBmdW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBy
ZWFsbHlPYmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiByZWFs
bHkgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIHVucmVhY2hhYmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiB1
bnJlYWNoYWJsZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90T2JqZWN0Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG9iamVjdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBzdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc3ltYm9sQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygc3ltYm9sIGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5
cGVPZiBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBudW1iZXJDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBudW1iZXIgY2FzZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbm90TnVtYmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygbm90IG51bWJlciBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bGwgY2FzZSIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImJ1aWxkVHlwZU9mIGJvb2xlYW4gY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdW5k
ZWZpbmVkQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgdW5kZWZpbmVk
IGNhc2UiKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkp
OwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhjZWxsQ2FzZSwgb2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1cmUob2JqZWN0Q2FzZSksIHVuc3VyZShub3RP
YmplY3RDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNl
LCBmdW5jdGlvbkNhc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0Z1
bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPYmplY3QpLAotICAgICAgICAg
ICAgdW5zdXJlKGZ1bmN0aW9uQ2FzZSksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGZ1bmN0aW9uQ2FzZSwgbm90RnVuY3Rpb25DYXNl
KTsKLSAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpGdW5jdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIHJlYWxseU9iamVjdENhc2UpOwot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1
ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiAoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikpLAotICAg
ICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShyZWFsbHlPYmplY3RDYXNlKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhyZWFsbHlPYmplY3RDYXNlLCBzbG93UGF0
aCk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6T2JqZWN0KTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCB1bnJlYWNoYWJsZSk7Ci0gICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUsIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAg
ICAgICAgICB9LCB2YWx1ZSk7Ci0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAzPiBjYXNlczsK
LSAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpVbmRlZmluZWQpKSwgdW5kZWZpbmVkQ2FzZSkpOwot
ICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6Ok9iamVjdCkpLCByZWFsbHlPYmplY3RDYXNlKSk7Ci0g
ICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6RnVuY3Rpb24pKSwgZnVuY3Rpb25DYXNlKSk7Ci0gICAg
ICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKG1fb3V0LmNhc3RUb0ludDMyKHJlc3VsdCksIGNh
c2VzLCB1bnJlYWNoYWJsZSwgV2VpZ2h0KCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8odW5yZWFjaGFibGUsIG5vdE9iamVjdENhc2UpOwotICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90T2JqZWN0Q2FzZSwg
c3RyaW5nQ2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzU3RyaW5n
KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjQ2VsbCAtIFNwZWNPYmplY3QpKSwKLSAg
ICAgICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKHN5bWJvbENhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmluZ0Nhc2UsIHN5bWJvbENhc2UpOwotICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhzeW1ib2xDYXNlLCBub3RDZWxsQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlw
ZW9mVHlwZTo6U3ltYm9sKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENl
bGxDYXNlLCBudW1iZXJDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAg
aXNOdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgflNwZWNDZWxsKSwKLSAgICAgICAg
ICAgIHVuc3VyZShudW1iZXJDYXNlKSwgdW5zdXJlKG5vdE51bWJlckNhc2UpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bWJlckNhc2UsIG5vdE51bWJlckNhc2UpOwotICAg
ICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok51bWJlcik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhub3ROdW1iZXJDYXNlLCBub3ROdWxsQ2FzZSk7Ci0gICAgICAgIExWYWx1ZSBp
c051bGw7Ci0gICAgICAgIGlmIChwcm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPdGhlcikKLSAgICAg
ICAgICAgIGlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVl
TnVsbCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpc051bGwgPSBtX291dC5ib29sZWFu
RmFsc2U7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc051bGwsIHVuc3VyZShyZWFsbHlPYmplY3RD
YXNlKSwgdW5zdXJlKG5vdE51bGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhub3ROdWxsQ2FzZSwgYm9vbGVhbkNhc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICBpc0Jvb2xlYW4odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgfihTcGVjQ2Vs
bCB8IFNwZWNGdWxsTnVtYmVyKSksCi0gICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1
bnN1cmUodW5kZWZpbmVkQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Ym9vbGVhbkNhc2UsIHVuZGVmaW5lZENhc2UpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6
OkJvb2xlYW4pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2Fz
ZSwgbGFzdE5leHQpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSwg
ZG91YmxlIGxvdywgZG91YmxlIGhpZ2gsIGJvb2wgaXNTaWduZWQgPSB0cnVlKQotICAgIHsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgZ3JlYXRFbm91Z2ggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRv
dWJsZVRvSW50MzIgZ3JlYXRFbm91Z2giKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJh
bmdlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIHdpdGhpblJhbmdlIikp
OwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
ZG91YmxlVG9JbnQzMiBzbG93UGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmRvdWJs
ZUdyZWF0ZXJUaGFuT3JFcXVhbChkb3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUobG93KSks
Ci0gICAgICAgICAgICB1bnN1cmUoZ3JlYXRFbm91Z2gpLCB1bnN1cmUoc2xvd1BhdGgpKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZ3Jl
YXRFbm91Z2gsIHdpdGhpblJhbmdlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERv
dWJsZShoaWdoKSksCi0gICAgICAgICAgICB1bnN1cmUod2l0aGluUmFuZ2UpLCB1bnN1cmUoc2xv
d1BhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBz
bG93UGF0aCk7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0OwotICAgICAgICBpZiAoaXNTaWdu
ZWQpCi0gICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFs
dWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91Ymxl
VG9VSW50KGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KGZhc3RSZXN1bHQpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5jYWxsKG1fb3V0LmludDMyLCBt
X291dC5vcGVyYXRpb24odG9JbnQzMiksIGRvdWJsZVZhbHVlKSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQz
MiwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1
ZSBkb3VibGVWYWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmIChPdXRwdXQ6Omhhc1NlbnNpYmxlRG91
YmxlVG9JbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzZW5zaWJsZURvdWJsZVRvSW50MzIoZG91
YmxlVmFsdWUpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGxpbWl0ID0gcG93KDIsIDMxKSAt
IDE7Ci0gICAgICAgIHJldHVybiBkb3VibGVUb0ludDMyKGRvdWJsZVZhbHVlLCAtbGltaXQsIGxp
bWl0KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHNlbnNpYmxlRG91YmxlVG9JbnQzMihMVmFs
dWUgZG91YmxlVmFsdWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgic2Vuc2libGUgZG91YmxlVG9JbnQzMiBzbG93IHBhdGgiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic2Vuc2libGUgZG91YmxlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZh
bHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKLSAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0
VmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbChm
YXN0UmVzdWx0VmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHg4MDAwMDAwMCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRp
b24odG9JbnQzMiksIGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBj
cmVhdGluZyBhIGNvZGUgZ2VuZXJhdG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUg
dXNpbmcgb3VyCi0gICAgLy8gb3duIE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Ig
c2xvdyBwYXRocyB0aGF0IGludm9sdmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAot
ICAgIC8vIHRvIHBheSB0aGUgcHJpY2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xv
dyBwYXRoIHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKLSAgICAvLyBleGVj
dXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGEgbGF6eSBzbG93IHBhdGggYWx3YXlzIGluY3VycyB0
aGUgY29zdCBvZiB0d28gYWRkaXRpb25hbCBqdW1wcy4KLSAgICAvLyBBbHNvLCB0aGUgbGF6eSBz
bG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZl
ciBMTFZNIGRpZCwgc28geW91Ci0gICAgLy8gaGF2ZSB0byB1c2UgYSBTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IgdG8gdHJ5IHRvIHVzZSBzb21lIHVudXNlZCByZWdpc3RlcnMgYW5kIHlvdSBtYXkg
aGF2ZQotICAgIC8vIHRvIHNwaWxsIHRvIHRvcCBvZiBzdGFjayBpZiB0aGVyZSBhcmVuJ3QgZW5v
dWdoIHJlZ2lzdGVycyBhdmFpbGFibGUuCi0gICAgLy8KLSAgICAvLyBMYXp5IHNsb3cgcGF0aHMg
aW52b2x2ZSB0aHJlZSBkaWZmZXJlbnQgc3RhZ2VzIG9mIGV4ZWN1dGlvbi4gRWFjaCBzdGFnZSBo
YXMgdW5pcXVlCi0gICAgLy8gY2FwYWJpbGl0aWVzIGFuZCBrbm93bGVkZ2UuIFRoZSBzdGFnZXMg
YXJlOgotICAgIC8vCi0gICAgLy8gMSkgREZHLT5MTFZNIGxvd2VyaW5nLCBpLmUuIGNvZGUgdGhh
dCBydW5zIGluIHRoaXMgcGhhc2UuIExvd2VyaW5nIGlzIHRoZSBsYXN0IHRpbWUgeW91IHdpbGwK
LSAgICAvLyAgICBoYXZlIGFjY2VzcyB0byBMVmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBMVmFsdWUg
dGhhdCBuZWVkcyB0byBiZSBmZWQgYXMgaW5wdXQgdG8gYSBsYXp5IHNsb3cKLSAgICAvLyAgICBw
YXRoLCB0aGVuIHlvdSBtdXN0IHBhc3MgaXQgYXMgYW4gYXJndW1lbnQgaGVyZSAoYXMgb25lIG9m
IHRoZSB2YXJhcmdzIGFyZ3VtZW50cyBhZnRlciB0aGUKLSAgICAvLyAgICBmdW5jdG9yKS4gQnV0
LCBsb3dlcmluZyBkb2Vzbid0IGtub3cgd2hpY2ggcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3Ig
dGhvc2UgTFZhbHVlcy4gSGVuY2UKLSAgICAvLyAgICB5b3UgcGFzcyBhIGxhbWJkYSB0byBsYXp5
U2xvd1BhdGgoKSBhbmQgdGhhdCBsYW1iZGEgd2lsbCBydW4gZHVyaW5nIHN0YWdlICgyKToKLSAg
ICAvLwotICAgIC8vIDIpIEZUTENvbXBpbGUuY3BwJ3MgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tN
YXBzLiBUaGlzIGNvZGUgaXMgdGhlIG9ubHkgc3RhZ2UgYXQgd2hpY2ggd2Uga25vdwotICAgIC8v
ICAgIHRoZSBtYXBwaW5nIGZyb20gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAo
MSkgYW5kIHRoZSByZWdpc3RlcnMgdGhhdCBMTFZNCi0gICAgLy8gICAgc2VsZWN0ZWQgZm9yIHRo
b3NlIGFyZ3VtZW50cy4gWW91IGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGNv
ZGUgaGVyZSwgc2luY2UgdGhlbgotICAgIC8vICAgIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0
dWFsbHkgYmUgbGF6aWx5IGdlbmVyYXRlZC4gSW5zdGVhZCwgeW91IHdhbnQgdG8gc2F2ZSB0aGUK
LSAgICAvLyAgICByZWdpc3RlcnMgYmVpbmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVm
ZXIgY29kZSBnZW5lcmF0aW9uIHRvIHN0YWdlICgzKSBieSBjcmVhdGluZwotICAgIC8vICAgIGFu
ZCByZXR1cm5pbmcgYSBMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcjoKLSAgICAvLwotICAgIC8vIDMp
IExhenlTbG93UGF0aCdzIGdlbmVyYXRlKCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNw
b25zZSB0byB0aGUgbGF6eSBzbG93IHBhdGgKLSAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBm
aXJzdCB0aW1lLiBJdCB3aWxsIGNhbGwgdGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFn
ZSAoMikuCi0gICAgLy8KLSAgICAvLyBOb3RlIHRoYXQgZWFjaCB0aW1lIHlvdSBpbnZva2Ugc3Rh
Z2UgKDEpLCBzdGFnZSAoMikgbWF5IGJlIGludm9rZWQgemVybywgb25lLCBvciBtYW55IHRpbWVz
LgotICAgIC8vIFN0YWdlICgyKSB3aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFn
ZSAoMSkuIEJ1dCwgTExWTSBtYXkga2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKLSAgICAvLyBjYXNl
IHN0YWdlICgyKSB3b24ndCBydW4uIExMVk0gbWF5IGR1cGxpY2F0ZSB0aGUgY29kZSAoZm9yIGV4
YW1wbGUgdmlhIGp1bXAgdGhyZWFkaW5nKSwKLSAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMg
dG8geW91ciBzdGFnZSAoMikgbGFtYmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9y
IG9uY2UgZm9yIGVhY2gKLSAgICAvLyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8g
dGltZXMgaWYgdGhlIHNsb3cgcGF0aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUg
Zm9yCi0gICAgLy8gd2hlbmV2ZXIgeW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNt
LgotICAgIC8vCi0gICAgLy8gQSB0eXBpY2FsIHVzZSBvZiBsYXp5U2xvd1BhdGgoKSB3aWxsIGxv
b2sgbGlrZSB0aGUgZXhhbXBsZSBiZWxvdywgd2hpY2gganVzdCBjcmVhdGVzIGEgc2xvdwotICAg
IC8vIHBhdGggdGhhdCBhZGRzIHNvbWUgdmFsdWUgdG8gdGhlIGlucHV0IGFuZCByZXR1cm5zIGl0
LgotICAgIC8vCi0gICAgLy8gLy8gU3RhZ2UgKDEpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0
IGNoYW5jZSB0byBmaWd1cmUgb3V0IHdoaWNoIExWYWx1ZXMgdG8gdXNlIGFzIGlucHV0cy4KLSAg
ICAvLyAvLyBOb3RpY2UgaG93IHdlIHBhc3MgImlucHV0IiBhcyBhbiBhcmd1bWVudCB0byBsYXp5
U2xvd1BhdGgoKS4KLSAgICAvLyBMVmFsdWUgaW5wdXQgPSAuLi47Ci0gICAgLy8gaW50IGFkZGVu
ZCA9IC4uLjsKLSAgICAvLyBMVmFsdWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAotICAgIC8vICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgLy8gICAgICAgICAvLyBTdGFnZSAoMikgaXMgaGVy
ZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcmVnaXN0ZXJz
IGFyZSB1c2VkCi0gICAgLy8gICAgICAgICAvLyBmb3Igd2hpY2ggdmFsdWVzLiBMb2NhdGlvbiB6
ZXJvIGlzIGFsd2F5cyB0aGUgcmV0dXJuIHZhbHVlLiBZb3UgY2FuIGlnbm9yZSBpdCBpZgotICAg
IC8vICAgICAgICAgLy8geW91IGRvbid0IHdhbnQgdG8gcmV0dXJuIGFueXRoaW5nLiBMb2NhdGlv
biAxIGlzIHRoZSByZWdpc3RlciBmb3IgdGhlIGZpcnN0Ci0gICAgLy8gICAgICAgICAvLyBhcmd1
bWVudCB0byB0aGUgbGF6eVNsb3dQYXRoKCksIGkuZS4gImlucHV0Ii4gTm90ZSB0aGF0IHRoZSBM
b2NhdGlvbiBvYmplY3QgY291bGQKLSAgICAvLyAgICAgICAgIC8vIGFsc28gaG9sZCBhbiBGUFIs
IGlmIHlvdSBhcmUgcGFzc2luZyBhIGRvdWJsZS4KLSAgICAvLyAgICAgICAgIEdQUlJlZyBvdXRw
dXRHUFIgPSBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCk7Ci0gICAgLy8gICAgICAgICBHUFJSZWcg
aW5wdXRHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0gICAgLy8gICAgICAgICByZXR1
cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCi0gICAgLy8gICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJh
bXMpIHsKLSAgICAvLyAgICAgICAgICAgICAgICAgLy8gU3RhZ2UgKDMpIGlzIGhlcmUuIFRoaXMg
aXMgd2hlbiB5b3UgZ2VuZXJhdGUgY29kZS4gWW91IGhhdmUgYWNjZXNzIHRvIHRoZQotICAgIC8v
ICAgICAgICAgICAgICAgICAvLyByZWdpc3RlcnMgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMikg
YmVjYXVzZSB0aGlzIGxhbWJkYSBjbG9zZXMgb3ZlciB0aG9zZQotICAgIC8vICAgICAgICAgICAg
ICAgICAvLyB2YXJpYWJsZXMgKG91dHB1dEdQUiBhbmQgaW5wdXRHUFIpLiBZb3UgYWxzbyBoYXZl
IGFjY2VzcyB0byB3aGF0ZXZlciBleHRyYQotICAgIC8vICAgICAgICAgICAgICAgICAvLyBkYXRh
IHlvdSBjb2xsZWN0ZWQgaW4gc3RhZ2UgKDEpLCBzdWNoIGFzIHRoZSBhZGRlbmQgaW4gdGhpcyBj
YXNlLgotICAgIC8vICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGFkZGVu
ZCksIGlucHV0R1BSLCBvdXRwdXRHUFIpOwotICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3Ug
aGF2ZSB0byBlbmQgYnkganVtcGluZyB0byBkb25lLiBUaGVyZSBpcyBub3RoaW5nIHRvIGZhbGwg
dGhyb3VnaCB0by4KLSAgICAvLyAgICAgICAgICAgICAgICAgLy8gWW91IGNhbiBhbHNvIGp1bXAg
dG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVyIChzZWUgTGF6eVNsb3dQYXRoLmggZm9yIG1vcmUKLSAg
ICAvLyAgICAgICAgICAgICAgICAgLy8gaW5mbykuIE5vdGUgdGhhdCBjdXJyZW50bHkgeW91IGNh
bm5vdCBPU1IgZXhpdC4KLSAgICAvLyAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5h
cHBlbmQoaml0Lmp1bXAoKSk7Ci0gICAgLy8gICAgICAgICAgICAgfSk7Ci0gICAgLy8gICAgIH0s
Ci0gICAgLy8gICAgIGlucHV0KTsKLSAgICAvLwotICAgIC8vIFlvdSBjYW4gYmFzaWNhbGx5IHBh
c3MgYXMgbWFueSBpbnB1dHMgYXMgeW91IGxpa2UsIGVpdGhlciB1c2luZyB0aGlzIHZhcmFyZ3Mg
Zm9ybSwgb3IgYnkKLSAgICAvLyBwYXNzaW5nIGEgVmVjdG9yIG9mIExWYWx1ZXMuCi0gICAgLy8K
LSAgICAvLyBOb3RlIHRoYXQgaWYgeW91ciBzbG93IHBhdGggaXMgb25seSBkb2luZyBhIGNhbGws
IHlvdSBjYW4gdXNlIHRoZSBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigpCi0gICAgLy8gaGVscGVy
LiBGb3IgZXhhbXBsZToKLSAgICAvLwotICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKLSAgICAv
LyBMVmFsdWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAotICAgIC8vICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7Ci0gICAgLy8gICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0g
ICAgLy8gICAgICAgICAgICAgb3BlcmF0aW9uRG9UaGluZ3MsIGxvY2F0aW9uc1swXS5kaXJlY3RH
UFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKLSAgICAvLyAgICAgfSwgaW5wdXQpOwot
ICAgIC8vCi0gICAgLy8gRmluYWxseSwgbm90ZSB0aGF0IGFsbCBvZiB0aGUgbGFtYmRhcyAtIGJv
dGggdGhlIHN0YWdlICgyKSBsYW1iZGEgYW5kIHRoZSBzdGFnZSAoMykgbGFtYmRhIC0KLSAgICAv
LyBydW4gYWZ0ZXIgdGhlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNl
LCB5b3Ugc2hvdWxkIG5vdCB1c2UgYnktcmVmZXJlbmNlCi0gICAgLy8gY2FwdHVyZSAoaS5lLiBb
Jl0pIGluIGFueSBvZiB0aGVzZSBsYW1iZGFzLgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKLSAgICB7
Ci0gICAgICAgIHJldHVybiBsYXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFy
Z3VtZW50cy4uLiB9KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVj
dG9yPExWYWx1ZT4mIHVzZXJBcmd1bWVudHMpCi0gICAgewotICAgICAgICBDb2RlT3JpZ2luIG9y
aWdpbiA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAKLSAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KEIzOjpJbnQ2NCk7Ci0gICAgICAg
IGZvciAoTFZhbHVlIGFyZyA6IHVzZXJBcmd1bWVudHMpCi0gICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKGFyZywgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsK
LQotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFu
ZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhyZXN1bHQp
OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1Nj
cmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwot
Ci0gICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAg
ICAgICAgICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKLSAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IEIzOjpWYWx1ZVJlcCYgcmVwIDogcGFyYW1zKQotICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKLQotICAg
ICAgICAgICAgICAgIFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0g
ZnVuY3Rvcihsb2NhdGlvbnMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6UGF0Y2hhYmxlSnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1
bXAoKTsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKLQotICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJh
bXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNl
cHRpb25UYXJnZXQ+IGV4Y2VwdGlvblRhcmdldCA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKTsKLQotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBBcyBwYXJ0IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8g
Y3JlYXRlIGEgY29uY3JldGUgT1NSRXhpdCBoZXJlLgotICAgICAgICAgICAgICAgIC8vIERvaW5n
IHNvIHNob3VsZCBhdXRvbWFnaWNhbGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4
aXQgdGh1bmtzLgotCi0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rKCZqaXQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS0+aml0Q29k
ZS0+bGF6eVNsb3dQYXRocy5zaXplKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+
aml0Q29kZS0+bGF6eVNsb3dQYXRocy5hcHBlbmQobnVsbHB0cik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBqaXQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmRleCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRvckp1bXAgPSBqaXQuanVtcCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgc28gbG9uZyBhcyB3ZSdyZSBoZXJlLCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBvdXIg
bGF0ZSBwYXRoCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBydW5zIGJlZm9yZSBvciBhZnRl
ciBhbnkgb3RoZXIgbGF0ZSBwYXRocyB0aGF0IHdlIG1pZ2h0IGRlcGVuZCBvbiwgbGlrZQotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFZNKiB2bSA9ICZzdGF0ZS0+Z3JhcGgubV92bTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
bGlua2VkUGF0Y2hhYmxlSnVtcCA9IENvZGVMb2NhdGlvbkp1bXAoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsaW5r
ZWREb25lID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpOwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChvcmlnaW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1Bh
dGg+IGxhenlTbG93UGF0aCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aD4oCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua2VkUGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxp
bmtCdWZmZXIpLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxTaXRlSW5kZXgsIGdlbmVyYXRvcik7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29k
ZS0+bGF6eVNsb3dQYXRoc1tpbmRleF0gPSBXVEZNb3ZlKGxhenlTbG93UGF0aCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlKAotICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1
ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKLSAgICB7Ci0gICAgICAg
IGFwcGVuZE9TUkV4aXQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwg
bV9vcmlnaW4pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5k
KQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQuYm9vbGVhblRydWUpOwotICAgICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgZGlkQWxyZWFkeVRlcm1pbmF0ZSgpCi0gICAgewotICAgICAgICBtX3N0
YXRlLnNldElzVmFsaWQoZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHR5cGVDaGVjaygK
LSAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCi0gICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9u
LCBFeGl0S2luZCBleGl0S2luZCA9IEJhZFR5cGUpCi0gICAgewotICAgICAgICBhcHBlbmRUeXBl
Q2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0
aW9uLCBleGl0S2luZCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAot
ICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKLSAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24s
IEV4aXRLaW5kIGV4aXRLaW5kKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtp
bmQoKSkpOwotICAgICAgICBhcHBlbmRPU1JFeGl0KGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLm5vZGUoKSwgZmFpbENvbmRpdGlvbiwgbV9vcmlnaW4pOwotICAgICAgICBtX2ludGVycHJl
dGVyLmZpbHRlcihoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCk7Ci0gICAgfQotICAgIAot
ICAgIExWYWx1ZSBsb3dJbnQzMihFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNl
S2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsK
LSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZh
bHVlLmlzSW50MzIoKSkgewotICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludDMyWmVybzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHZhbHVlLmFzSW50MzIoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2lu
dDMyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkK
LSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgdmFs
dWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRn
ZSwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1faW50NTJWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0cmljdEludDUyVG9JbnQzMihlZGdlLCBpbnQ1MlRvU3RyaWN0SW50NTIo
dmFsdWUudmFsdWUoKSkpOwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgYm94ZWRSZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOwotICAgICAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0
KSwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7Ci0gICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hJbnQzMihib3hlZFJlc3VsdCk7Ci0gICAgICAgICAgICBz
ZXRJbnQzMihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92
ZW5UeXBlKGVkZ2UpICYgU3BlY0ludDMyKSk7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJs
ZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87Ci0gICAgfQotICAgIAotICAgIGVu
dW0gSW50NTJLaW5kIHsgU3RyaWN0SW50NTIsIEludDUyIH07Ci0gICAgTFZhbHVlIGxvd0ludDUy
KEVkZ2UgZWRnZSwgSW50NTJLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpOwotICAgICAgICAK
LSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRj
aCAoa2luZCkgewotICAgICAgICBjYXNlIEludDUyOgotICAgICAgICAgICAgdmFsdWUgPSBtX2lu
dDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHZhbHVlID0gbV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkp
OwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVy
biBzdHJpY3RJbnQ1MlRvSW50NTIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cmljdEludDUyOgotICAgICAgICAgICAgdmFs
dWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRn
ZS5ub2RlKCkpOwotICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBpbnQ1MlRvU3RyaWN0SW50NTIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2Rl
LCAhcHJvdmVuVHlwZShlZGdlKSk7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0g
ICAgICAgIHJldHVybiBtX291dC5pbnQ2NFplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBs
b3dJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
SW50NTIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93U3RyaWN0SW50NTIoRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvd0ludDUyKGVkZ2UsIFN0cmljdEludDUyKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihOb2RlKiBub2RlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICFpc1ZhbGlkKG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpKTsKLSAg
ICB9Ci0gICAgYm9vbCBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAg
ICAgICByZXR1cm4gYmV0dGVyVXNlU3RyaWN0SW50NTIoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEludDUyS2luZCBiZXN0SW50NTJLaW5kKFQgbm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihub2RlKSA/IFN0
cmljdEludDUyIDogSW50NTI7Ci0gICAgfQotICAgIEludDUyS2luZCBvcHBvc2l0ZShJbnQ1Mktp
bmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIElu
dDUyOgotICAgICAgICAgICAgcmV0dXJuIFN0cmljdEludDUyOwotICAgICAgICBjYXNlIFN0cmlj
dEludDUyOgotICAgICAgICAgICAgcmV0dXJuIEludDUyOwotICAgICAgICB9Ci0gICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgcmV0dXJu
IEludDUyOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93V2hpY2hldmVySW50NTIoRWRnZSBl
ZGdlLCBJbnQ1MktpbmQmIGtpbmQpCi0gICAgewotICAgICAgICBraW5kID0gYmVzdEludDUyS2lu
ZChlZGdlKTsKLSAgICAgICAgcmV0dXJuIGxvd0ludDUyKGVkZ2UsIGtpbmQpOwotICAgIH0KLSAg
ICAKLSAgICBMVmFsdWUgbG93Q2VsbChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAgICB7Ci0gICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8
fCBERkc6OmlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGVk
Z2UtPm9wKCkgPT0gSlNDb25zdGFudCkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVk
Z2UtPmFzSlNWYWx1ZSgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgewotICAg
ICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmludFB0clplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
bV9vdXQuY29uc3RJbnRQdHIodmFsdWUuYXNDZWxsKCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdl
Lm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgewotICAgICAgICAgICAgTFZh
bHVlIHVuY2hlY2tlZFZhbHVlID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKAotICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVk
Z2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkVmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybiB1bmNoZWNrZWRWYWx1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7Ci0g
ICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnRQ
dHJaZXJvOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93T2JqZWN0KEVkZ2UgZWRnZSwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1
bGF0ZU9iamVjdChlZGdlLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAKLSAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9u
TW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBl
ZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25TdHJp
bmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nSWRlbnRVc2UpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1
bGF0ZVN0cmluZyhlZGdlLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0K
LSAgICAKLSAgICBMVmFsdWUgbG93U3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3Vs
YXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAg
ICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ0lkZW50VXNlKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBzdHJpbmcgPSBsb3dTdHJpbmcoZWRnZSwgbW9kZSk7Ci0gICAgICAgIExWYWx1ZSBz
dHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUp
OwotICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCBzdHJpbmcsIHN0cmluZ0ltcGwp
OwotICAgICAgICByZXR1cm4gc3RyaW5nSW1wbDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG93U3lt
Ym9sKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3Bl
cmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpOwotCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwotICAg
ICAgICBzcGVjdWxhdGVTeW1ib2woZWRnZSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG93Tm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIE9wZXJh
bmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOwotICAgICAgICBzcGVjdWxh
dGVOb25OdWxsT2JqZWN0KGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQm9vbGVhblVzZSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICAgICAgICAgIHRlcm1p
bmF0ZShVbmNvdW50YWJsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5G
YWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEJvb2wo
dmFsdWUuYXNCb29sZWFuKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVk
Tm9kZVZhbHVlIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgp
OwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICBMVmFsdWUg
dW5ib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVD
SygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNw
ZWNCb29sZWFuLCBpc05vdEJvb2xlYW4odW5ib3hlZFJlc3VsdCkpOwotICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IHVuYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9k
ZSwgIShwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0Jvb2xlYW4pKTsKLSAgICAgICAgdGVybWluYXRl
KFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGxvd0RvdWJsZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKLSAg
ICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsICFwcm92ZW5UeXBlKGVkZ2UpKTsKLSAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZVplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1
ZSBsb3dKU1ZhbHVlKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNl
S2luZCgpID09IFVudHlwZWRVc2UpOwotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9k
ZSwgIWlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSAhPSBJbnQ1MlJlcFVzZSk7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOwotCi0gICAgICAg
IExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVl
LnZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gYm94SW50MzIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0
KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gYm94Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiVmFsdWUgbm90IGRlZmluZWQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSBsb3dTdG9yYWdlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIExvd2Vy
ZWROb2RlVmFsdWUgdmFsdWUgPSBtX3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAg
ICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVl
KCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKLSAg
ICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVk
Z2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5j
YXN0VG9JbnQzMih2YWx1ZSk7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAg
bm9WYWx1ZSgpLCBlZGdlLCBTcGVjSW50MzIsCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbCht
X291dC5zaWduRXh0MzJUbzY0KHJlc3VsdCksIHZhbHVlKSk7Ci0gICAgICAgIHNldEludDMyKGVk
Z2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0RvdWJsZShMVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuaW50VG9Eb3VibGUodmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBM
VmFsdWUgc3RyaWN0SW50NTJUb0pTVmFsdWUoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
TEJhc2ljQmxvY2sgaXNJbnQzMiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJU
b0pTVmFsdWUgaXNJbnQzMiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBpc0RvdWJsZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNEb3VibGUgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJzdHJpY3RJbnQ1MlRvSlNWYWx1ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHJlc3VsdHM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGludDMyVmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKG1fb3V0LnNpZ25F
eHQzMlRvNjQoaW50MzJWYWx1ZSksIHZhbHVlKSwKLSAgICAgICAgICAgIHVuc3VyZShpc0ludDMy
KSwgdW5zdXJlKGlzRG91YmxlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzSW50MzIsIGlzRG91YmxlKTsKLSAgICAgICAgCi0gICAg
ICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hJbnQzMihpbnQzMlZhbHVlKSkpOwot
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhpc0RvdWJsZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hEb3VibGUobV9vdXQuaW50VG9Eb3VibGUodmFs
dWUpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0
dXJuIG1fb3V0LnBoaShtX291dC5pbnQ2NCwgcmVzdWx0cyk7Ci0gICAgfQotICAgIAotICAgIExW
YWx1ZSBzdHJpY3RJbnQ1MlRvSW50NTIoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fb3V0LnNobCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0
QW1vdW50KSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpbnQ1MlRvU3RyaWN0SW50NTIoTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwotICAgIH0KLSAgICAKLSAg
ICBMVmFsdWUgaXNJbnQzMihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUsIFNwZWNJbnQzMikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAg
ICByZXR1cm4gbV9vdXQuYWJvdmVPckVxdWFsKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7Ci0g
ICAgfQotICAgIExWYWx1ZSBpc05vdEludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9
IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNJbnQzMikpCi0gICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVy
KTsKLSAgICB9Ci0gICAgTFZhbHVlIHVuYm94SW50MzIoTFZhbHVlIGpzVmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9vdXQuY2FzdFRvSW50MzIoanNWYWx1ZSk7Ci0gICAgfQotICAgIExW
YWx1ZSBib3hJbnQzMihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQu
YWRkKG1fb3V0Lnplcm9FeHQodmFsdWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsK
LSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGlzQ2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1
ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNDZWxsIHwgU3BlY01pc2MpKQotICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82
NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICBMVmFsdWUgaXNOb3RDZWxs
T3JNaXNjKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
fihTcGVjQ2VsbCB8IFNwZWNNaXNjKSkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIp
OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgdW5ib3hEb3VibGUoTFZhbHVlIGpzVmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9vdXQuYml0Q2FzdChtX291dC5hZGQoanNWYWx1ZSwgbV90
YWdUeXBlTnVtYmVyKSwgbV9vdXQuZG91YmxlVHlwZSk7Ci0gICAgfQotICAgIExWYWx1ZSBib3hE
b3VibGUoTFZhbHVlIGRvdWJsZVZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnN1
YihtX291dC5iaXRDYXN0KGRvdWJsZVZhbHVlLCBtX291dC5pbnQ2NCksIG1fdGFnVHlwZU51bWJl
cik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVk
Z2UsIExWYWx1ZSBib3hlZFZhbHVlKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgaW50IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImpzVmFsdWVUb0ludDUyIHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOwotICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0ludDUyIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICBM
VmFsdWUgaXNOb3RJbnQzMjsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNo
ZWNrKGVkZ2UsIFNwZWNJbnQzMikpCi0gICAgICAgICAgICBpc05vdEludDMyID0gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgICAgICBlbHNlIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVj
ayhlZGdlLCB+U3BlY0ludDMyKSkKLSAgICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29s
ZWFuVHJ1ZTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlz
Tm90SW50MzIoYm94ZWRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1
bnN1cmUoZG91YmxlQ2FzZSksIHVuc3VyZShpbnRDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVD
YXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0ludDUyID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuc2lnbkV4dDMyVG82NCh1bmJveEludDMy
KGJveGVkVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgK
LSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVy
dEJveGVkRG91YmxlVG9JbnQ1MiksIGJveGVkVmFsdWUpOwotICAgICAgICBGVExfVFlQRV9DSEVD
SygKLSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0ludDMy
IHwgU3BlY0ludDUyQXNEb3VibGUsCi0gICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJl
c3VsdCwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKLSAgICAgICAgICAg
IAotICAgICAgICBWYWx1ZUZyb21CbG9jayBkb3VibGVUb0ludDUyID0gbV9vdXQuYW5jaG9yKHBv
c3NpYmxlUmVzdWx0KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIGludFRv
SW50NTIsIGRvdWJsZVRvSW50NTIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgZG91YmxlVG9T
dHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSBwb3NzaWJsZVJlc3VsdCA9IG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNvbnZlcnREb3VibGVUb0ludDUyKSwgdmFsdWUpOwot
ICAgICAgICBGVExfVFlQRV9DSEVDS19XSVRIX0VYSVRfS0lORChJbnQ1Mk92ZXJmbG93LAotICAg
ICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjSW50NTJBc0RvdWJsZSwKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6Om5vdEludDUyKSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVz
dWx0OwotICAgIH0KLQotICAgIExWYWx1ZSBjb252ZXJ0RG91YmxlVG9JbnQzMihMVmFsdWUgdmFs
dWUsIGJvb2wgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8pCi0gICAgewotICAgICAgICBMVmFsdWUg
aW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlVG9JbnQodmFsdWUpOwotICAgICAgICBMVmFsdWUg
aW50ZWdlclZhbHVlQ29udmVydGVkVG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2Vy
VmFsdWUpOwotICAgICAgICBMVmFsdWUgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlciA9IG1f
b3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIGludGVnZXJWYWx1ZUNvbnZlcnRl
ZFRvRG91YmxlKTsKLSAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBGb3JtYXR0ZWRWYWx1ZShE
YXRhRm9ybWF0RG91YmxlLCB2YWx1ZSksIG1fbm9kZSwgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50
ZWdlcik7Ci0KLSAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKSB7Ci0gICAgICAg
ICAgICBMQmFzaWNCbG9jayB2YWx1ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29u
dmVydERvdWJsZVRvSW50MzIgb24gemVybyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMy
KGludGVnZXJWYWx1ZSksIHVuc3VyZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250aW51YXRpb24p
KTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh2
YWx1ZUlzWmVybywgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUJp
dGNhc3RUb0ludDY0ID0gbV9vdXQuYml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQpOwotICAgICAg
ICAgICAgTFZhbHVlIHNpZ25CaXRTZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVCaXRjYXN0VG9J
bnQ2NCwgbV9vdXQuY29uc3RJbnQ2NCgwKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIEZvcm1hdHRlZFZhbHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2Rl
LCBzaWduQml0U2V0KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBpbnRlZ2VyVmFsdWU7Ci0gICAgfQotCi0gICAgTFZhbHVlIGlz
TnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
U3BlY0Z1bGxOdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0
dXJuIGlzTm90Q2VsbE9yTWlzYyhqc1ZhbHVlKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzTm90TnVt
YmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNw
ZWNGdWxsTnVtYmVyKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVy
biBpc0NlbGxPck1pc2MoanNWYWx1ZSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdENl
bGwoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAg
ICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3Bl
Y0NlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LnRlc3ROb25aZXJvNjQoanNWYWx1ZSwgbV90YWdNYXNrKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGlzQ2VsbChMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxs
VG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5
cGUsIFNwZWNDZWxsKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVy
biBtX291dC50ZXN0SXNaZXJvNjQoanNWYWx1ZSwgbV90YWdNYXNrKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90TWlzYyhMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBT
cGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5W
YWx1ZSh0eXBlLCB+U3BlY01pc2MpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LmFib3ZlKHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVP
dGhlciB8IFRhZ0JpdEJvb2wgfCBUYWdCaXRVbmRlZmluZWQpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzTWlzYyhMVmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVs
bFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0
eXBlLCBTcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1
cm4gbV9vdXQubG9naWNhbE5vdChpc05vdE1pc2ModmFsdWUpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzTm90Qm9vbGVhbihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUsIH5TcGVjQm9vbGVhbikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwot
ICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NCgKLSAgICAgICAgICAgIG1fb3V0LmJp
dFhvcihqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQofjEpKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzQm9vbGVhbihMVmFs
dWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAg
ICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNCb29sZWFu
KSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dp
Y2FsTm90KGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7Ci0gICAgfQotICAgIExWYWx1ZSB1bmJveEJv
b2xlYW4oTFZhbHVlIGpzVmFsdWUpCi0gICAgewotICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBh
IGNhc3QgdGhhdCBndWFyYW50ZWVzIHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVn
ZXIKLSAgICAgICAgLy8gdmFsdWUgaXMganVzdCAwIG9yIDEuIEJ1dCBmb3Igbm93IHdlIGRvIGl0
IHRoZSBkdW1iIHdheS4KLSAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NChtX291dC5iaXRB
bmQoanNWYWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCgxKSkpOwotICAgIH0KLSAgICBMVmFsdWUgYm94
Qm9vbGVhbihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0
KAotICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVlKSwgbV9vdXQu
Y29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdE90
aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAg
IHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVj
T3RoZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdElu
dDY0KH5UYWdCaXRVbmRlZmluZWQpKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVOdWxsKSk7Ci0gICAgfQotICAgIExWYWx1ZSBpc090aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBw
cm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNPdGhlcikpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291
dC5iaXRBbmQodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICB9Ci0gICAgCi0gICAg
TFZhbHVlIGlzUHJvdmVuVmFsdWUoU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSwgU3BlY3VsYXRl
ZFR5cGUgd2FudGVkVHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB+d2Fu
dGVkVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhblRydWU7Ci0gICAgICAg
IGlmICghKHByb3ZlblR5cGUgJiB3YW50ZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBtX291
dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHZv
aWQgc3BlY3VsYXRlKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZWRnZS51c2VL
aW5kKCkpIHsKLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKLSAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToK
LSAgICAgICAgY2FzZSBLbm93blByaW1pdGl2ZVVzZToKLSAgICAgICAgY2FzZSBEb3VibGVSZXBV
c2U6Ci0gICAgICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50MzJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlZGdlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgICAgICBzcGVj
dWxhdGVDZWxsKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbE9y
T3RoZXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKLSAgICAgICAgICAgIEFT
U0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRl
TWFjaGluZUludChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE9iamVj
dFVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlRnVu
Y3Rpb24oZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBPYmplY3RPck90
aGVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgotICAgICAgICAgICAg
c3BlY3VsYXRlRmluYWxPYmplY3QoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTdHJpbmdVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKLSAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgU3ltYm9sVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICAg
ICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVT
dHJpbmdPclN0cmluZ09iamVjdChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIE51bWJlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6Ci0gICAgICAgICAgICBz
cGVjdWxhdGVSZWFsTnVtYmVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRG91YmxlUmVwUmVhbFVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwo
ZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5l
SW50VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlRG91YmxlUmVwTWFjaGluZUludChlZGdlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgICAg
ICBzcGVjdWxhdGVCb29sZWFuKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTm90U3RyaW5nVmFyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5nVmFyKGVk
Z2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm90Q2VsbFVzZToKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZU5vdENlbGwoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBPdGhlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWlzY1VzZToKLSAgICAgICAgICAgIHNwZWN1
bGF0ZU1pc2MoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnN1cHBvcnRlZCBzcGVjdWxh
dGlvbiB1c2Uga2luZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3Vs
YXRlKE5vZGUqLCBFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoZWRnZSk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgbG93SW50MzIoZWRnZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQ2Vs
bChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBsb3dDZWxsKGVkZ2UpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZUNlbGxPck90aGVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBub3QgY2VsbCIpKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9y
T3RoZXIgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90
Q2VsbCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
aXNOb3RDZWxsLCBjb250aW51YXRpb24pOwotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1
ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlTWFjaGluZUludChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1faW50
ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIAotICAgICAgICBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dKU1ZhbHVlKGVkZ2Us
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNP
YmplY3QoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAg
ICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3Bl
Y0NlbGwsIFNwZWNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICBtX291
dC5jb25zdEludDMyKE9iamVjdFR5cGUpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNOb3RPYmpl
Y3QoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7
Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0Nl
bGwsIH5TcGVjT2JqZWN0KSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJl
dHVybiBtX291dC5iZWxvdygKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKE9iamVjdFR5cGUpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNOb3RTdHJpbmcoTFZhbHVl
IGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAg
IGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVj
U3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291
dC5ub3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5n
U3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc1N0cmluZyhMVmFs
dWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAg
ICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3Bl
Y1N0cmluZykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9v
dXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0
cnVjdHVyZS0+aWQoKSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBpc05vdFN5bWJvbChMVmFsdWUg
Y2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNT
eW1ib2wpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xT
dHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgaXNBcnJheVR5cGUoTFZhbHVl
IGNlbGwsIEFycmF5TW9kZSBhcnJheU1vZGUpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkRvdWJsZToKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAg
ICAgICAgTFZhbHVlIGluZGV4aW5nVHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1f
aGVhcHMuSlNDZWxsX2luZGV4aW5nVHlwZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3
aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewotICAgICAgICAgICAgY2FzZSBBcnJheTo6
T3JpZ2luYWxBcnJheToKLSAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiVW5leHBlY3RlZCBvcmlnaW5hbCBhcnJheSIpOwotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBtX291
dC5iaXRBbmQoaW5kZXhpbmdUeXBlLCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGlu
Z1NoYXBlTWFzaykpLAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKElzQXJy
YXkgfCBhcnJheU1vZGUuc2hhcGVNYXNrKCkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgQXJyYXk6Ok5vbkFycmF5OgotICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2lu
YWxOb25BcnJheToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIo
SXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoYXJyYXlNb2RlLnNoYXBlTWFzaygpKSk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIEFycmF5OjpQb3NzaWJseUFycmF5OgotICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4
aW5nVHlwZSwgbV9vdXQuY29uc3RJbnQzMihJbmRleGluZ1NoYXBlTWFzaykpLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQ29ycnVwdCBhcnJheSBjbGFzcyIpOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihEaXJlY3RBcmd1bWVudHNUeXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFs
KAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlND
ZWxsX3R5cGVJbmZvVHlwZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTY29w
ZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKGFycmF5TW9kZS50eXBl
ZEFycmF5VHlwZSgpKSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc0Z1
bmN0aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNw
ZWNDZWxsLCBTcGVjRnVuY3Rpb24pKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAg
ICAgcmV0dXJuIGlzVHlwZShjZWxsLCBKU0Z1bmN0aW9uVHlwZSk7Ci0gICAgfQotICAgIExWYWx1
ZSBpc05vdEZ1bmN0aW9uKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUo
dHlwZSAmIFNwZWNDZWxsLCB+U3BlY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92
ZW47Ci0gICAgICAgIHJldHVybiBpc05vdFR5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOwotICAg
IH0KLSAgICAgICAgICAgIAotICAgIExWYWx1ZSBpc0V4b3RpY0ZvclR5cGVvZihMVmFsdWUgY2Vs
bCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYg
KCEodHlwZSAmIFNwZWNPYmplY3RPdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm8zMigKLSAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxh
Z3MpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
IHwgVHlwZU9mU2hvdWxkQ2FsbEdldENhbGxEYXRhKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1
ZSBpc1R5cGUoTFZhbHVlIGNlbGwsIEpTVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9o
ZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
dHlwZSkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RUeXBlKExWYWx1ZSBjZWxsLCBK
U1R5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzVHlw
ZShjZWxsLCB0eXBlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVk
Z2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIHNwZWN1bGF0ZUZ1bmN0aW9uKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAg
ewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNG
dW5jdGlvbiwgaXNOb3RGdW5jdGlvbihjZWxsKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlRnVuY3Rpb24oRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgc3BlY3VsYXRlRnVuY3Rp
b24oZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRl
T2JqZWN0T3JPdGhlcihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1faW50ZXJwcmV0
ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIHByaW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InNwZWN1bGF0ZU9iamVjdE9yT3RoZXIgcHJpbWl0aXZlIGNhc2UiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFu
Y2goaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNh
c2UpLCB1bnN1cmUoY2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIHByaW1pdGl2ZUNhc2UpOwotICAgICAg
ICAKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFs
dWUpLCBlZGdlLCAoflNwZWNDZWxsKSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
dmFsdWUpLCBlZGdlLCBTcGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkK
LSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjRmluYWxPYmplY3QsIGlzTm90VHlwZShjZWxsLCBGaW5hbE9iamVj
dFR5cGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdl
LCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZShjZWxsKSwgZWRnZSwgU3BlY1N0cmluZyB8IH5TcGVjQ2VsbCwgaXNOb3RTdHJpbmcoY2VsbCkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCi0gICAg
ewotICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBMVmFsdWUgc3Ry
aW5nLCBMVmFsdWUgc3RyaW5nSW1wbCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRl
ci5uZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZykpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHN0cmluZyksIGVkZ2Uubm9kZSgpLCBtX291dC5pc051bGwoc3RyaW5nSW1w
bCkpOwotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUoc3RyaW5nKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5n
SW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nSW1wbDo6ZmxhZ0lzQXRvbWljKCkpKSk7Ci0gICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVy
KGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8IH5TcGVjU3RyaW5nKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBsb3dT
dHJpbmdJZGVudChlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdP
YmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKLSAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmlu
Z09iamVjdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdP
YmplY3QoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBz
dHJpbmcgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0
aW9uIikpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9h
ZDMyKGxvd0NlbGwoZWRnZSksIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0
LmNvbnN0SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKLSAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90U3RyaW5nKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRn
ZSwgc3RydWN0dXJlSUQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgCi0gICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBT
cGVjU3RyaW5nT2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JDZWxsKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBzcGVj
dWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChlZGdlLCBtX291dC5sb2FkMzIoY2VsbCwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRChFZGdlIGVkZ2UsIExWYWx1ZSBzdHJ1Y3R1
cmVJRCkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0K
LSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoYWJz
dHJhY3RTdHJ1Y3R1cmUoZWRnZSkuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0
U3RydWN0dXJlKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVj
dWxhdGUoCi0gICAgICAgICAgICBOb3RTdHJpbmdPYmplY3QsIG5vVmFsdWUoKSwgMCwKLSAgICAg
ICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc3RyaW5n
T2JqZWN0U3RydWN0dXJlKSkpOwotICAgIH0KLQotICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKEVk
Z2UgZWRnZSwgTFZhbHVlIGNlbGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTeW1ib2wgfCB+U3BlY0NlbGwsIGlzTm90U3ltYm9s
KGNlbGwpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBzcGVjdWxhdGVTeW1ib2woZWRnZSwgbG93Q2VsbChlZGdlKSk7Ci0gICAg
fQotCi0gICAgdm9pZCBzcGVjdWxhdGVOb25OdWxsT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNl
bGwpCi0gICAgewotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVk
Z2UsIFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKLSAgICAgICAgaWYgKG1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRUeXBlLCBq
c1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgbV9vdXQudGVzdE5v
blplcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hl
YXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3Bl
Y3VsYXRlTnVtYmVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBp
c05vdE51bWJlcih2YWx1ZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVJlYWxO
dW1iZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhl
cmUgYmVjYXVzZSBsb3dEb3VibGUoKSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4K
LSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICBMVmFsdWUgZG91Ymxl
VmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGlu
dCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoInNwZWN1bGF0ZVJlYWxOdW1iZXIgY29udGludWF0aW9uIikpOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwo
ZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKLSAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KGludENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
Ci0gICAgICAgIHR5cGVDaGVjaygKLSAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1iZXIsCi0gICAgICAgICAgICBpc05v
dEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91
YmxlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzcGVjdWxhdGVEb3VibGVSZXBSZWFsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIC8vIERv
IGFuIGVhcmx5IHJldHVybiBoZXJlIGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxv
dCBvZiBjb250cm9sIGZsb3cuCi0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVD
aGVjayhlZGdlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShlZGdlKTsKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAg
ICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNEb3VibGVSZWFsLAotICAgICAg
ICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBNYWNoaW5lSW50KEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZVRvU3RyaWN0
SW50NTIoZWRnZSwgbG93RG91YmxlKGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVj
dWxhdGVCb29sZWFuKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkK
LSAgICB7Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+
U3BlY1N0cmluZ1ZhcikpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgTm90U3RyaW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJp
bmdWYXIgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOwotICAgICAgICBtX291
dC5icmFuY2goaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoaXNTdHJp
bmdDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBzcGVjdWxhdGVT
dHJpbmdJZGVudChlZGdlLCB2YWx1ZSwgbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0
cmluZ192YWx1ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgdHlwZUNoZWNrKGpzVmFsdWVW
YWx1ZSh2YWx1ZSksIGVkZ2UsIH5TcGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgc3BlY3VsYXRlT3RoZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYg
KCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICB0eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgc3BlY3VsYXRlTWlzYyhFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLCBTcGVjTWlzYywgaXNOb3RNaXNjKHZhbHVlKSk7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZ3JhcGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJ
c1N0aWxsVmFsaWQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgIH0KLSAgICAKLSAgICBM
VmFsdWUgbG9hZENlbGxTdGF0ZShMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X291dC5sb2FkOFplcm9FeHQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOwotICAg
IH0KLQotICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKLSAgICB7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBi
YXJyaWVyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKLQot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobG9hZENl
bGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0
aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVy
IHNsb3cgcGF0aCBsYXppbHkuIEluIGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmly
ZS4gQW5kCi0gICAgICAgIC8vIHdoZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3Ig
dXMgdG8gZ2VuZXJhdGUgdGhpcyBjb2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KLSAgICAg
ICAgLy8gd2FzdGluZyBMTFZNJ3MgdGltZSBvcHRpbWl6aW5nIGl0LgotICAgICAgICBsYXp5U2xv
d1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCk7Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBh
cmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2Vk
UmVnaXN0ZXJzID0gcGFyYW1zLmxhenlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5sb2NrKGJhc2VHUFIpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaDEgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVT
Y3JhdGNoR1BSKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBz
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUg
cHJlc2VydmVkU3RhdGUgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBzYXZlZCB0aGVzZSwgc28g
d2hlbiB3ZSBtYWtlIGEgc2xvdyBwYXRoIGNhbGwsIHdlIGRvbid0IGhhdmUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRvIHNhdmUgdGhlbSBhZ2Fpbi4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldChzY3JhdGNoMSwgc2NyYXRjaDIp
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJh
cnJpZXJCdWZmZXIgPSBqaXQudm0oKS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSwgc2NyYXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIG5lZWRUb0ZsdXNoID0gaml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJh
cnJpZXJCdWZmZXIuY2FwYWNpdHkoKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
YWRkMzIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGppdC5zdG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIu
Y3VycmVudEluZGV4QWRkcmVzcygpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1v
dmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIo
KSksIHNjcmF0Y2gxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoMSwgc2NyYXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yo
dm9pZCopKSkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxv
Y2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRl
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0
Lmp1bXAoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmpp
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMsIGppdCwgcGFyYW1zLmxhenlTbG93UGF0aC0+
Y2FsbFNpdGVJbmRleCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5leGNl
cHRpb25KdW1wcywgb3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIEludmFsaWRHUFJS
ZWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUdQUik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVy
c0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOwotICAgICAgICAgICAgICAgICAg
ICB9KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBiYXNlKTsKLSAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Ci0g
ICAgTFZhbHVlIHZtQ2FsbChMVHlwZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJn
cykKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoKTsKLSAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LmNhbGwodHlwZSwgZnVuY3Rpb24sIGFyZ3MuLi4pOwotICAgICAgICBjYWxsQ2hl
Y2soKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjYWxs
UHJlZmxpZ2h0KENvZGVPcmlnaW4gY29kZU9yaWdpbikKLSAgICB7Ci0gICAgICAgIENhbGxTaXRl
SW5kZXggY2FsbFNpdGVJbmRleCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVP
cmlnaW4oY29kZU9yaWdpbik7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICBt
X291dC5jb25zdEludDMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKLSAgICAgICAgICAgIHRhZ0Zv
cihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjYWxsUHJlZmxp
Z2h0KCkKLSAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQoY29kZU9yaWdpbkRlc2NyaXB0aW9u
T2ZDYWxsU2l0ZSgpKTsKLSAgICB9Ci0KLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5EZXNjcmlw
dGlvbk9mQ2FsbFNpdGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gVGFpbENhbGxJbmxpbmVkQ2FsbGVyCi0gICAgICAgICAgICB8fCBtX25vZGUtPm9wKCkgPT0g
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcgotICAgICAgICAgICAgfHwgbV9ub2RlLT5vcCgp
ID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKSB7Ci0gICAgICAgICAgICAv
LyBUaGlzIGNhc2UgYXJpc2VzIHdoZW4geW91IGhhdmUgYSBzaXR1YXRpb24gbGlrZSB0aGlzOgot
ICAgICAgICAgICAgLy8gZm9vIG1ha2VzIGEgY2FsbCB0byBiYXIsIGJhciBpcyBpbmxpbmVkIGlu
IGZvby4gYmFyIG1ha2VzIGEgY2FsbAotICAgICAgICAgICAgLy8gdG8gYmF6IGFuZCBiYXogaXMg
aW5saW5lZCBpbiBiYXIuIEFuZCB0aGVuIGJheiBtYWtlcyBhIHRhaWwtY2FsbCB0byBqYXosCi0g
ICAgICAgICAgICAvLyBhbmQgamF6IGlzIGlubGluZWQgaW4gYmF6LiBXZSB3YW50IHRoZSBjYWxs
ZnJhbWUgZm9yIGpheiB0byBhcHBlYXIgdG8gCi0gICAgICAgICAgICAvLyBoYXZlIGNhbGxlciBi
ZSBiYXIuCi0gICAgICAgICAgICBjb2RlT3JpZ2luID0gKmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ1RhaWxDYWxscygpOwotICAgICAgICB9Ci0KLSAgICAgICAg
cmV0dXJuIGNvZGVPcmlnaW47Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2FsbENoZWNrKCkKLSAg
ICB7Ci0gICAgICAgIGlmIChPcHRpb25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCi0gICAgICAgICAg
ICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhj
ZXB0aW9uRnV6eiksIG1fY2FsbEZyYW1lKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBleGNl
cHRpb24gPSBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRp
b24oKSkpOwotICAgICAgICBMVmFsdWUgaGFkRXhjZXB0aW9uID0gbV9vdXQubm90WmVybzY0KGV4
Y2VwdGlvbik7Ci0KLSAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwotICAgICAgICBI
YW5kbGVySW5mbyogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgaWYgKG1fZ3JhcGgud2lsbENh
dGNoRXhjZXB0aW9uSW5NYWNoaW5lRnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdp
biwgZXhjZXB0aW9uSGFuZGxlcikpIHsKLSAgICAgICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJvb2wgaXNFeGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKLSAgICAgICAgICAg
IGFwcGVuZE9TUkV4aXQoCi0gICAgICAgICAgICAgICAgRXhjZXB0aW9uQ2hlY2ssIG5vVmFsdWUo
KSwgbnVsbHB0ciwgaGFkRXhjZXB0aW9uLAotICAgICAgICAgICAgICAgIG1fb3JpZ2luLndpdGhG
b3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyksIGlzRXhjZXB0aW9uSGFuZGxl
cik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkV4Y2VwdGlvbiBjaGVjayBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaGFk
RXhjZXB0aW9uLCByYXJlbHkobV9oYW5kbGVFeGNlcHRpb25zKSwgdXN1YWxseShjb250aW51YXRp
b24pKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwotICAgIH0KLQot
ICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMoUGF0Y2hwb2ludFZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIENvZGVP
cmlnaW4gb3BDYXRjaE9yaWdpbjsKLSAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRs
ZXI7Ci0gICAgICAgIGJvb2wgd2lsbENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hF
eGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBl
eGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24pCi0gICAg
ICAgICAgICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZSht
X2Z0bFN0YXRlKTsKLQotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgUGF0Y2hwb2ludCBleGNlcHRpb24gT1NSIGV4aXQg
IyIsIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRo
IGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwotICAgICAgICAgICAg
aWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxh
YmxlUmVjb3ZlcmllcyksICJcbiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBleGl0T0sg
PSB0cnVlOwotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0
QW5kRXhpdE9LKG9wQ2F0Y2hPcmlnaW4sIGV4aXRPSyk7Ci0KLSAgICAgICAgT1NSRXhpdERlc2Ny
aXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgp
LCBudWxscHRyKTsKLQotICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW50byB0aGUgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zIHdoZXJlIHdlIHdpbGwgZmluZCB0aGUgZXhpdCBhcmd1bWVu
dHMKLSAgICAgICAgLy8gd2UgYXJlIGFib3V0IHRvIGFwcGVuZC4gV2UgbmVlZCB0byBhY2NvdW50
IGZvciBib3RoIHRoZSBjaGlsZHJlbiB3ZSd2ZSBhbHJlYWR5IGFkZGVkLCBhbmQKLSAgICAgICAg
Ly8gZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJlc3VsdCB2YWx1ZSBpZiB0aGUgcGF0Y2hwb2lu
dCBpcyBub3Qgdm9pZC4KLSAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPm51bUNoaWxk
cmVuKCk7Ci0gICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCi0gICAgICAgICAgICBv
ZmZzZXQrKzsKLQotICAgICAgICAvLyBVc2UgTGF0ZUNvbGRBbnkgdG8gZW5zdXJlIHRoYXQgdGhl
IHN0YWNrbWFwIGFyZ3VtZW50cyBpbnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2hwb2ludCdzCi0gICAg
ICAgIC8vIHJlc3VsdCBhbmQgd2l0aCBhbnkgbGF0ZS1jbG9iYmVyZWQgcmVnaXN0ZXJzLgotICAg
ICAgICB2YWx1ZS0+YXBwZW5kVmVjdG9yV2l0aFJlcCgKLSAgICAgICAgICAgIGJ1aWxkRXhpdEFy
Z3VtZW50cyhleGl0RGVzY3JpcHRvciwgb3BDYXRjaE9yaWdpbiwgbm9WYWx1ZSgpKSwKLSAgICAg
ICAgICAgIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7Ci0KLSAgICAgICAgcmV0dXJuIFBhdGNocG9p
bnRFeGNlcHRpb25IYW5kbGU6OmNyZWF0ZSgKLSAgICAgICAgICAgIG1fZnRsU3RhdGUsIGV4aXRE
ZXNjcmlwdG9yLCBvcmlnaW4sIG9mZnNldCwgKmV4Y2VwdGlvbkhhbmRsZXIpOwotICAgIH0KLQot
ICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2spCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9ibG9ja3MuZ2V0KGJsb2NrKTsKLSAgICB9Ci0KLSAgICBPU1JFeGl0
RGVzY3JpcHRvciogYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIE5vZGUqIGhpZ2hWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuYWxsb2MoCi0gICAgICAgICAgICBsb3dWYWx1ZS5m
b3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1
ZSksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAotICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKLSAgICAgICAg
RXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwg
TFZhbHVlIGZhaWxDb25kaXRpb24sIAotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBp
c0V4Y2VwdGlvbkhhbmRsZXIgPSBmYWxzZSkKLSAgICB7Ci0gICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAj
IiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGgg
YXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7Ci0gICAgICAgICAgICBp
ZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZGF0
YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFi
bGVSZWNvdmVyaWVzKSwgIlxuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgb3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZG9P
U1JFeGl0RnV6emluZygpICYmICFpc0V4Y2VwdGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIExW
YWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKG1fb3V0LmFic29sdXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKSwK
LSAgICAgICAgICAgICAgICBtX291dC5pbnQzMk9uZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1fb3V0LnN0b3JlMzIobnVtYmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5hYnNvbHV0ZSgmZ19u
dW1iZXJPZk9TUkV4aXRGdXp6Q2hlY2tzKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICh1bnNpZ25lZCBhdE9yQWZ0ZXIgPSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpBdE9yQWZ0ZXIo
KSkgewotICAgICAgICAgICAgICAgIGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKLSAgICAg
ICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQu
YWJvdmVPckVxdWFsKG51bWJlck9mRnV6ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdE9yQWZ0
ZXIpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodW5zaWduZWQgYXQgPSBPcHRp
b25zOjpmaXJlT1NSRXhpdEZ1enpBdCgpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbENvbmRpdGlv
biA9IG1fb3V0LmJpdE9yKAotICAgICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAotICAg
ICAgICAgICAgICAgICAgICBtX291dC5lcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0LmNv
bnN0SW50MzIoYXQpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
ZmFpbENvbmRpdGlvbiA9PSBtX291dC5ib29sZWFuRmFsc2UpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYmxlc3NTcGVjdWxhdGlvbigKLSAgICAgICAgICAgIG1fb3V0LnNwZWN1bGF0
ZShmYWlsQ29uZGl0aW9uKSwga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGJsZXNzU3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVP
cmlnaW4gb3JpZ2luKQotICAgIHsKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNj
cmlwdG9yID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7Ci0g
ICAgICAgIAotICAgICAgICB2YWx1ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRz
KGV4aXREZXNjcmlwdG9yLCBvcmlnaW4uZm9yRXhpdCwgbG93VmFsdWUpKTsKLQotICAgICAgICBT
dGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigK
LSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9y
LT5lbWl0T1NSRXhpdCgKLSAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4s
IGppdCwgcGFyYW1zLCAwKTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIFN0YWNrbWFw
QXJndW1lbnRMaXN0IGJ1aWxkRXhpdEFyZ3VtZW50cygKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yLCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIEZvcm1hdHRlZFZhbHVl
IGxvd1ZhbHVlLAotICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNr
bWFwTG9jYXRpb25zID0gMCkKLSAgICB7Ci0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IHJl
c3VsdDsKLSAgICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAgICAgICAgZXhpdERlc2Ny
aXB0b3IsIGV4aXRPcmlnaW4sIHJlc3VsdCwgbG93VmFsdWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50
c0luU3RhY2ttYXBMb2NhdGlvbnMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGJ1aWxkRXhpdEFyZ3VtZW50cygKLSAgICAgICAgT1NSRXhpdERlc2NyaXB0
b3IqIGV4aXREZXNjcmlwdG9yLCBDb2RlT3JpZ2luIGV4aXRPcmlnaW4sIFN0YWNrbWFwQXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAotICAgICAgICB1bnNp
Z25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKLSAgICB7
Ci0gICAgICAgIGlmICghIWxvd1ZhbHVlKQotICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChs
b3dWYWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFp
bGFiaWxpdHlNYXAgPSB0aGlzLT5hdmFpbGFiaWxpdHlNYXAoKTsKLSAgICAgICAgYXZhaWxhYmls
aXR5TWFwLnBydW5lQnlMaXZlbmVzcyhtX2dyYXBoLCBleGl0T3JpZ2luKTsKLSAgICAgICAgCi0g
ICAgICAgIEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFw
OwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKLSAgICAgICAg
ICAgIFsmXSAoQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkgewotICAgICAgICAgICAgICAgIGlm
ICghYXZhaWxhYmlsaXR5LnNob3VsZFVzZU5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFp
bGFiaWxpdHkubm9kZSgpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tQWxs
b2NhdGlvbigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV4
aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCksIG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1f
dmFsdWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNj
cmlwdG9yLT5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEF2YWlsYWJpbGl0eSBhdmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2Nh
bHNbaV07Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZU
TE9TUkV4aXRMaXZlbmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLAotICAgICAgICAgICAgICAgICAgICAoIShh
dmFpbGFiaWxpdHkuaXNEZWFkKCkgJiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxS
ZWdpc3RlcihvcGVyYW5kKSwgZXhpdE9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09
IEZUTEZvck9TUkVudHJ5TW9kZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBFeGl0VmFs
dWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBh
dmFpbGFiaWxpdHkpOwotICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2tt
YXBMb2NhdGlvbnMoKSkKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBM
b2NhdGlvbnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMpOwotICAgICAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzW2ldID0gZXhpdFZh
bHVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBh
dmFpbGFiaWxpdHlNYXAubV9oZWFwKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBh
aXIua2V5LmJhc2UoKTsKLSAgICAgICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
KiBtYXRlcmlhbGl6YXRpb24gPSBtYXAuZ2V0KG5vZGUpOwotICAgICAgICAgICAgRXhpdFZhbHVl
IGV4aXRWYWx1ZSA9IGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVh
cFBhaXIudmFsdWUpOwotICAgICAgICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2tt
YXBMb2NhdGlvbnMoKSkKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBM
b2NhdGlvbnNJbmRleEJ5T2Zmc2V0KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMpOwotICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5hZGQoCi0gICAgICAgICAgICAg
ICAgaGVhcFBhaXIua2V5LmRlc2NyaXB0b3IoKSwKLSAgICAgICAgICAgICAgICBleGl0VmFsdWUp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMsICJcbiIpOwotICAgICAgICAgICAgaWYgKCFleGl0RGVz
Y3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgTWF0ZXJpYWxpemF0aW9uczogXG4iKTsKLSAgICAgICAgICAgICAg
ICBmb3IgKEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBl
eGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6YXRpb25zKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICAgICAgICAiLCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRpb24pLCAiXG4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIEV4aXRWYWx1ZSBleGl0
VmFsdWVGb3JBdmFpbGFiaWxpdHkoCi0gICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIGNvbnN0IEhhc2hNYXA8Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9u
Kj4mIG1hcCwKLSAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKLSAgICB7Ci0gICAg
ICAgIEZsdXNoZWRBdCBmbHVzaCA9IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKLSAgICAgICAg
c3dpdGNoIChmbHVzaC5mb3JtYXQoKSkgewotICAgICAgICBjYXNlIERlYWRGbHVzaDoKLSAgICAg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgotICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5o
YXNOb2RlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1l
bnRzLCBtYXAsIGF2YWlsYWJpbGl0eS5ub2RlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQg
aW4gYnl0ZWNvZGUgb3IgaXQgY291bGQgaGF2ZQotICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQg
Ynkgb3VyIERDRSwgd2hpY2ggY2FuIHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkg
d2VyZSBsaXZlIGluCi0gICAgICAgICAgICAvLyBieXRlY29kZS4KLSAgICAgICAgICAgIHJldHVy
biBFeGl0VmFsdWU6OmRlYWQoKTsKLQotICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgotICAg
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgotICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgotICAg
ICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3Rl
cigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6Ci0gICAg
ICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxS
ZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6
Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZp
cnR1YWxSZWdpc3RlcigpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVk
RG91YmxlOgotICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUo
Zmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKLSAgICAg
ICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwotICAgIH0KLSAgICAKLSAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yTm9kZSgKLSAgICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50
cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYg
bWFwLAotICAgICAgICBOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgLy8gTk9URTogSW4gRlRM
LT5CMywgd2UgY2Fubm90IGdlbmVyYXRlIGNvZGUgaGVyZSwgYmVjYXVzZSBtX291dHB1dCBpcyBw
b3NpdGlvbmVkIGFmdGVyIHRoZQotICAgICAgICAvLyBzdGFja21hcCB2YWx1ZS4gTGlrZSBhbGwg
dmFsdWVzLCB0aGUgc3RhY2ttYXAgdmFsdWUgY2Fubm90IHVzZSBhIGNoaWxkIHRoYXQgaXMgZGVm
aW5lZCBhZnRlcgotICAgICAgICAvLyBpdC4KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKTsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsK
LQotICAgICAgICBpZiAobm9kZSkgewotICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgotICAgICAgICAgICAgICAgIC8vIFRoaXMg
bWlnaHQgYXJpc2UgaW4gb2JqZWN0IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQg
dGhhdCBpdCB3b3VsZCwKLSAgICAgICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGls
ZSB0byBiZSBjb25zZXJ2YXRpdmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
ZGVhZCgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKLSAgICAgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2Rl
LT5hc0pTVmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5n
ZXQobm9kZSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdmFpbGFi
bGVSZWNvdmVyaWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBBdmFpbGFibGVSZWNvdmVy
eSByZWNvdmVyeSA9IG1fYXZhaWxhYmxlUmVjb3Zlcmllc1tpXTsKLSAgICAgICAgICAgIGlmIChy
ZWNvdmVyeS5ub2RlKCkgIT0gbm9kZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIEV4aXRWYWx1ZSByZXN1bHQgPSBFeGl0VmFsdWU6OnJlY292ZXJ5KAotICAgICAgICAg
ICAgICAgIHJlY292ZXJ5Lm9wY29kZSgpLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuc2l6
ZSgpICsgMSwKLSAgICAgICAgICAgICAgICByZWNvdmVyeS5mb3JtYXQoKSk7Ci0gICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKHJlY292ZXJ5LmxlZnQoKSk7Ci0gICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKHJlY292ZXJ5LnJpZ2h0KCkpOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
aW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEludDMyLCB2
YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5n
ZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SW50NTIsIHZhbHVlLnZhbHVlKCkp
OwotICAgICAgICAKLSAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChub2Rl
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4aXRB
cmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7
Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1l
bnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAg
IAotICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1l
bnRzLCBEYXRhRm9ybWF0SlMsIHZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgdmFs
dWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0
RG91YmxlLCB2YWx1ZS52YWx1ZSgpKTsKLQotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCB0b0NTdHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRh
KCkpOwotICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgfQotCi0gICAgRXhp
dFZhbHVlIGV4aXRBcmd1bWVudChTdGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBEYXRh
Rm9ybWF0IGZvcm1hdCwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdCA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3Vt
ZW50cy5zaXplKCkpKTsKLSAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvclRhaWxD
YWxsKFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBBU1NFUlQobm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7Ci0gICAgICAgIEFTU0VSVChu
b2RlLT5oYXNSZXN1bHQoKSk7Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAg
ICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAg
ICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6Y29u
c3RhbnQobm9kZS0+YXNKU1ZhbHVlKCkpOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2
YWx1ZS52YWx1ZSgpKTsKLQotICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUp
OwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZXhpdEFy
Z3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKSk7
Ci0KLSAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3Vt
ZW50cywgRGF0YUZvcm1hdEpTLCBib3hCb29sZWFuKHZhbHVlLnZhbHVlKCkpKTsKLQotICAgICAg
ICAvLyBEb3VibGVzIGFuZCBJbnQ1MiBoYXZlIGJlZW4gY29udmVydGVkIGJ5IFZhbHVlUmVwKCkK
LSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmlu
ZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBkb2VzS2lsbChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoZWRnZS5kb2VzTm90S2ls
bCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGFkZEF2YWlsYWJsZVJlY292
ZXJ5KAotICAgICAgICBOb2RlKiBub2RlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAgICAgbV9h
dmFpbGFibGVSZWNvdmVyaWVzLmFwcGVuZChBdmFpbGFibGVSZWNvdmVyeShub2RlLCBvcGNvZGUs
IGxlZnQsIHJpZ2h0LCBmb3JtYXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRBdmFpbGFi
bGVSZWNvdmVyeSgKLSAgICAgICAgRWRnZSBlZGdlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIERhdGFGb3JtYXQgZm9ybWF0KQotICAgIHsKLSAgICAg
ICAgYWRkQXZhaWxhYmxlUmVjb3ZlcnkoZWRnZS5ub2RlKCksIG9wY29kZSwgbGVmdCwgcmlnaHQs
IGZvcm1hdCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJl
ZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJbnQ1
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBtX2ludDUyVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0K
LSAgICB2b2lkIHNldFN0cmljdEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIG1fc3RyaWN0SW50NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUo
dmFsdWUsIG1faGlnaEJsb2NrKSk7Ci0gICAgfQotICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9k
ZSwgTFZhbHVlIHZhbHVlLCBJbnQ1MktpbmQga2luZCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAo
a2luZCkgewotICAgICAgICBjYXNlIEludDUyOgotICAgICAgICAgICAgc2V0SW50NTIobm9kZSwg
dmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
U3RyaWN0SW50NTI6Ci0gICAgICAgICAgICBzZXRTdHJpY3RJbnQ1Mihub2RlLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGludDUyIGtpbmQiKTsKLSAgICB9Ci0gICAgdm9p
ZCBzZXRKU1ZhbHVlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1f
anNWYWx1ZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRCb29sZWFuKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIG1fYm9vbGVhblZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlKE5v
ZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fc3RvcmFnZVZhbHVlcy5z
ZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0g
ICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRJbnQzMihMVmFsdWUgdmFsdWUpCi0gICAg
ewotICAgICAgICBzZXRJbnQzMihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRJ
bnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVl
KTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewot
ICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBz
ZXRJbnQ1MihMVmFsdWUgdmFsdWUsIEludDUyS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc2V0
SW50NTIobV9ub2RlLCB2YWx1ZSwga2luZCk7Ci0gICAgfQotICAgIHZvaWQgc2V0SlNWYWx1ZShM
VmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOwot
ICAgIH0KLSAgICB2b2lkIHNldEJvb2xlYW4oTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
c2V0Qm9vbGVhbihtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXRTdG9yYWdlKExW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7Ci0g
ICAgfQotICAgIHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNl
dERvdWJsZShtX25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkKGNv
bnN0IExvd2VyZWROb2RlVmFsdWUmIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5h
dG9ycy0+ZG9taW5hdGVzKHZhbHVlLmJsb2NrKCksIG1faGlnaEJsb2NrKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIG1fZ3Jh
cGgubV9wbGFuLndlYWtSZWZlcmVuY2VzLmFkZExhemlseSh0YXJnZXQpOwotICAgIH0KLQotICAg
IExWYWx1ZSBsb2FkU3RydWN0dXJlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSB0YWJsZUluZGV4ID0gbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCk7Ci0gICAgICAgIExWYWx1ZSB0YWJsZUJhc2UgPSBtX291dC5sb2FkUHRyKAotICAgICAg
ICAgICAgbV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCkp
KTsKLSAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAg
ICAgICAgICBtX2hlYXBzLnN0cnVjdHVyZVRhYmxlLCB0YWJsZUJhc2UsIG1fb3V0Lnplcm9FeHRQ
dHIodGFibGVJbmRleCkpOwotICAgICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgd2Vha1BvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQotICAgIHsK
LSAgICAgICAgYWRkV2Vha1JlZmVyZW5jZShwb2ludGVyKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmNvbnN0SW50UHRyKHBvaW50ZXIpOwotICAgIH0KLQotICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJl
SUQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNl
KHN0cnVjdHVyZSk7Ci0gICAgICAgIHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aWQoKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKHN0cnVjdHVyZSk7
Ci0gICAgfQotICAgIAotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBp
bnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICByZXR1cm4g
bV9vdXQuYWRkcmVzcyhiYXNlLCBtX2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsK
LSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVy
YW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5
bG9hZE9mZnNldCk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2Us
IGludCBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3Bl
cmFuZCwgVGFnT2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50
IG9wZXJhbmQsIHB0cmRpZmZfdCBvZmZzZXQgPSAwKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
ZHJlc3NGb3IoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBvZmZzZXQpOwotICAgIH0KLSAgICBU
eXBlZFBvaW50ZXIgYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCi0gICAgewotICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBv
ZmZzZXQpOwotICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5v
ZmZzZXQoKSwgb2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50
IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0
ZXIob3BlcmFuZCkpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJh
bmQsIFBheWxvYWRPZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBv
cGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCkpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgVGFnT2Zm
c2V0KTsKLSAgICB9Ci0gICAgCi0gICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOwotICAg
IH0KLSAgICBBYnN0cmFjdFZhbHVlIGFic3RyYWN0VmFsdWUoRWRnZSBlZGdlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSBwcm92ZW5UeXBlKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3R5cGU7Ci0gICAgfQotICAgIFNwZWN1bGF0ZWRU
eXBlIHByb3ZlblR5cGUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZlblR5
cGUoZWRnZS5ub2RlKCkpOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKE5v
ZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3Zh
bHVlOwotICAgIH0KLSAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBwcm92ZW5WYWx1ZShlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYWJzdHJhY3RTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKG5vZGUpLm1fc3RydWN0dXJlOwotICAg
IH0KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0dXJlKEVkZ2UgZWRn
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFN0cnVjdHVyZShlZGdlLm5vZGUoKSk7
Ci0gICAgfQotICAgIAotI2lmIEVOQUJMRShNQVNNX1BST0JFKQotICAgIHZvaWQgcHJvYmUoc3Rk
OjpmdW5jdGlvbjx2b2lkIChDQ2FsbEhlbHBlcnM6OlByb2JlQ29udGV4dCopPiBwcm9iZUZ1bmMp
Ci0gICAgewotICAgICAgICBVTlVTRURfUEFSQU0ocHJvYmVGdW5jKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIHZvaWQgY3Jhc2goKQotICAgIHsKLSAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmlu
ZGV4LCBtX25vZGUtPmluZGV4KCkpOwotICAgIH0KLSAgICB2b2lkIGNyYXNoKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCwgdW5zaWduZWQgbm9kZUluZGV4KQotICAgIHsKLSNpZiBBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgbV9vdXQuY2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ0
bFVucmVhY2hhYmxlKSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShibG9ja0luZGV4KTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKG5vZGVJbmRleCk7Ci0jZWxzZQotICAgICAgICBtX291dC5jYWxsKAot
ICAgICAgICAgICAgbV9vdXQudm9pZFR5cGUsCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihmdGxVbnJlYWNoYWJsZSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihjb2RlQmxv
Y2soKSksIG1fb3V0LmNvbnN0SW50MzIoYmxvY2tJbmRleCksCi0gICAgICAgICAgICBtX291dC5j
b25zdEludDMyKG5vZGVJbmRleCkpOwotI2VuZGlmCi0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgfQotCi0gICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJl
dHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KLSAgICAKLSAg
ICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KLSAgICAKLSAgICBHcmFwaCYg
bV9ncmFwaDsKLSAgICBTdGF0ZSYgbV9mdGxTdGF0ZTsKLSAgICBBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5IG1faGVhcHM7Ci0gICAgT3V0cHV0IG1fb3V0OwotICAgIFByb2NlZHVyZSYgbV9wcm9jOwot
ICAgIAotICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7Ci0gICAgTEJhc2ljQmxvY2sgbV9oYW5k
bGVFeGNlcHRpb25zOwotICAgIEhhc2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+
IG1fYmxvY2tzOwotICAgIAotICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKLSAgICBMVmFsdWUgbV9j
YXB0dXJlZDsKLSAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVyOwotICAgIExWYWx1ZSBtX3RhZ01h
c2s7Ci0gICAgCi0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZh
bHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0cmljdEludDUy
VmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50NTJWYWx1
ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVz
OwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsK
LSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Ci0g
ICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7Ci0gICAg
Ci0gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBo
YXZpbmcgdG8gZG8gQ1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgotICAgIC8vIEl0J3Mgbmlj
ZSB0byBoYXZlIHRoZXNlIG9wdGltaXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBn
dWFyYW50ZWUgdGhlbSBhIGJpdCBiZXR0ZXIuCi0gICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBM
TFZNIGNvbXBpbGUgdGltZS4KLSAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJn
dW1lbnRWYWx1ZXM7Ci0gICAgCi0gICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7Ci0g
ICAgCi0gICAgTG9jYWxPU1JBdmFpbGFiaWxpdHlDYWxjdWxhdG9yIG1fYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvcjsKLSAgICAKLSAgICBWZWN0b3I8QXZhaWxhYmxlUmVjb3ZlcnksIDM+IG1fYXZhaWxh
YmxlUmVjb3ZlcmllczsKLSAgICAKLSAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwot
ICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0
ZXI7Ci0gICAgREZHOjpCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKLSAgICBERkc6OkJhc2ljQmxv
Y2sqIG1fbmV4dEhpZ2hCbG9jazsKLSAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKLQot
ICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47Ci0gICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7Ci0gICAg
Tm9kZSogbV9ub2RlOwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgbG93
ZXJERkdUb0xMVk0oU3RhdGUmIHN0YXRlKQotewotICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5n
KHN0YXRlKTsKLSAgICBsb3dlcmluZy5sb3dlcigpOwotfQotCi19IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKLQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uaAkocmV2aXNpb24gMTk2NzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBGVExMb3dlckRGR1RvTExWTV9oCi0jZGVmaW5lIEZUTExv
d2VyREZHVG9MTFZNX2gKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiREZHR3Jh
cGguaCIKLSNpbmNsdWRlICJGVExTdGF0ZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7Ci0KLXZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmKTsKLQotfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAotCi0jZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCi0KLSNlbmRpZiAvLyBGVExM
b3dlckRGR1RvTExWTV9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM4LDcgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAgICAgcmVn
aXN0ZXJTY3JhdGNoLCBtYXRlcmlhbGl6YXRpb25Ub1BvaW50ZXIpOwogICAgIH07CiAgICAgCi0g
ICAgLy8gTm90ZSB0aGF0IHdlIGNvbWUgaW4gaGVyZSwgdGhlIHN0YWNrIHVzZWQgdG8gYmUgYXMg
TExWTSBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KKyAg
ICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3RhY2sgdXNlZCB0byBiZSBhcyBC
MyBsZWZ0IGl0IGV4Y2VwdCB0aGF0IHNvbWVvbmUgY2FsbGVkIHB1c2hUb1NhdmUoKS4KICAgICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZSB2YWx1ZSB0aGV5IHNhdmVkLiBCdXQsIHdlIGRvIGFw
cHJlY2lhdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpdCwgYmVjYXVzZSB3ZSB1c2UKICAgICAv
LyB0aGF0IHNsb3QgZm9yIHNhdmVBbGxSZWdpc3RlcnMoKS4KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExXZWlnaHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFdlaWdodC5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFdlaWdodC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxOCArNTMsNiBA
QCBwdWJsaWM6CiAKICAgICBCMzo6RnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5Q2xhc3MoKSBjb25z
dCB7IHJldHVybiB2YWx1ZSgpID8gQjM6OkZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwgOiBCMzo6RnJl
cXVlbmN5Q2xhc3M6OlJhcmU7IH0KICAgICAKLSAgICB1bnNpZ25lZCBzY2FsZVRvVG90YWwoZG91
YmxlIHRvdGFsKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gTExWTSBhY2NlcHRzIDMyLWJpdCB1
bnNpZ25lZCBicmFuY2ggd2VpZ2h0cyBidXQgaW4gZHVtcHMgaXQgbWlnaHQgZGlzcGxheSB0aGVt
Ci0gICAgICAgIC8vIGFzIHNpZ25lZCB2YWx1ZXMuIFdlIGRvbid0IG5lZWQgYWxsIDMyIGJpdHMs
IHNvIHdlIGp1c3QgdXNlIHRoZSAzMSBiaXRzLgotICAgICAgICBkb3VibGUgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX3ZhbHVlKSAqIElOVF9NQVggLyB0b3RhbDsKLSAgICAgICAgaWYg
KHJlc3VsdCA8IDApCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgaWYgKHJlc3VsdCA+
IElOVF9NQVgpCi0gICAgICAgICAgICByZXR1cm4gSU5UX01BWDsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOwotICAgIH0KLSAgICAKICAgICAvLyBJbnZlcnNl
IHdlaWdodCBmb3IgYSB0d28tdGFyZ2V0IGJyYW5jaC4KICAgICBXZWlnaHQgaW52ZXJzZSgpIGNv
bnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExXZWlnaHRlZFRh
cmdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0
ZWRUYXJnZXQuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExXZWlnaHRlZFRhcmdldC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw5ICs3Myw4IEBAIGlu
bGluZSBXZWlnaHRlZFRhcmdldCByYXJlbHkoTEJhc2ljQmxvY2sKICAgICByZXR1cm4gV2VpZ2h0
ZWRUYXJnZXQoYmxvY2ssIDApOwogfQogCi0vLyBUaGlzIG1lYW5zIHdlIGxldCBMTFZNIGZpZ3Vy
ZSBpdCBvdXQgYmFzaWMgb24gaXRzIHN0YXRpYyBlc3RpbWF0ZXMuIExMVk0ncyBzdGF0aWMKLS8v
IGVzdGltYXRlcyBhcmUgdXN1YWxseSBwcmV0dHkgZGFybiBnb29kLCBzbyB0aGVyZSdzIGdlbmVy
YWxseSBub3RoaW5nIHdyb25nIHdpdGgKLS8vIHVzaW5nIHRoaXMuCisvLyBDdXJyZW50bHkgaW4g
QjMgdGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiAidXN1YWxseSIsIGJ1dCB3ZSBsaWtlIHRvIG1h
a2UgdGhlIGRpc3RpbmN0aW9uIGluCisvLyBjYXNlIHdlIGV2ZXIgbWFrZSBCMyBzdXBwb3J0IHBy
b3BlciBicmFuY2ggd2VpZ2h0cy4gV2UgdXNlZCB0byBkbyB0aGF0IGluIExMVk0uCiBpbmxpbmUg
V2VpZ2h0ZWRUYXJnZXQgdW5zdXJlKExCYXNpY0Jsb2NrIGJsb2NrKQogewogICAgIHJldHVybiBX
ZWlnaHRlZFRhcmdldChibG9jaywgV2VpZ2h0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCShyZXZpc2lvbiAxOTY3NDQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
ZW1pdERpc3BsYWNlKENhYwogICAgICAgICAvLyBhYnNvbHV0ZWx5IG5lZWQgdG8gbG9hZCB0aGUg
Y2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGludG8KICAgICAgICAgLy8gZGlmZmVyZW50IEdQUnMgaW5p
dGlhbGx5IGJ1dCBub3QgZW5vdWdoIHByZXNzdXJlIHRvCiAgICAgICAgIC8vIHRoZW4gaGF2ZSB0
byBzcGlsbCBhbGwgb2YgdGhlbS4gQW5kIGV2ZW4gaW4gdGhhdCBjYXNlLAotICAgICAgICAvLyBk
ZXBlbmRpbmcgb24gdGhlIG9yZGVyIGluIHdoaWNoIExMVk0gc2F2ZXMgdGhlCisgICAgICAgIC8v
IGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggQjMgc2F2ZXMgdGhlCiAgICAgICAgIC8v
IGNhbGxlZS1zYXZlcywgd2Ugd2lsbCBwcm9iYWJseSBzdGlsbCBiZSBzYWZlLiBBbnl3YXksCiAg
ICAgICAgIC8vIHRoZSBjb3VwbGUgZXh0cmEgbW92ZSBpbnN0cnVjdGlvbnMgY29tcGFyZWQgdG8g
YW4KICAgICAgICAgLy8gZWZmaWNpZW50IGN5Y2xlLWJhc2VkIGFsZ29yaXRobSBhcmUgbm90IGdv
aW5nIHRvIGh1cnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
Y3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDcgKzI3OCw3IEBAIFJlZ2lzdGVyU2V0
IFJlZ2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmUKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJl
Z0NTMyk7CiAgICAgcmVzdWx0LnNldChHUFJJbmZvOjpyZWdDUzQpOwogI2VsaWYgQ1BVKEFSTTY0
KQotICAgIC8vIExMVk0gbWlnaHQgc2F2ZSBhbmQgdXNlIGFsbCBBUk02NCBjYWxsZWUgc2F2ZXMg
c3BlY2lmaWVkIGluIHRoZSBBQkkuCisgICAgLy8gQjMgbWlnaHQgc2F2ZSBhbmQgdXNlIGFsbCBB
Uk02NCBjYWxsZWUgc2F2ZXMgc3BlY2lmaWVkIGluIHRoZSBBQkkuCiAgICAgcmVzdWx0LnNldChH
UFJJbmZvOjpyZWdDUzApOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MxKTsKICAgICBy
ZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGx2bS9Jbml0aWFsaXplTExWTUxpbnV4LmNwcAkocmV2aXNpb24gMTk2NzQ0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBV
bml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk0uaCIKLQotI2lmIEhBVkUoTExWTSkK
LQotI2luY2x1ZGUgIkluaXRpYWxpemVMTFZNUE9TSVguaCIKLQotI2lmIFBMQVRGT1JNKEdUSykK
LSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9u
KGJvb2wgdmVyYm9zZSkKLXsKLSNpZiBQTEFURk9STShHVEspCi0jaWYgRU5BQkxFKERFVkVMT1BF
Ul9NT0RFKQotICAgIExMVk1Jbml0aWFsaXplckZ1bmN0aW9uIGZ1bmN0aW9uID0gZ2V0TExWTUlu
aXRpYWxpemVyRnVuY3Rpb25QT1NJWCgibGlibGx2bUZvckpTQy5zbyIsIHZlcmJvc2UpOwotICAg
IGlmIChmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwotI2VuZGlmCi0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGxpYmxsdm1Gb3JKU0NJbnN0YWxsZWRQYXRoID0gTElCRElSIEdfRElS
X1NFUEFSQVRPUl9TICJqYXZhc2NyaXB0Y29yZWd0ay0iIFdFQktJVEdUS19BUElfVkVSU0lPTl9T
VFJJTkcgR19ESVJfU0VQQVJBVE9SX1M7Ci0gICAgR1VuaXF1ZVB0cjxjaGFyPiBsaWJsbHZtRm9y
SlNDRmlsZW5hbWUoZ19idWlsZF9maWxlbmFtZShsaWJsbHZtRm9ySlNDSW5zdGFsbGVkUGF0aCwg
ImxpYmxsdm1Gb3JKU0Muc28iLCBudWxscHRyKSk7Ci0gICAgcmV0dXJuIGdldExMVk1Jbml0aWFs
aXplckZ1bmN0aW9uUE9TSVgobGlibGx2bUZvckpTQ0ZpbGVuYW1lLmdldCgpLCB2ZXJib3NlKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uUE9TSVgoImxpYmxs
dm1Gb3JKU0Muc28iLCB2ZXJib3NlKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MK
LQotI2VuZGlmIC8vIEhBVkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZt
L0luaXRpYWxpemVMTFZNV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXpl
TExWTS5oIgotCi0jaW5jbHVkZSAiTExWTUFQSS5oIgotI2luY2x1ZGUgPFdpbmRvd3MuaD4KLQot
I2lmIEhBVkUoTExWTSkKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLUxMVk1Jbml0aWFsaXplckZ1bmN0
aW9uIGdldExMVk1Jbml0aWFsaXplckZ1bmN0aW9uKGJvb2wgLyogdmVyYm9zZSAqLykKLXsKLSAg
ICBjb25zdCB3Y2hhcl90KiBsaWJyYXJ5TmFtZSA9IEwibGlibGx2bUZvckpTQy5kbGwiOwotCi0g
ICAgSE1PRFVMRSBsaWJyYXJ5ID0gOjpMb2FkTGlicmFyeShsaWJyYXJ5TmFtZSk7Ci0KLSAgICBp
ZiAoIWxpYnJhcnkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgY2hhciog
c3ltYm9sTmFtZSA9ICJpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSSI7Ci0gICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvbj4oR2V0UHJvY0FkZHJlc3MobGlicmFy
eSwgc3ltYm9sTmFtZSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEhB
VkUoTExWTSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTVRy
YXBDYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xp
YnJhcnkvTExWTVRyYXBDYWxsYmFjay5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1UcmFwQ2FsbGJhY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZm5kZWYgTExWTVRyYXBDYWxsYmFja19oCi0jZGVmaW5lIExMVk1UcmFwQ2Fs
bGJhY2tfaAotCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotZXh0ZXJuIHZvaWQgKCpn
X2xsdm1UcmFwQ2FsbGJhY2spKGNvbnN0IGNoYXIqIG1lc3NhZ2UsIC4uLikgTk9fUkVUVVJOOwot
Ci0jZW5kaWYgLy8gTExWTVRyYXBDYWxsYmFja19oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCShy
ZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2xp
Ymxsdm1Gb3JKU0MudmVyc2lvbgkod29ya2luZyBjb3B5KQpAQCAtMSw0ICswLDAgQEAKLUxMVk1G
T1JKU0MgewotICAgIGdsb2JhbDogaW5pdGlhbGl6ZUFuZEdldEpTQ0xMVk1BUEk7Ci0gICAgbG9j
YWw6ICo7Ci19OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZN
VHJhcENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0v
bGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTVRyYXBDYWxsYmFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNVHJhcENhbGxiYWNrX2gKLSNkZWZpbmUgTExWTVRyYXBD
YWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi1leHRlcm4gdm9pZCAo
KmdfbGx2bVRyYXBDYWxsYmFjaykoY29uc3QgY2hhciogbWVzc2FnZSwgLi4uKSBOT19SRVRVUk47
Ci0KLSNlbmRpZiAvLyBMTFZNVHJhcENhbGxiYWNrX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24J
KHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkv
bGlibGx2bUZvckpTQy52ZXJzaW9uCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzAsMCBAQAotTExW
TUZPUkpTQyB7Ci0gICAgZ2xvYmFsOiBpbml0aWFsaXplQW5kR2V0SlNDTExWTUFQSTsKLSAgICBs
b2NhbDogKjsKLX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmNwcAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MCwxNiArMzQwLDYgQEAgc3RhdGljIHZv
aWQgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpCiAgICAgICAgIE9wdGlvbnM6OnVzZU9TUkVu
dHJ5VG9GVEwoKSA9IGZhbHNlOwogICAgIH0KIAotI2lmIENQVShBUk02NCkKLSAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjUxMAotICAgIC8v
IFdlJ3JlIHJ1bm5pbmcgaW50byBhIGJ1ZyB3aGVyZSBzb21lIEFSTTY0IHRlc3RzIGFyZSBmYWls
aW5nIGluIHRoZSBGVEwKLSAgICAvLyB3aXRoIHdoYXQgYXBwZWFycyB0byBiZSBhbiBsbHZtIGJ1
ZyB3aGVyZSBsbHZtIGlzIG1pc2NhbGN1bGF0aW5nIHRoZQotICAgIC8vIGxpdmUtb3V0IHZhcmlh
YmxlcyBvZiBhIHBhdGNocG9pbnQuIFRoaXMgY2F1c2VzIHVzIHRvIG5vdCBrZWVwIGEgCi0gICAg
Ly8gdm9sYXRpbGUgcmVnaXN0ZXIgYWxpdmUgYWNyb3NzIGEgQyBjYWxsIGluIGEgcGF0Y2hwb2lu
dCwgZXZlbiB0aG91Z2ggCi0gICAgLy8gdGhhdCByZWdpc3RlciBpcyB1c2VkIGltbWVkaWF0ZWx5
IGFmdGVyIHRoZSBwYXRjaHBvaW50LgotICAgIE9wdGlvbnM6OmFzc3VtZUFsbFJlZ3NJbkZUTElD
QXJlTGl2ZSgpID0gdHJ1ZTsKLSNlbmRpZgotCiAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSB2
YWx1ZSBvZiB0aGUgcmVvcHRpbWl6YXRpb24gcmV0cnkgY291bnRlci4gVGhpcyBpcyBzaW1wbHkK
ICAgICAvLyB0aGUgbGFyZ2VzdCB2YWx1ZSBhdCB3aGljaCB3ZSBkb24ndCBvdmVyZmxvdyB0aGUg
ZXhlY3V0ZSBjb3VudGVyLCB3aGVuIHVzaW5nIGl0CiAgICAgLy8gdG8gbGVmdC1zaGlmdCB0aGUg
ZXhlY3V0aW9uIGNvdW50ZXIgYnkgdGhpcyBhbW91bnQuIEN1cnJlbnRseSB0aGUgdmFsdWUgZW5k
cwpAQCAtMzc2LDEyICszNjYsNyBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAg
ICAgICAgbmFtZV8jI0RlZmF1bHQoKSA9IGRlZmF1bHRWYWx1ZV87CiAgICAgICAgICAgICBKU0Nf
T1BUSU9OUyhGT1JfRUFDSF9PUFRJT04pCiAjdW5kZWYgRk9SX0VBQ0hfT1BUSU9OCi0gICAgCi0g
ICAgICAgICAgICAgICAgLy8gSXQgKnByb2JhYmx5KiBtYWtlcyBzZW5zZSBmb3Igb3RoZXIgcGxh
dGZvcm1zIHRvIGVuYWJsZSB0aGlzLgotI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTTY0KQot
ICAgICAgICAgICAgICAgIHVzZUxMVk1GYXN0SVNlbCgpID0gdHJ1ZTsKLSNlbmRpZgotICAgICAg
ICAKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFsbG93IGVudmlyb25tZW50IHZh
cnMgdG8gb3ZlcnJpZGUgb3B0aW9ucyBpZiBhcHBsaWNhYmxlLgogICAgICAgICAgICAgLy8gVGhl
IGV2biB2YXIgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoZSBvcHRpb24gcHJlZml4ZWQgd2l0aAog
ICAgICAgICAgICAgLy8gIkpTQ18iLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsMjIgKzE4MCwxMSBAQCB0eXBl
ZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICBcCiAgICAgdihib29sLCB1c2VGVExK
SVQsIHRydWUsICJhbGxvd3MgdGhlIEZUTCBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXAogICAg
IHYoYm9vbCwgdXNlRlRMVEJBQSwgdHJ1ZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlTExW
TUZhc3RJU2VsLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgdXNlTExWTVNtYWxsQ29k
ZU1vZGVsLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgZHVtcExMVk1JUiwgZmFsc2Us
IG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzLCBmYWxz
ZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwg
ZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmss
IGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29sLCBsbHZtU2ltcGxlT3B0LCB0cnVlLCBudWxs
cHRyKSBcCi0gICAgdih1bnNpZ25lZCwgbGx2bUJhY2tlbmRPcHRpbWl6YXRpb25MZXZlbCwgMiwg
bnVsbHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1PcHRpbWl6YXRpb25MZXZlbCwgMiwgbnVs
bHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1TaXplTGV2ZWwsIDAsIG51bGxwdHIpIFwKLSAg
ICB2KHVuc2lnbmVkLCBsbHZtTWF4U3RhY2tTaXplLCAxMjggKiBLQiwgbnVsbHB0cikgXAotICAg
IHYoYm9vbCwgbGx2bURpc2FsbG93QVZYLCB0cnVlLCBudWxscHRyKSBcCisgICAgdihib29sLCBi
M0Fsd2F5c0ZhaWxzQmVmb3JlQ29tcGlsZSwgZmFsc2UsIG51bGxwdHIpIFwKKyAgICB2KGJvb2ws
IGIzQWx3YXlzRmFpbHNCZWZvcmVMaW5rLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
ZnRsQ3Jhc2hlcywgZmFsc2UsIG51bGxwdHIpIC8qIGZvb2wtcHJvb2Ygd2F5IG9mIGNoZWNraW5n
IHRoYXQgeW91IGVuZGVkIHVwIGluIHRoZSBGVEwuIDstKSAqL1wKLSAgICB2KGJvb2wsIGZ0bENy
YXNoZXNJZkNhbnRJbml0aWFsaXplTExWTSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2ws
IGNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoLCAhQVNTRVJUX0RJU0FCTEVELCBudWxscHRy
KSBcCi0gICAgdihib29sLCBhc3N1bWVBbGxSZWdzSW5GVExJQ0FyZUxpdmUsIGZhbHNlLCBudWxs
cHRyKSBcCiAgICAgdihib29sLCB1c2VBY2Nlc3NJbmxpbmluZywgdHJ1ZSwgbnVsbHB0cikgXAog
ICAgIHYodW5zaWduZWQsIG1heEFjY2Vzc1ZhcmlhbnRMaXN0U2l6ZSwgOCwgbnVsbHB0cikgXAog
ICAgIHYoYm9vbCwgdXNlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCB0cnVlLCBudWxscHRy
KSBcCkBAIC0yMjAsOSArMjA5LDYgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7
CiAgICAgXAogICAgIHYoYm9vbCwgdXNlUHJvZmlsZXIsIGZhbHNlLCBudWxscHRyKSBcCiAgICAg
XAotICAgIHYoYm9vbCwgZm9yY2VVRGlzODZEaXNhc3NlbWJsZXIsIGZhbHNlLCBudWxscHRyKSBc
Ci0gICAgdihib29sLCBmb3JjZUxMVk1EaXNhc3NlbWJsZXIsIGZhbHNlLCBudWxscHRyKSBcCi0g
ICAgXAogICAgIHYoYm9vbCwgdXNlQXJjaGl0ZWN0dXJlU3BlY2lmaWNPcHRpbWl6YXRpb25zLCB0
cnVlLCBudWxscHRyKSBcCiAgICAgXAogICAgIHYoYm9vbCwgYnJlYWtPblRocm93LCBmYWxzZSwg
bnVsbHB0cikgXApAQCAtMzc4LDcgKzM2NCw2IEBAIGVudW0gT3B0aW9uRXF1aXZhbGVuY2Ugewog
ICAgIHYoYWx3YXlzRG9GdWxsQ29sbGVjdGlvbiwgdXNlR2VuZXJhdGlvbmFsR0MsIEludmVydGVk
T3B0aW9uKSBcCiAgICAgdihlbmFibGVPU1JFbnRyeVRvREZHLCB1c2VPU1JFbnRyeVRvREZHLCBT
YW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVPU1JFbnRyeVRvRlRMLCB1c2VPU1JFbnRyeVRvRlRM
LCBTYW1lT3B0aW9uKSBcCi0gICAgdihlbmFibGVMTFZNRmFzdElTZWwsIHVzZUxMVk1GYXN0SVNl
bCwgU2FtZU9wdGlvbikgXAogICAgIHYoZW5hYmxlQWNjZXNzSW5saW5pbmcsIHVzZUFjY2Vzc0lu
bGluaW5nLCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6
YXRpb24sIHVzZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgU2FtZU9wdGlvbikgXAogICAg
IHYoZW5hYmxlUG9seW1vcnBoaWNBY2Nlc3NJbmxpbmluZywgdXNlUG9seW1vcnBoaWNBY2Nlc3NJ
bmxpbmluZywgU2FtZU9wdGlvbikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk2NzMx
KQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25MTFZNSVJHZW5l
cmF0b3IuaDoxOTY3MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rp
b25CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvcl9oCisjZGVmaW5lIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRv
cl9oCisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpICYmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgorCisjZGVmaW5lIFVOVVNFRCAwCisKK25hbWVz
cGFjZSBKU0MgeworCit1c2luZyBGVEw6OkxCYXNpY0Jsb2NrOwordXNpbmcgRlRMOjpMVmFsdWU7
CisKK2NsYXNzIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvciB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBMVmFsdWUgRXhwcmVzc2lvbjsKKyAgICB0eXBlZGVmIGludCBTdGF0ZW1lbnQ7CisgICAg
dHlwZWRlZiBWZWN0b3I8TFZhbHVlPiBFeHByZXNzaW9uTGlzdDsKKyAgICBzdHJ1Y3QgTWVtb3J5
QWRkcmVzcyB7CisgICAgICAgIE1lbW9yeUFkZHJlc3Modm9pZCopIHsgfQorICAgICAgICBNZW1v
cnlBZGRyZXNzKExWYWx1ZSBpbmRleCwgdWludDMyX3Qgb2Zmc2V0KQorICAgICAgICAgICAgOiBp
bmRleChpbmRleCkKKyAgICAgICAgICAgICwgb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIExWYWx1ZSBpbmRleDsKKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0Owor
ICAgIH07CisgICAgdHlwZWRlZiBMQmFzaWNCbG9jayBKdW1wVGFyZ2V0OworICAgIGVudW0gY2xh
c3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsKKworICAgIHZvaWQgc3RhcnRGdW5j
dGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9m
STMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMsIHVp
bnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRz
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMpOworICAg
ICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKTsKKyAgICB9CisKKyAgICB2b2lk
IGVuZEZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkU2V0TG9jYWwoV0FTTU9wS2luZCBvcEtp
bmQsIHVpbnQzMl90IGxvY2FsSW5kZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVO
VVNFRF9QQVJBTShvcEtpbmQpOworICAgICAgICBVTlVTRURfUEFSQU0obG9jYWxJbmRleCk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
KyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRTZXRHbG9i
YWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGdsb2JhbEluZGV4LCBMVmFsdWUgdmFsdWUs
IFdBU01UeXBlIHR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGdsb2JhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAg
IHZvaWQgYnVpbGRSZXR1cm4oTFZhbHVlIHZhbHVlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJu
VHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisg
ICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5U
eXBlKTsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVJMzIodWludDMyX3QgaW1t
ZWRpYXRlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4K
KyAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7
CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0IGltbWVkaWF0ZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0K
KworICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUY2NChkb3VibGUgaW1tZWRpYXRlKQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VE
X1BBUkFNKGltbWVkaWF0ZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAg
TFZhbHVlIGJ1aWxkR2V0TG9jYWwodWludDMyX3QgbG9jYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZEdldEdsb2Jh
bCh1aW50MzJfdCBnbG9iYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICAgICAgcmV0dXJuIFVO
VVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRDb252ZXJ0VHlwZShMVmFsdWUgdmFsdWUs
IFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBlIHRvVHlwZSwg
V0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCisgICAgeworICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAg
ICAgICBVTlVTRURfUEFSQU0oZnJvbVR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0odG9UeXBl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOworICAgICAgICByZXR1cm4gVU5V
U0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZExvYWQoY29uc3QgTWVtb3J5QWRkcmVzcyYg
bWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlLCBXQVNNTWVt
b3J5VHlwZSBtZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NDb252ZXJzaW9uIGNvbnZlcnNpb24pCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBV
TlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNz
aW9uVHlwZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGNvbnZlcnNpb24pOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwor
ICAgIExWYWx1ZSBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBNZW1vcnlBZGRy
ZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdB
U01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShvcEtp
bmQpOworICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7CisgICAgICAgIFVOVVNF
RF9QQVJBTShleHByZXNzaW9uVHlwZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsK
KyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRVbmFyeUkzMihMVmFsdWUgdmFsdWUsIFdBU01PcEV4
cHJlc3Npb25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWls
ZFVuYXJ5RjMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkVW5hcnlGNjQoTFZhbHVlIHZhbHVlLCBX
QVNNT3BFeHByZXNzaW9uRjY0IG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFs
dWUgYnVpbGRCaW5hcnlJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVz
c2lvbkkzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJp
Z2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsK
KyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRCaW5hcnlGMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRCaW5hcnlGNjQoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUg
YnVpbGRSZWxhdGlvbmFsSTMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJl
c3Npb25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShy
aWdodCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7
CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25hbEYzMihMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZFJlbGF0aW9u
YWxGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgYnVpbGRNaW5Pck1heEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURf
UEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4g
VU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4RjY0KExWYWx1ZSBsZWZ0
LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGVm
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShv
cCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkQ2Fs
bEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBh
cmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Np
b25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25JbmRleCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOworICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0
dXJlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4g
VU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZENhbGxJbmRpcmVjdCh1aW50MzJfdCBm
dW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCBMVmFsdWUgaW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFs
dWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25Qb2ludGVyVGFi
bGVJbmRleCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShpbmRleCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShhcmd1bWVudExpc3QpOworICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOwor
ICAgIH0KKworICAgIExWYWx1ZSBidWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBv
cnRJbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNF
RF9QQVJBTShmdW5jdGlvbkltcG9ydEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3Vt
ZW50TGlzdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOworICAgICAgICBVTlVT
RURfUEFSQU0ocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisg
ICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChWZWN0b3I8TFZhbHVlPiYgZXhwcmVzc2lvbkxp
c3QsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uTGlzdCk7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBkaXNjYXJkKExWYWx1ZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBsaW5rVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQganVtcFRvVGFyZ2V0KExC
YXNpY0Jsb2NrIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZv
aWQganVtcFRvVGFyZ2V0SWYoSnVtcENvbmRpdGlvbiwgTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9j
ayB0YXJnZXQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0YXJ0TG9vcCgpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKworICAgIHZvaWQgZW5kTG9vcCgp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0K
KworICAgIHZvaWQgc3RhcnRTd2l0Y2goKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICB2b2lkIGVuZFN3aXRjaCgpCisgICAgewor
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKworICAgIHZv
aWQgc3RhcnRMYWJlbCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgorICAgIH0KKworICAgIHZvaWQgZW5kTGFiZWwoKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICBMQmFzaWNCbG9jayBi
cmVha1RhcmdldCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVlVGFyZ2V0KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTEJhc2ljQmxvY2sg
YnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4KQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxhYmVs
SW5kZXgpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVlTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShs
YWJlbEluZGV4KTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICB2b2lkIGJ1
aWxkU3dpdGNoKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlcywgY29u
c3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgdGFyZ2V0cywgTEJhc2ljQmxvY2sgZGVmYXVsdFRhcmdl
dCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAg
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShjYXNlcyk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlZmF1
bHRUYXJnZXQpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8g
RU5BQkxFKFdFQkFTU0VNQkxZKQorCisjZW5kaWYgLy8gV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJh
dG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsOCArMjMsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvcl9oCi0jZGVmaW5lIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRv
cl9oCisjaWZuZGVmIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAorI2RlZmluZSBXQVNNRnVu
Y3Rpb25CM0lSR2VuZXJhdG9yX2gKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgRU5BQkxF
KEZUTF9KSVQpCiAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB1c2luZyBGVEw6
OkxCYXNpY0Jsb2NrOwogdXNpbmcgRlRMOjpMVmFsdWU7CiAKLWNsYXNzIFdBU01GdW5jdGlvbkxM
Vk1JUkdlbmVyYXRvciB7CitjbGFzcyBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yIHsKIHB1Ymxp
YzoKICAgICB0eXBlZGVmIExWYWx1ZSBFeHByZXNzaW9uOwogICAgIHR5cGVkZWYgaW50IFN0YXRl
bWVudDsKQEAgLTM5MSw0ICszOTEsNCBAQCBwdWJsaWM6CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
QVNTRU1CTFkpCiAKLSNlbmRpZiAvLyBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3JfaAorI2Vu
ZGlmIC8vIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvbkxMVk1JUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM5NCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXQVNN
RnVuY3Rpb25MTFZNSVJHZW5lcmF0b3JfaAotI2RlZmluZSBXQVNNRnVuY3Rpb25MTFZNSVJHZW5l
cmF0b3JfaAotCi0jaWYgRU5BQkxFKFdFQkFTU0VNQkxZKSAmJiBFTkFCTEUoRlRMX0pJVCkKLQot
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGVkVHlwZXMuaCIKLQotI2RlZmluZSBVTlVTRUQgMAotCi1u
YW1lc3BhY2UgSlNDIHsKLQotdXNpbmcgRlRMOjpMQmFzaWNCbG9jazsKLXVzaW5nIEZUTDo6TFZh
bHVlOwotCi1jbGFzcyBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IgewotcHVibGljOgotICAg
IHR5cGVkZWYgTFZhbHVlIEV4cHJlc3Npb247Ci0gICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50Owot
ICAgIHR5cGVkZWYgVmVjdG9yPExWYWx1ZT4gRXhwcmVzc2lvbkxpc3Q7Ci0gICAgc3RydWN0IE1l
bW9yeUFkZHJlc3MgewotICAgICAgICBNZW1vcnlBZGRyZXNzKHZvaWQqKSB7IH0KLSAgICAgICAg
TWVtb3J5QWRkcmVzcyhMVmFsdWUgaW5kZXgsIHVpbnQzMl90IG9mZnNldCkKLSAgICAgICAgICAg
IDogaW5kZXgoaW5kZXgpCi0gICAgICAgICAgICAsIG9mZnNldChvZmZzZXQpCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICBMVmFsdWUgaW5kZXg7Ci0gICAgICAgIHVpbnQzMl90IG9mZnNl
dDsKLSAgICB9OwotICAgIHR5cGVkZWYgTEJhc2ljQmxvY2sgSnVtcFRhcmdldDsKLSAgICBlbnVt
IGNsYXNzIEp1bXBDb25kaXRpb24geyBaZXJvLCBOb25aZXJvIH07Ci0KLSAgICB2b2lkIHN0YXJ0
RnVuY3Rpb24oY29uc3QgVmVjdG9yPFdBU01UeXBlPiYgYXJndW1lbnRzLCB1aW50MzJfdCBudW1i
ZXJPZkkzMkxvY2FsVmFyaWFibGVzLCB1aW50MzJfdCBudW1iZXJPZkYzMkxvY2FsVmFyaWFibGVz
LCB1aW50MzJfdCBudW1iZXJPZkY2NExvY2FsVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3Vt
ZW50cyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkkzMkxvY2FsVmFyaWFibGVzKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMpOwotICAgICAg
ICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGNjRMb2NhbFZhcmlhYmxlcyk7Ci0gICAgfQotCi0gICAg
dm9pZCBlbmRGdW5jdGlvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFNldExvY2FsKFdBU01PcEtpbmQg
b3BLaW5kLCB1aW50MzJfdCBsb2NhbEluZGV4LCBMVmFsdWUgdmFsdWUsIFdBU01UeXBlIHR5cGUp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAg
ICBVTlVTRURfUEFSQU0ob3BLaW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGxvY2FsSW5kZXgp
OwotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0odHlw
ZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkU2V0
R2xvYmFsKFdBU01PcEtpbmQgb3BLaW5kLCB1aW50MzJfdCBnbG9iYWxJbmRleCwgTFZhbHVlIHZh
bHVlLCBXQVNNVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wS2luZCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAg
ICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0K
LSAgICB2b2lkIGJ1aWxkUmV0dXJuKExWYWx1ZSB2YWx1ZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJl
dHVyblR5cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmV0
dXJuVHlwZSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlSTMyKHVpbnQzMl90
IGltbWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUYzMihmbG9hdCBpbW1lZGlh
dGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVGNjQoZG91YmxlIGltbWVkaWF0ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVO
VVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQot
ICAgIExWYWx1ZSBidWlsZEdldExvY2FsKHVpbnQzMl90IGxvY2FsSW5kZXgsIFdBU01UeXBlIHR5
cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0obG9jYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBl
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRHZXRH
bG9iYWwodWludDMyX3QgZ2xvYmFsSW5kZXgsIFdBU01UeXBlIHR5cGUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
Z2xvYmFsSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQ29udmVydFR5cGUoTFZhbHVlIHZh
bHVlLCBXQVNNRXhwcmVzc2lvblR5cGUgZnJvbVR5cGUsIFdBU01FeHByZXNzaW9uVHlwZSB0b1R5
cGUsIFdBU01UeXBlQ29udmVyc2lvbiBjb252ZXJzaW9uKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGZyb21UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHRv
VHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShjb252ZXJzaW9uKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRMb2FkKGNvbnN0IE1lbW9yeUFkZHJl
c3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FT
TU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgTWVtb3J5QWNjZXNzQ29udmVyc2lvbiBjb252ZXJzaW9u
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAg
ICAgVU5VU0VEX1BBUkFNKG1lbW9yeUFkZHJlc3MpOwotICAgICAgICBVTlVTRURfUEFSQU0oZXhw
cmVzc2lvblR5cGUpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5VHlwZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShjb252ZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgYnVpbGRTdG9yZShXQVNNT3BLaW5kIG9wS2luZCwgY29uc3QgTWVtb3J5
QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBl
LCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0o
b3BLaW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG1lbW9yeUFkZHJlc3MpOwotICAgICAgICBV
TlVTRURfUEFSQU0oZXhwcmVzc2lvblR5cGUpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5
VHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkVW5hcnlJMzIoTFZhbHVlIHZhbHVlLCBXQVNN
T3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
YnVpbGRVbmFyeUYzMihMVmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25GMzIgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFVuYXJ5RjY0KExWYWx1ZSB2YWx1
ZSwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGJ1aWxkQmluYXJ5STMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4
cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJB
TShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVT
RUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQmluYXJ5RjMyKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0g
ICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQmluYXJ5RjY0
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGJ1aWxkUmVsYXRpb25hbEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5V
U0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFJlbGF0aW9uYWxGMzIoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9w
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRSZWxh
dGlvbmFsRjY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIg
b3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQot
Ci0gICAgTFZhbHVlIGJ1aWxkTWluT3JNYXhJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwg
V0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1heEY2NChMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWls
ZENhbGxJbnRlcm5hbCh1aW50MzJfdCBmdW5jdGlvbkluZGV4LCBjb25zdCBWZWN0b3I8TFZhbHVl
PiYgYXJndW1lbnRMaXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHBy
ZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uSW5kZXgpOwotICAg
ICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRMaXN0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNp
Z25hdHVyZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0
dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDYWxsSW5kaXJlY3QodWludDMy
X3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgTFZhbHVlIGluZGV4LCBjb25zdCBWZWN0b3I8
TFZhbHVlPiYgYXJndW1lbnRMaXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdB
U01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uUG9pbnRl
clRhYmxlSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0oaW5kZXgpOwotICAgICAgICBVTlVT
RURfUEFSQU0oYXJndW1lbnRMaXN0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNpZ25hdHVyZSk7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDYWxsSW1wb3J0KHVpbnQzMl90IGZ1bmN0aW9u
SW1wb3J0SW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdB
U01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBV
TlVTRURfUEFSQU0oZnVuY3Rpb25JbXBvcnRJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShh
cmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIHZvaWQgYXBwZW5kRXhwcmVzc2lvbkxpc3QoVmVjdG9yPExWYWx1ZT4mIGV4cHJlc3Np
b25MaXN0LCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZXhwcmVzc2lvbkxpc3QpOwotICAg
ICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgIH0KLQotICAgIHZvaWQgZGlzY2FyZChMVmFs
dWUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgbGlua1RhcmdldChMQmFzaWNCbG9jayB0YXJn
ZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGp1bXBUb1Rhcmdl
dChMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGp1bXBUb1RhcmdldElmKEp1bXBDb25kaXRpb24sIExWYWx1ZSB2YWx1ZSwgTEJhc2lj
QmxvY2sgdGFyZ2V0KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KHRhcmdldCk7Ci0gICAgfQotCi0gICAgdm9pZCBzdGFydExvb3AoKQotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZExv
b3AoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAg
ICB9Ci0KLSAgICB2b2lkIHN0YXJ0U3dpdGNoKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgdm9pZCBlbmRTd2l0Y2goKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAg
ICB2b2lkIHN0YXJ0TGFiZWwoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lkIGVuZExhYmVsKCkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgTEJhc2ljQmxv
Y2sgYnJlYWtUYXJnZXQoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMQmFzaWNCbG9j
ayBjb250aW51ZVRhcmdldCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExCYXNpY0Js
b2NrIGJyZWFrTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJbmRleCkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShs
YWJlbEluZGV4KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMQmFzaWNC
bG9jayBjb250aW51ZUxhYmVsVGFyZ2V0KHVpbnQzMl90IGxhYmVsSW5kZXgpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFS
QU0obGFiZWxJbmRleCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgdm9p
ZCBidWlsZFN3aXRjaChMVmFsdWUgdmFsdWUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZXMs
IGNvbnN0IFZlY3RvcjxMQmFzaWNCbG9jaz4mIHRhcmdldHMsIExCYXNpY0Jsb2NrIGRlZmF1bHRU
YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgot
ICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oY2FzZXMp
OwotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0cyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShk
ZWZhdWx0VGFyZ2V0KTsKLSAgICB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlm
IC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKLQotI2VuZGlmIC8vIFdBU01GdW5jdGlvbkxMVk1JUkdl
bmVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Q
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvblBhcnNlci5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTV0FT
TU1vZHVsZS5oIgogI2luY2x1ZGUgIldBU01GdW5jdGlvbkNvbXBpbGVyLmgiCi0jaW5jbHVkZSAi
V0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uQjNJ
UkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIldBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCIKIAog
I2RlZmluZSBQUk9QQUdBVEVfRVJST1IoKSBkbyB7IGlmICghbV9lcnJvck1lc3NhZ2UuaXNOdWxs
KCkpIHJldHVybiAwOyB9IHdoaWxlICgwKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271634</attachid>
            <date>2016-02-17 22:18:19 -0800</date>
            <delta_ts>2016-02-17 22:25:53 -0800</delta_ts>
            <desc>redacted patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>969670</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSByZW1haW5pbmcgcmVmZXJlbmNlcyB0byBMTFZNLCBhbmQgbWFrZSBzdXJlIGNvbW1l
bnRzIHJlZmVyIHRvIHRoZSBiYWNrZW5kIGFzICJCMyIgbm90ICJMTFZNIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBkaWQgYSBncmVwIC1pIGxsdm0g
b2YgYWxsIG9mIG91ciBjb2RlIGFuZCBkaWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2gg
b2NjdXJlbmNlOgorCisgICAgICAgIC0gUmVuYW1lZCBpdCB0byBCMy4gVGhpcyBpcyBhcHByb3By
aWF0ZSB3aGVuIHdlIHdlcmUgdXNpbmcgIkxMVk0iIHRvIG1lYW4gInRoZSBGVEwKKyAgICAgICAg
ICBiYWNrZW5kIi4KKworICAgICAgICAtIFJlbW92ZWQgdGhlIHJlZmVyZW5jZSBiZWNhdXNlIEkg
Zm91bmQgaXQgdG8gYmUgZGVhZC4gSW4gc29tZSBjYXNlcyBpdCB3YXMgYSBkZWFkCisgICAgICAg
ICAgY29tbWVudDogaXQgd2FzIHRlbGxpbmcgdXMgdGhpbmdzIGFib3V0IHdoYXQgTExWTSBkaWQg
YW5kIHRoYXQncyBqdXN0IG5vdCByZWxldmFudAorICAgICAgICAgIGFueW1vcmUuIEluIG90aGVy
IGNhc2VzIGl0IHdhcyBkZWFkIGNvZGUgdGhhdCBJIGZvcmdvdCB0byBkZWxldGUgaW4gYSBwcmV2
aW91cyBwYXRjaC4KKworICAgICAgICAtIEVkaXRlZCB0aGUgY29tbWVudCBpbiBzb21lIHNtYXJ0
IHdheS4gVGhlcmUgd2VyZSBjb21tZW50cyB0YWxraW5nIGFib3V0IHdoYXQgTExWTSBkaWQKKyAg
ICAgICAgICB0aGF0IHdlcmUgc3RpbGwgb2YgaW50ZXJlc3QuIEluIHNvbWUgY2FzZXMsIEkgYWRk
ZWQgYSBGSVhNRSB0byBjb25zaWRlciBjaGFuZ2luZyB0aGUKKyAgICAgICAgICBjb2RlIGJlbG93
IHRoZSBjb21tZW50IG9uIHRoZSBncm91bmRzIHRoYXQgaXQgd2FzIHdyaXR0ZW4gaW4gYSB3ZWly
ZCB3YXkgdG8gcGxhY2F0ZQorICAgICAgICAgIExMVk0gYW5kIHNvIHdlIGNhbiBkbyBpdCBiZXR0
ZXIgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxl
VGltZVN0YXRzKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
VW5pZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpmdGxV
bnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Okxvd2Vy
REZHVG9CMyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0
aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6aXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6dW5ib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6bG93ZXJERkdUb0IzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhOZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlT3ZlcnJpZGVzSGFzSW5z
dGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06
OmlzQm9vbGVhbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6dW5ib3hCb29sZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpsb3dlckRGR1RvTExWTSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmguCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFdlaWdodC5oOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdo
dDo6ZnJlcXVlbmN5Q2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdodDo6aW52ZXJzZSk6
CisgICAgICAgIChKU0M6OkZUTDo6V2VpZ2h0OjpzY2FsZVRvVG90YWwpOiBEZWxldGVkLgorICAg
ICAgICAqIGZ0bC9GVExXZWlnaHRlZFRhcmdldC5oOgorICAgICAgICAoSlNDOjpGVEw6OnJhcmVs
eSk6CisgICAgICAgIChKU0M6OkZUTDo6dW5zdXJlKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbHZtOiBSZW1v
dmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
bGx2bS9saWJyYXJ5OiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9MTFZNVHJhcENh
bGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L2xpYmxsdm1Gb3JKU0Mu
dmVyc2lvbjogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oLgorICAgICAgICAq
IHdhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorCiAyMDE2LTAyLTE3ICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFSTTY0OiBTdXBwb3J0
IHRoZSBpbW1lZGlhdGUgZm9ybWF0IHVzZWQgZm9yIGJpdCBvcGVyYXRpb25zIGluIEFpcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk2NzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE2LDcgKzEwMTYsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExMYXp5
U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9j
YXRpb24uY3BwCi0gICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKKyAgICAgICAgZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAg
ICBmdGwvRlRMT1NSRXhpdC5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY3NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMyLDggKzczMiw4IEBACiAJCTBGRUEwQTBDMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEw
QTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJ
VENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgKi87IH07Ci0JCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRG
R1RvTExWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0IzLmNwcCAqLzsgfTsKKwkJMEZFQTBBMTAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9CMy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTEyMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMTYx
NzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0
ZS5jcHAgKi87IH07CiAJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhl
YXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
QTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi87IH07CkBAIC0x
Mjk2LDcgKzEyOTYsNyBAQAogCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBGQjQgLyogV0FTTU1vZHVs
ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0IzOUY3NkExQjYyREUyMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjM5Rjc3MDFCNjJERTMy
MDAzNjBGQjQgLyogV0FTTVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjM5Rjc3
MjFCNjM1NzREMDAzNjBGQjQgLyogV0FTTVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQgLyogV0FT
TVJlYWRlci5jcHAgKi87IH07Ci0JCTdCODMyOUJGMUJCMjFGRTMwMDY0OUE2RSAvKiBXQVNNRnVu
Y3Rpb25MTFZNSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25MTFZN
SVJHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uQjNJUkdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I4
MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Qjk4RDEzNjFC
NjBDRDVGMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dB
U01Nb2R1bGUuY3BwICovOyB9OwogCQk3Qjk4RDEzNzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNN
TW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5
QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4ODYsOCArMjg4
Niw4IEBACiAJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTENvbXBpbGUuaDsgcGF0aCA9IGZ0bC9GVExD
b21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAyMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEpJVENvZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklU
Q29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKSVRDb2RlLmg7IHBh
dGggPSBmdGwvRlRMSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVB
MEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG93ZXJERkdUb0xMVk0uY3BwOyBwYXRoID0g
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvd2VyREZHVG9MTFZNLmg7IHBhdGggPSBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBB
MDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb3dlckRGR1RvQjMuY3BwOyBwYXRoID0gZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTA1
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMTG93ZXJERkdUb0IzLmg7IHBhdGggPSBmdGwvRlRMTG93ZXJERkdU
b0IzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTA3MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExT
dGF0ZS5oOyBwYXRoID0gZnRsL0ZUTFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGF0ZS5jcHA7IHBhdGggPSBmdGwvRlRMU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEExNzE3MDhCMDA3MDBC
QjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTEFic3RyYWN0SGVhcC5jcHA7IHBhdGggPSBmdGwvRlRMQWJzdHJhY3RIZWFw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NDksNyArMzQ0OSw3IEBACiAJ
CTdCMzlGNzZBMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQgLyogV0FTTVJl
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNUmVhZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5
QTZFIC8qIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlv
bkIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1
bmN0aW9uQjNJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjk4
RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXQVNNTW9kdWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9y
bWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Gb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NTUsOCArNDU1NSw4IEBACiAJCQkJMEY4RjJC
OTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLywKIAkJCQkwRkNFRkFERDE4MDczOEMw
MDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovLAogCQkJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oICovLAotCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAv
KiBGVExMb3dlckRGR1RvTExWTS5jcHAgKi8sCi0JCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8sCisJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi8sCisJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9CMy5oICovLAogCQkJCUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAv
KiBGVExMb3dlcmVkTm9kZVZhbHVlLmggKi8sCiAJCQkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExPcGVyYXRpb25zLmggKi8sCkBAIC01Mzc0LDcgKzUzNzQsNyBAQAogCQkJCTdCMDI0NzUy
MUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggKi8sCiAJCQkJN0JDNTQ3RDIxQjY5
NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKIAkJCQk3QjJFMDEwRDFCOTdBQTU4MDBF
RjVENUMgLyogV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaCAqLywKLQkJCQk3QjgzMjlCRTFCQjIxRkQx
MDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmggKi8sCisJCQkJN0I4MzI5
QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCAqLywKIAkJ
CQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLywK
IAkJCQk3QjAyNDc1NDFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8s
CiAJCQkJN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNr
ZXIuaCAqLywKQEAgLTczNTQsNyArNzM1NCw3IEBACiAJCQkJMEZCNEZCNzUxQkM4NDMxNDAwMjVD
QTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2
MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFF
MDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQTBBMTAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlEMDIxN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWRO
b2RlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxMDFCRjAyNzZDMDAx
M0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTc5OTEsNyArNzk5
MSw3IEBACiAJCQkJN0IwMjQ3NTUxQjg2ODJERDAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjJFMDEwRTFCOTdBQTY5MDBFRjVENUMgLyogV0FTTUZ1
bmN0aW9uQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCODMyOUJGMUJCMjFGRTMwMDY0
OUE2RSAvKiBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdCODMyOUJGMUJCMjFGRTMwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1NzFCODY4MkU0MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIg
LyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3
MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC04ODgwLDcgKzg4ODAsNyBAQAogCQkJCTBGQjRGQjczMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExM
YXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RC
REE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGRUEwQTBGMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDcgKzQyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3IgQ2xvbmVkQXJndW1l
bnRzLCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSBhIHNlcGFyYXRlIGJvdW5kcyBjaGVjay4K
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgY2F1c2UgdXMgdG8gaGF2ZSB0
d28gYm91bmRzIGNoZWNrcyAtIHRoZSBvcmlnaW5hbCBvbmUgdGhhdCB3ZQogICAgICAgICAgICAg
ICAgICAgICAvLyBhbHJlYWR5IGZhY3RvcmVkIG91dCBpbiBTU0FMb3dlcmluZ1BoYXNlLCBhbmQg
dGhlIG5ldyBvbmUgd2UgaW5zZXJ0IGhlcmUsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgICAg
IC8vIG9mdGVuIGltcGxpY2l0bHkgcGFydCBvZiBHZXRNeUFyZ3VtZW50QnlWYWwuIExMVk0gd2ls
bCBwcm9iYWJseSBlbGltaW5hdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mdGVuIGlt
cGxpY2l0bHkgcGFydCBvZiBHZXRNeUFyZ3VtZW50QnlWYWwuIEIzIHdpbGwgcHJvYmFibHkgZWxp
bWluYXRlIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgYm91bmRzIGNoZWNrLCBi
dXQgc3RpbGwgLSB0aGF0J3MganVzdCBzaWxseS4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3NgogICAgICAgICAgICAg
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxOTY3NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHcmFwaDsKIAogLy8g
Q29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyBp
cyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQogLy8gb3ZlciBNb3ZIaW50cyBhbmQgU2V0
TG9jYWxzLiBUaGlzIGFuYWx5c2lzIGlzIHJ1biBkaXJlY3RseSBieSB0aGUgUGxhbiBmb3IgcHJl
cGFyaW5nIGZvcgotLy8gbG93ZXJpbmcgdG8gTExWTSBJUiwgYnV0IGl0IGNhbiBhbHNvIGJlIHVz
ZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1biBpdCBiZWZvcmUKKy8vIGxvd2Vy
aW5nIHRvIEIzIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUg
dGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQogLy8gc3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZs
dXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQg
d2lsbAogLy8gdGVsbCB5b3UgdGhlIGZvcm1hdC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAjaW5j
bHVkZSAiRlRMQ29tcGlsZS5oIgogI2luY2x1ZGUgIkZUTEZhaWwuaCIKICNpbmNsdWRlICJGVExM
aW5rLmgiCi0jaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xMVk0uaCIKKyNpbmNsdWRlICJGVExMb3dl
ckRGR1RvQjMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2VuZGlmCiAKQEAgLTk4LDcgKzk4
LDcgQEAgbmFtZXNwYWNlIHsKIGRvdWJsZSB0b3RhbERGR0NvbXBpbGVUaW1lOwogZG91YmxlIHRv
dGFsRlRMQ29tcGlsZVRpbWU7CiBkb3VibGUgdG90YWxGVExERkdDb21waWxlVGltZTsKLWRvdWJs
ZSB0b3RhbEZUTExMVk1Db21waWxlVGltZTsKK2RvdWJsZSB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7
CiAKIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4
dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxzZSkKIHsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFBs
YW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAgICAgICAgIGlmIChpc0ZUTChtb2Rl
KSkgewogICAgICAgICAgICAgdG90YWxGVExDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsK
ICAgICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0g
YmVmb3JlOwotICAgICAgICAgICAgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBt
X3RpbWVCZWZvcmVGVEw7CisgICAgICAgICAgICB0b3RhbEZUTEIzQ29tcGlsZVRpbWUgKz0gYWZ0
ZXIgLSBtX3RpbWVCZWZvcmVGVEw7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdG90YWxE
RkdDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKICAgICB9CkBAIC00NjMsMTIgKzQ2Mywx
MiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAg
ICByZXR1cm4gQ2FuY2VsUGF0aDsKIAogICAgICAgICBGVEw6OlN0YXRlIHN0YXRlKGRmZyk7Ci0g
ICAgICAgIEZUTDo6bG93ZXJERkdUb0xMVk0oc3RhdGUpOworICAgICAgICBGVEw6Omxvd2VyREZH
VG9CMyhzdGF0ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY29tcHV0ZUNvbXBpbGVUaW1lcygp
KQogICAgICAgICAgICAgbV90aW1lQmVmb3JlRlRMID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lTVMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNC
ZWZvcmVDb21waWxlKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmIzQWx3YXlzRmFpbHNCZWZv
cmVDb21waWxlKCkpIHsKICAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgaWYgKHNhZmVwb2ludFJl
c3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBDYW5jZWxQYXRoOwog
ICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmso
KSkgeworICAgICAgICBpZiAoT3B0aW9uczo6YjNBbHdheXNGYWlsc0JlZm9yZUxpbmsoKSkgewog
ICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiBGVExQYXRo
OwogICAgICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgSGFzaE1hcDxDU3RyaW5nLCBkb3VibGU+
IFBsYW46OmNvbXBpbGVUaQogICAgICAgICByZXN1bHQuYWRkKCJERkcgQ29tcGlsZSBUaW1lIiwg
dG90YWxERkdDb21waWxlVGltZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCBDb21waWxlIFRp
bWUiLCB0b3RhbEZUTENvbXBpbGVUaW1lKTsKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChERkcp
IENvbXBpbGUgVGltZSIsIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUpOwotICAgICAgICByZXN1bHQu
YWRkKCJGVEwgKEIzKSBDb21waWxlIFRpbWUiLCB0b3RhbEZUTExMVk1Db21waWxlVGltZSk7Cisg
ICAgICAgIHJlc3VsdC5hZGQoIkZUTCAoQjMpIENvbXBpbGUgVGltZSIsIHRvdGFsRlRMQjNDb21w
aWxlVGltZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICAvLyBmb3Igc3Vua2VuIFB1dFN0YWNrcyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50
ZXJlc3RpbmcgY29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQogICAgICAgICAvLyB2
YWx1ZSBiZWluZyBQdXRTdGFjaydkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBj
b2RlLiBXZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGlzCiAgICAgICAgIC8vIGJ5IGRvaW5nIHRoZSBz
aW5raW5nIG92ZXIgQ1BTLCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBzbWFydCBob2lz
dGluZy4gSXQncyBhbHNvCi0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQ
aGkgZ3JhcGggY2FuIGJlIGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBiZSBiZXN0IGlm
IHdlCisgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQaGkgZ3JhcGggY2Fu
IGJlIGRlZHVwbGljYXRlZCBieSBCMy4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQogICAgICAgICAv
LyBjb3VsZCBvYnNlcnZlIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSBncmFwaCBpbiBwbGFj
ZSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBJbgogICAgICAgICAvLyBwcmluY2lwbGUgaWYgd2Ug
aGF2ZSBhIHJlcXVlc3QgdG8gcGxhY2UgYSBQaGkgYXQgYSBwYXJ0aWN1bGFyIHBsYWNlLCB3ZSBj
b3VsZCBqdXN0IGNoZWNrCiAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgdGhh
dCBkb2VzIHdoYXQgd2Ugd2FudC4gQmVjYXVzZSBQdXRTdGFja1NpbmtpbmdQaGFzZSBydW5zIGp1
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDYg
QEAgY2xhc3MgR3JhcGg7CiAvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29y
IGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKIC8vICAgdXBkYXRlZCkuCiAvLwotLy8gICBU
aGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZl
cmVudCBTU0EKLS8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVu
Y3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCi0vLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24t
U1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KLS8vICAgYWxsb2NhIGlu
IExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBo
aQotLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fk
cy4KLS8vCiAvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29t
ZXMgYmVmb3JlIFBoaSBpbiB0aGUKIC8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFz
ICJZIi4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaAkocmV2aXNp
b24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsNiBA
QCBjbGFzcyBHcmFwaDsKIC8vIGFiaWxpdHkgdG8gZG8gYWNjdXJhdGUgc3RhdGljIGVzdGltYXRp
b25zLiBIZW5jZSB3ZSBsb2NrIGluIHRoZSBlc3RpbWF0ZXMgZWFybHkuCiAvLyBJZGVhbGx5LCB3
ZSB3b3VsZCBoYXZlIGR5bmFtaWMgaW5mb3JtYXRpb24sIGJ1dCB3ZSBkb24ndCByaWdodCBub3cs
IHNvIHRoaXMgaXMgYXMKIC8vIGdvb2QgYXMgaXQgZ2V0cy4KLS8vCi0vLyBJdCdzIHdvcnRoIG5v
dGluZyB0aGF0IGlmIHdlIGRpZG4ndCBoYXZlIHRoaXMgcGhhc2UsIHRoZW4gdGhlIHN0YXRpYyBl
c3RpbWF0aW9uCi0vLyB3b3VsZCBiZSBwZXJmb21lZCBieSBMTFZNIGluc3RlYWQuIEl0J3Mgd29y
dGggdHJ5aW5nIHRvIG1ha2UgdGhpcyBwaGFzZSBwZXJmb3JtCi0vLyB0aGUgZXN0aW1hdGVzIHVz
aW5nIHRoZSBzYW1lIGhldXJpc3RpY3MgdGhhdCBMTFZNIHdvdWxkIHVzZS4KIAogYm9vbCBwZXJm
b3JtU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uKEdyYXBoJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Un
ZCBsaWtlIHRvIHJldmVyc2UgdGhlIG9yZGVyIG9mIHVuaWZpY2F0aW9uIGJlY2F1c2UgaXQgaGVs
cHMgdG8gcmV2ZWFsCi0gICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgYnVncyBvbiBvdXIgZW5k
LCB0aG91Z2ggaXQncyBvdGhlcndpc2Ugbm90IG9ic2VydmFibGUuIEJ1dCB3ZSBkbyBpdAotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIHdheSBiZWNhdXNlIGl0IHdvcmtzIGFyb3VuZCBhIGJ1
ZyBpbiBvcGVuIHNvdXJjZSBMTFZNJ3MgbGl2ZS1vdXRzCi0gICAgICAgICAgICAgICAgICAgIC8v
IGNvbXB1dGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmV2
ZXJzaW5nIHRoZSBvcmRlciBvZiB0aGlzIHVuaWZpY2F0aW9uLCBzaW5jZSB0aGUgb3RoZXIKKyAg
ICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgd2lsbCByZXZlYWwgbW9yZSBidWdzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzY4CiAgICAgICAgICAgICAgICAg
ICAgIHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KHBoaS0+Y2hpbGRyZW4uY2hpbGQo
Y2hpbGRJZHgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NiwxNyArNTYsMyBAQCBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsCiAKICNlbmRpZiAvLyBVU0UoQVJNNjRfRElTQVNTRU1CTEVSKQogCi0j
aWYgVVNFKExMVk1fRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjQpCi0KLSNpbmNsdWRlICJMTFZN
RGlzYXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQg
aGludCkKLXsKLSAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNp
emUsIHByZWZpeCwgb3V0LCBoaW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBVU0UoTExWTV9ESVNBU1NFTUJMRVIpICYmIENQVShBUk02NCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5j
cHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLSNp
ZiBVU0UoVURJUzg2KSB8fCAoVVNFKExMVk1fRElTQVNTRU1CTEVSKSAmJiAoQ1BVKFg4Nl82NCkg
fHwgQ1BVKFg4NikpKQorI2lmIFVTRShVRElTODYpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCkBAIC0zNSwxMyArMzUsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotLy8gVGhpcyBob3JyaWZ5aW5nIG1vbnN0ZXIgaXMgbmVlZGVkIGJl
Y2F1c2UgbmVpdGhlciBvZiBvdXIgZGlzYXNzZW1ibGVycyBzdXBwb3J0cwotLy8gYWxsIG9mIHg4
NiwgYW5kIHVzaW5nIHRoZW0gdG9nZXRoZXIgdG8gZGlzYXNzZW1ibGUgdGhlIHNhbWUgaW5zdHJ1
Y3Rpb24gc3RyZWFtCi0vLyB3b3VsZCByZXN1bHQgaW4gYSBmYWlybHkgamFycmluZyBwcmludC1v
dXQgc2luY2UgdGhleSBwcmludCBpbiBkaWZmZXJlbnQKLS8vIHN0eWxlcy4gTWF5YmUgd2UgY2Fu
IGRvIGJldHRlciBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIG5vdyB0aGUgY2FsbGVyIGhpbnRzCi0v
LyB3aGV0aGVyIGhlJ3MgdXNpbmcgdGhlIHN1YnNldCBvZiB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQg
b3VyIE1hY3JvQXNzZW1ibGVyCi0vLyBzdXBwb3J0cyAoaW4gd2hpY2ggY2FzZSB3ZSBnbyB3aXRo
IFVEaXM4Nikgb3IgaWYgaGUncyB1c2luZyB0aGUgTExWTSBzdWJzZXQuCi0KIGJvb2wgdHJ5VG9E
aXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgcmV0dXJu
IHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0KTsK
QEAgLTQ5LDUgKzQyLDUgQEAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1i
bAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIFVTRShVRElTODYpIHx8IFVTRShM
TFZNX0RJU0FTU0VNQkxFUikKKyNlbmRpZiAvLyBVU0UoVURJUzg2KQogI2VuZGlmIC8vIEVOQUJM
RShESVNBU1NFTUJMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUs
OSBAQCB2b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxpemUoQWJzCiAgICAgLy8KICAg
ICAvLyAgICBCbGFoX25lZ19BCiAgICAgLy8KLSAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNh
dXNlIExMVk0gdXNlcyB0aGUgc3RyaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZSB0eXBlcy4KKyAgICAv
LyBUaGlzIHVzZWQgdG8gYmUgaW1wb3J0YW50IGJlY2F1c2Ugd2UgdXNlZCB0byB1c2UgdGhlIHN0
cmluZyB0byBkaXN0aW5ndWlzaCB0aGUgdHlwZXMuIFRoaXMgaXMKKyAgICAvLyBub3QgcmVsZXZh
bnQgYW55bW9yZSwgYW5kIHRoaXMgY29kZSB3aWxsIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMx
OQogICAgIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuZWdTcGxpdCA9ICJfbmVnXyI7CiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHBvc1NwbGl0ID0gIl8iOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw5ICszOSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotLy8g
VGhlIEZUTCBKSVQgdHJpZXMgdG8gYWlkIExMVk0ncyBUQkFBLiBUaGUgRlRMJ3Mgbm90aW9uIG9m
IGhvdyB0aGlzCi0vLyBoYXBwZW5zIGlzIHRoZSBBYnN0cmFjdEhlYXAuIEFic3RyYWN0SGVhcHMg
YXJlIGEgc2ltcGxlIHR5cGUgc3lzdGVtCi0vLyB3aXRoIHN1Yi10eXBpbmcuCisvLyBUaGlzIGlz
IGhlcmUgYmVjYXVzZSB3ZSB1c2VkIHRvIGdlbmVyYXRlIExMVk0ncyBUQkFBLiBJbiB0aGUgZnV0
dXJlIHdlIHdpbGwgd2FudCB0byBnZW5lcmF0ZQorLy8gQjMgSGVhcFJhbmdlcyBpbnN0ZWFkLgor
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMTkK
IAogY2xhc3MgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTsKIGNsYXNzIE91dHB1dDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHJldmlzaW9u
IDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiAvLyBUaGlzIGNsYXNzIGlzIG1vc3RseSB1c2VkIGZvciBPU1I7IGl0J3Mg
YSB3YXkgb2Ygc3BlY2lmeWluZyBob3cgYSB2YWx1ZSBpcyBmb3JtYXR0ZWQKIC8vIGluIGNhc2Vz
IHdoZXJlIGl0IHdvdWxkbid0IGhhdmUgYmVlbiBvYnZpb3VzIGZyb20gbG9va2luZyBhdCBvdGhl
ciBpbmRpY2F0b3JzIChsaWtlCi0vLyB0aGUgdHlwZSBvZiB0aGUgTExWTVZhbHVlUmVmIG9yIHRo
ZSB0eXBlIG9mIHRoZSBERkc6Ok5vZGUpLiBUeXBpY2FsbHkgdGhpcyBhcmlzZXMKLS8vIGJlY2F1
c2UgTExWTVZhbHVlUmVmIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgZ3JhbnVsYXJpdHkgd2UgbmVlZCB0
byBiZWdpbiB3aXRoLCBhbmQgd2UKLS8vIHVzZSB0aGlzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhl
cmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9kZSB0aGUgdmFsdWUgY2FtZQotLy8gZnJv
bS4KKy8vIHRoZSB0eXBlIG9mIHRoZSBCMzo6VmFsdWUqIG9yIHRoZSB0eXBlIG9mIHRoZSBERkc6
Ok5vZGUpLgogCiBjbGFzcyBGb3JtYXR0ZWRWYWx1ZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgK
ICAgICAgICAgRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwg
KmVudHJ5cG9pbnRMaW5rQnVmZmVyLAotICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVu
ayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSwgZnVuY3Rpb24pKSk7CisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAl
cyB3aXRoIEIzIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rp
b24pKSk7CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKICAgICBWTSYgdm0gPSBncmFwaC5t
X3ZtOwogICAgIAotICAgIC8vIExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBh
cyBuZWVkZWQuCisgICAgLy8gQjMgd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBhcyBu
ZWVkZWQuCiAgICAgY29kZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKIAogICAgIHN0
YXRlLmppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0ID0gZ3JhcGgu
cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQg
bGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdodCBm
cm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQogICAgICAgICAv
LyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdv
b2QgdG8gZ28gLSBhdCB0aGlzCiAgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUg
c3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKLSAgICAgICAg
Ly8gY2FsbCB0byB0aGUgTExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgLy8gY2FsbCB0byB0
aGUgQjMtZ2VuZXJhdGVkIGNvZGUuCiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBtYWluUGF0aEp1bXAgPSBqaXQuanVtcCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE5Njc0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBMb2NhdGlvbjo6cmVzdG9yZUludG8oTWFj
cm9Bc3NlbWJsZQogICAgIAogICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAgY2FzZSBSZWdpc3Rl
cjoKLSAgICAgICAgLy8gTExWTSB1c2VkIHNvbWUgcmVnaXN0ZXIgdGhhdCB3ZSBkb24ndCBrbm93
IGFib3V0IQorICAgICAgICAvLyBCMyB1c2VkIHNvbWUgcmVnaXN0ZXIgdGhhdCB3ZSBkb24ndCBr
bm93IGFib3V0IQogICAgICAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgbG9jYXRpb246ICIsICp0
aGlzLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTUxLDggKzE1MSw2IEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRv
KE1hY3JvQXNzZW1ibGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFVucHJv
Y2Vzc2VkOgotICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2VlIHRoaXMgLSBpdCdzIGFuIGVudW1l
cmF0aW9uIGVudHJ5IG9uIExMVk0ncyBzaWRlIHRoYXQgbWVhbnMgdGhhdAotICAgICAgICAvLyBp
dCBoYXNuJ3QgcHJvY2Vzc2VkIHRoaXMgbG9jYXRpb24uCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAxOTY3MzEp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOjE5
NjczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIK
KyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhK
SVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKKyNp
bmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5j
bHVkZSAiREZHT1NSRXhpdEZ1enouaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMQXZhaWxh
YmxlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25UYXJnZXQuaCIKKyNpbmNsdWRl
ICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5o
IgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJGVExMb3dlcmVk
Tm9kZVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTE91
dHB1dC5oIgorI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIKKyNpbmNs
dWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5oIgorI2luY2x1
ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVEJpdEFuZEdlbmVyYXRvci5oIgor
I2luY2x1ZGUgIkpJVEJpdE9yR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUQml0WG9yR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xleGlj
YWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJh
cmdzRnJhbWUuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXRj
aGRvZy5oIgorI2luY2x1ZGUgPGF0b21pYz4KKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxk
bGZjbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNsdWRlIDx3dGYv
Qm94Lmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKK3VzaW5nIG5hbWVzcGFjZSBERkc7
CisKK25hbWVzcGFjZSB7CisKK3N0ZDo6YXRvbWljPGludD4gY29tcGlsZUNvdW50ZXI7CisKKyNp
ZiBBU1NFUlRfRElTQUJMRUQKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgZnRs
VW5yZWFjaGFibGUoKQoreworICAgIENSQVNIKCk7Cit9CisjZWxzZQorTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25lZCBub2RlSW5kZXgpCit7CisgICAg
ZGF0YUxvZygiQ3Jhc2hpbmcgaW4gdGhvdWdodC10by1iZS11bnJlYWNoYWJsZSBGVEwtZ2VuZXJh
dGVkIGNvZGUgZm9yICIsIHBvaW50ZXJEdW1wKGNvZGVCbG9jayksICIgYXQgYmFzaWMgYmxvY2sg
IyIsIGJsb2NrSW5kZXgpOworICAgIGlmIChub2RlSW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAg
IGRhdGFMb2coIiwgbm9kZSBAIiwgbm9kZUluZGV4KTsKKyAgICBkYXRhTG9nKCIuXG4iKTsKKyAg
ICBDUkFTSCgpOworfQorI2VuZGlmCisKKy8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hl
Y2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKKy8vIHNp
Z25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLX1dJVEhf
RVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBfZnRjX2xv
d1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFZGdl
IF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCA9ICh0
eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAorICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNU
eXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoKSkgXAorICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB0eXBlQ2hlY2soX2Z0Y19sb3dWYWx1ZSwgX2Z0Y19oaWdo
VmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoLCAoZmFpbENvbmRpdGlvbiksIGV4aXRLaW5k
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1Zh
bHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgXAorICAg
IEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikKKworY2xhc3MgTG93ZXJERkdU
b0xMVk0geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvd2VyREZHVG9MTFZNKTsKK3B1Ymxp
YzoKKyAgICBMb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCisgICAgICAgIDogbV9ncmFwaChz
dGF0ZS5ncmFwaCkKKyAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQorICAgICAgICAsIG1fb3V0
KHN0YXRlKQorICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAgICAgLCBtX3N0YXRl
KHN0YXRlLmdyYXBoKQorICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3Rh
dGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyKCkKKyAgICB7CisgICAgICAg
IFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICAKKyAgICAgICAgQ1N0cmluZyBu
YW1lOworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICBuYW1lID0gdG9DU3RyaW5nKAorICAgICAgICAgICAgICAgICJqc0JvZHlfIiwgKytjb21w
aWxlQ291bnRlciwgIl8iLCBjb2RlQmxvY2soKS0+aW5mZXJyZWROYW1lKCksCisgICAgICAgICAg
ICAgICAgIl8iLCBjb2RlQmxvY2soKS0+aGFzaCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBuYW1lID0gImpzQm9keSI7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmVuc3VyZURv
bWluYXRvcnMoKTsKKworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQor
ICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVhZHksIGJlZ2lubmluZyBsb3dlcmluZy5c
biIpOworCisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9oZWFwcyk7CisKKyAgICAgICAgLy8g
V2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbiBj
b2RlLgorICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CisgICAgICAgIAorICAgICAgICBt
X3Byb2xvZ3VlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQcm9sb2d1ZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc3RhY2tPdmVyZmxvdyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RhY2sg
b3ZlcmZsb3ciKSk7CisgICAgICAgIG1faGFuZGxlRXhjZXB0aW9ucyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSGFuZGxlIEV4Y2VwdGlvbnMiKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBjaGVja0FyZ3VtZW50cyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2sgYXJndW1l
bnRzIikpOworCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAg
bV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFtX2hpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1f
b3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0aW9uQ291bnQpOworICAgICAgICAg
ICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2Nr
ICIsICptX2hpZ2hCbG9jaykpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJhY2sgdG8gcHJv
bG9ndWUgZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBnZXQgc25lYWtpbHkgY3JlYXRlZCBp
biB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgc3RhY2tPdmVy
Zmxvdyk7CisgICAgICAgIG1fb3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBtX3Byb2xv
Z3VlKTsKKyAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CisKKyAgICAgICAgc2l6ZV90IHNp
emVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9j
YWw7CisgICAgICAgIEIzOjpTbG90QmFzZVZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2Nr
ZWRTdGFja1Nsb3Qoc2l6ZU9mQ2FwdHVyZWQpOworICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQu
YWRkKGNhcHR1cmVkQmFzZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKKyAg
ICAgICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKKworICAg
ICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7CisKKyAgICAg
ICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW55IGFsbG9jYSdzIGFmdGVyIHRoaXMgcG9pbnQs
IHNpbmNlIHRoZXkgd2lsbCBjZWFzZSB0bworICAgICAgICAvLyBiZSBtZW0ycmVnIGNhbmRpZGF0
ZXMuCisgICAgICAgIAorICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LmZyYW1lUG9pbnRlcigp
OworICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1i
ZXIpOworICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOworCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IEIzIGtub3dzIHRoYXQgd2UgcmVhbGx5IGNhcmUgYWJv
dXQgdGhlIG1hc2sgcmVnaXN0ZXJzLiBUaGlzIGZvcmNlcyB0aGUKKyAgICAgICAgLy8gY29uc3Rh
bnRzIHRvIGJlIG1hdGVyaWFsaXplZCBpbiByZWdpc3RlcnMuCisgICAgICAgIG1fcHJvYy5hZGRG
YXN0Q29uc3RhbnQobV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7CisgICAgICAgIG1fcHJvYy5hZGRG
YXN0Q29uc3RhbnQobV90YWdNYXNrLT5rZXkoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5z
dG9yZVB0cihtX291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSksIGFkZHJlc3NGb3IoSlNTdGFj
azo6Q29kZUJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBkaWRPdmVyZmxvd1N0YWNrKCksIHJhcmVseShzdGFja092ZXJmbG93KSwgdXN1YWxseShj
aGVja0FyZ3VtZW50cykpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RhY2tP
dmVyZmxvdywgbV9oYW5kbGVFeGNlcHRpb25zKTsKKyAgICAgICAgbV9vdXQuY2FsbChtX291dC52
b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSk7CisgICAgICAg
IG1fb3V0LnBhdGNocG9pbnQoVm9pZCktPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBhcmUgdGVybWluYWwsIHNvIHdlIGNhbiBjbG9iYmVyIGV2ZXJ5
dGhpbmcuIFRoYXQncyB3aHkgd2UgZG9uJ3QgY2xhaW0gdG8KKyAgICAgICAgICAgICAgICAvLyBj
bG9iYmVyIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LnZtKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5j
dGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hh
YmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhtX2hhbmRsZUV4Y2VwdGlv
bnMsIGNoZWNrQXJndW1lbnRzKTsKKyAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4
Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKKyAgICAgICAgbV9vdXQu
cGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZXhjZXB0aW9uSGFuZGxlcikpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tBcmd1bWVudHMs
IGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
Y2xlYXIoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7Cisg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CisgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgfQorICAgICAgICBtX25vZGUgPSBu
dWxscHRyOworICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29k
ZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dy
YXBoLm1fYXJndW1lbnRzW2ldOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8g
ZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1
bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAg
ICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24n
dCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vIHNo
b3VsZCBob2xkIHRydWUuCisgICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVudFZhbHVlcy5h
ZGQobm9kZSwganNWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgeworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUs
IGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKERGRzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikKKyAgICAgICAg
ICAgIGNvbXBpbGVCbG9jayhibG9jayk7CisKKyAgICAgICAgLy8gV2UgY3JlYXRlIGFsbCBQaGkn
cyB1cCBmcm9udCwgYnV0IHdlIG1heSB0aGVuIGRlY2lkZSBub3QgdG8gY29tcGlsZSB0aGUgYmFz
aWMgYmxvY2sKKyAgICAgICAgLy8gdGhhdCB3b3VsZCBoYXZlIGNvbnRhaW5lZCBvbmUgb2YgdGhl
bS4gU28gdGhpcyBjcmVhdGVzIG9ycGhhbnMsIHdoaWNoIHRyaWdnZXJzIEIzCisgICAgICAgIC8v
IHZhbGlkYXRpb24gZmFpbHVyZXMuIENhbGxpbmcgdGhpcyBmaXhlcyB0aGUgaXNzdWUuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGF2b2lkIHRoZSB0ZW1wdGF0
aW9uIHRvIG1ha2UgdGhpcyBjYWxsIGNvbmRpdGlvbmFsIHVwb24KKyAgICAgICAgLy8gdmFsaWRh
dGlvbiBiZWluZyBlbmFibGVkLiBCMyBtYWtlcyBubyBndWFyYW50ZWVzIG9mIGFueSBraW5kIG9m
IGNvcnJlY3RuZXNzIHdoZW4KKyAgICAgICAgLy8gZGVhbGluZyB3aXRoIElSIHRoYXQgd291bGQg
aGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4gRm9yIGV4YW1wbGUsIGl0IHdvdWxkIGJlIHZhbGlkIHRv
CisgICAgICAgIC8vIHdyaXRlIGEgQjMgcGhhc2UgdGhhdCBzbyBhZ2dyZXNzaXZlbHkgYXNzdW1l
cyB0aGUgbGFjayBvZiBvcnBoYW5zIHRoYXQgaXQgd291bGQgY3Jhc2gKKyAgICAgICAgLy8gaWYg
YW55IG9ycGhhbnMgd2VyZSBhcm91bmQuIFdlIG1pZ2h0IGV2ZW4gaGF2ZSBzdWNoIHBoYXNlcyBh
bHJlYWR5LgorICAgICAgICBtX3Byb2MuZGVsZXRlT3JwaGFucygpOworCisgICAgICAgIC8vIFdl
IHB1dCB0aGUgYmxvY2tzIGludG8gdGhlIEIzIHByb2NlZHVyZSBpbiBhIHN1cGVyIHdlaXJkIG9y
ZGVyLiBOb3cgd2UgcmVvcmRlciB0aGVtLgorICAgICAgICBtX291dC5hcHBseUJsb2NrT3JkZXIo
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBjcmVhdGVQaGlWYXJpYWJsZXMo
KQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBERkc6OkJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSAhPSBERkc6OlBoaSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdERvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmRvdWJsZVR5
cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50MzI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3Vs
dEludDUyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50NjQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xl
YW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5ib29sZWFuOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbV9waGlzLmFkZChub2RlLCBtX3Byb2MuYWRkPFZhbHVlPihCMzo6UGhpLCB0eXBlLCBPcmln
aW4obm9kZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVCbG9jayhERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGlnaEJsb2Nr
ID0gYmxvY2s7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgYmxvY2tz
IGNyZWF0ZWQgd2hpbGUgbG93ZXJpbmcgY29kZSBpbiB0aGUgaGlnaCBibG9jayBoYXZlIHRoZSBm
cmVxdWVuY3kgb2YKKyAgICAgICAgLy8gdGhlIGhpZ2ggYmxvY2suIFRoaXMgaXMgYXBwcm9wcmlh
dGUgYmVjYXVzZSBCMyBkb2Vzbid0IG5lZWQgcHJlY2lzZSBmcmVxdWVuY2llcy4gSXQganVzdCBu
ZWVkcworICAgICAgICAvLyBzb21ldGhpbmcgcm91Z2hseSBhcHByb3hpbWF0ZSBmb3IgdGhpbmdz
IGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKyAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KG1f
aGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9jayk7CisgICAgICAgIAorICAgICAg
ICBtX25leHRIaWdoQmxvY2sgPSAwOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2Nr
SW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIG1fbmV4dEhpZ2hC
bG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKG1f
bmV4dEhpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBtX25leHRMb3dCbG9jayA9IG1fbmV4dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChtX25leHRI
aWdoQmxvY2spIDogMDsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbCBvZiB0aGlzIGVmZm9ydCB0
byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGtlZXAgdGhlCisg
ICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dyYW0gb3JkZXIuIFRoaXMgb3Vn
aHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKKyAgICAgICAgLy8gb2YgdGhlIGdlbmVyYXRl
ZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVyIHRoaW5ncykgYnV0IGl0IHdp
bGwKKyAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChPcHRpb25zOjpmdGxDcmFzaGVzKCkpCisgICAgICAgICAgICBtX291dC50cmFwKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIkJhaWxpbmcgYmVjYXVzZSBDRkEgZGlkbid0IHJlYWNoLlxuIik7CisgICAgICAg
ICAgICBjcmFzaChtX2hpZ2hCbG9jay0+aW5kZXgsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9hdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLmJlZ2luQmxvY2sobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5y
ZXNldCgpOworICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKG1fbm9kZUluZGV4ID0gMDsgbV9ub2RlSW5kZXggPCBtX2hp
Z2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIWNvbXBp
bGVOb2RlKG1fbm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc2FmZWx5SW52YWxpZGF0ZUFmdGVyVGVybWluYXRpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkJhaWxpbmcuXG4iKTsKKyAgICAgICAgY3Jhc2goKTsKKworICAgICAgICAvLyBJ
bnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHdl
IHdvdWxkIGV4cGVjdAorICAgICAgICAvLyB0aGVtIHRvIGJlIGludmFsaWRhdGVkIGFscmVhZHku
IEJ1dCB5b3UgY2FuIGhhdmUgdGhlIENGQSBiZWNvbWUgbW9yZQorICAgICAgICAvLyBwcmVjaXNl
IG92ZXIgdGltZSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIG9mIG9iamVjdHMgY2hhbmdlIG9uIHRo
ZSBtYWluCisgICAgICAgIC8vIHRocmVhZC4gRmFpbGluZyB0byBkbyB0aGlzIHdvdWxkIHJlc3Vs
dCBpbiB3ZWlyZCBjcmFzaGVzIGR1ZSB0byBhIHZhbHVlCisgICAgICAgIC8vIGJlaW5nIHVzZWQg
YnV0IG5vdCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRXIQorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogdGFyZ2V0ID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghdGFyZ2V0KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobV9o
aWdoQmxvY2ssIHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCbG9jayAiLCAqdGFy
Z2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7CisgICAgICAgICAgICAgICAgdGFyZ2V0LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRl
clRlcm1pbmF0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICBtX29yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOworICAgICAgICBtX291dC5zZXRPcmlnaW4o
bV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsKKyAgICAgICAg
CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgREZHOjpVcHNpbG9uOgor
ICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERGRzo6UGhpOgorICAgICAgICAgICAgY29tcGlsZVBoaSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgorICAgICAgICAgICAgY29tcGlsZURvdWJsZUNvbnN0
YW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50Ogor
ICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERvdWJsZVJlcDoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVSZXAoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAg
ICAgICBjb21waWxlRG91YmxlQXNJbnQzMigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgREZHOjpWYWx1ZVJlcDoKKyAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVJlcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NTJSZXA6CisgICAgICAgICAgICBjb21w
aWxlSW50NTJSZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjoKKyAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVRvSW50MzIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVC
b29sZWFuVG9OdW1iZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgorICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2Fs
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRTdGFjaygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0U3RhY2s6CisgICAgICAgICAgICBjb21waWxlUHV0U3RhY2soKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERGRzo6Q2hlY2s6CisgICAgICAgICAgICBjb21waWxlTm9PcCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVG9UaGlzOgorICAgICAgICAgICAg
Y29tcGlsZVRvVGhpcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVB
ZGQ6CisgICAgICAgICAgICBjb21waWxlVmFsdWVBZGQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgICAgIGNvbXBpbGVTdHJDYXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRo
U3ViOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQWRkT3JTdWIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFyaXRoQ2x6MzI6CisgICAgICAgICAgICBjb21waWxlQXJpdGhD
bHozMigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAg
ICAgICAgICBjb21waWxlQXJpdGhNdWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFyaXRoRGl2OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoRGl2KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0
aE1vZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAg
ICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgICAgICBjb21waWxlQXJpdGhNaW5Pck1heCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAgICBj
b21waWxlQXJpdGhBYnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRo
U2luOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoU2luKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcml0aENvczoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aENvcygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgICAgICBj
b21waWxlQXJpdGhQb3coKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRo
UmFuZG9tOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUmFuZG9tKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAgICAgICAgY29tcGlsZUFyaXRo
Um91bmQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAg
ICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFyaXRoTG9nOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoTG9nKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aEZSb3VuZDoKKyAgICAgICAgICAgIGNvbXBp
bGVBcml0aEZSb3VuZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhO
ZWdhdGU6CisgICAgICAgICAgICBjb21waWxlQXJpdGhOZWdhdGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0QW5kOgorICAgICAgICAgICAgY29tcGlsZUJpdEFu
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpCaXRPcjoKKyAgICAg
ICAgICAgIGNvbXBpbGVCaXRPcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
REZHOjpCaXRYb3I6CisgICAgICAgICAgICBjb21waWxlQml0WG9yKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgICAgICBjb21waWxlQml0UlNo
aWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAg
ICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJpdFVSU2hpZnQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAg
Y29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tDZWxsOgorICAgICAgICAgICAg
Y29tcGlsZUNoZWNrQ2VsbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hl
Y2tOb3RFbXB0eToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja05vdEVtcHR5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja0JhZENlbGw6CisgICAgICAgICAgICBjb21w
aWxlQ2hlY2tCYWRDZWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVj
a0lkZW50OgorICAgICAgICAgICAgY29tcGlsZUNoZWNrSWRlbnQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldEV4ZWN1dGFibGU6CisgICAgICAgICAgICBjb21waWxlR2V0
RXhlY3V0YWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBjb21waWxlUHV0U3RydWN0dXJlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeUlkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbjoKKyAgICAg
ICAgICAgIGNvbXBpbGVJbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0
QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5SWRG
bHVzaDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeUlkKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgorICAgICAgICBjYXNlIFB1dFNldHRlckJ5SWQ6
CisgICAgICAgICAgICBjb21waWxlUHV0QWNjZXNzb3JCeUlkKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlkOgorICAgICAgICAgICAgY29tcGls
ZVB1dEdldHRlclNldHRlckJ5SWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEdldHRlckJ5VmFsOgorICAgICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOgorICAgICAgICAg
ICAgY29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5Ogor
ICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICAgICAg
Y29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjb21waWxl
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0FycmF5KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAg
IGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ2hlY2tJbkJvdW5kczoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0luQm91bmRzKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgY29tcGlsZUFycmF5UHVzaCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgICAgICBjb21waWxlQXJyYXlQb3Ao
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Cisg
ICAgICAgICAgICBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlv
bjoKKyAgICAgICAgY2FzZSBOZXdHZW5lcmF0b3JGdW5jdGlvbjoKKyAgICAgICAgICAgIGNvbXBp
bGVOZXdGdW5jdGlvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRl
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50
cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1l
bnRzOgorICAgICAgICAgICAgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cygpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgorICAgICAg
ICAgICAgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU5ld09iamVjdCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlTmV3QXJyYXkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d0FycmF5QnVmZmVyOgorICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5QnVmZmVyKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAgICAgICAg
ICAgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlTmV3VHlwZWRBcnJheSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICAgICAgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAg
ICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICBjYXNlIENhbGxTdHJpbmdDb25zdHJ1
Y3RvcjoKKyAgICAgICAgICAgIGNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVjdG9y
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZToKKyAgICAg
ICAgICAgIGNvbXBpbGVUb1ByaW1pdGl2ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjb21waWxlTWFrZVJvcGUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgICAgIGNvbXBp
bGVTdHJpbmdDaGFyQXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgICAg
ICAgICAgY29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRHZXR0
ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldFNldHRlcjoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlTXVsdGlQdXRCeU9m
ZnNldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgor
ICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRHbG9iYWxWYXJpYWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0R2xvYmFsVmFyaWFibGU6CisgICAgICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyaWFibGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgICAg
ICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHZXRDYWxsZWU6CisgICAgICAgICAgICBjb21waWxlR2V0Q2FsbGVlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50OgorICAgICAgICAgICAg
Y29tcGlsZUdldEFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdldFNjb3BlOgorICAgICAgICAgICAgY29tcGlsZUdldFNjb3BlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgICAgICAgICBjb21waWxlU2tp
cFNjb3BlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFy
OgorICAgICAgICAgICAgY29tcGlsZUdldENsb3N1cmVWYXIoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgICAgICBjb21waWxlUHV0Q2xv
c3VyZVZhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3Vt
ZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRGcm9tQXJndW1lbnRzKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRUb0FyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVFcSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICAgICAgY29tcGlsZUNv
bXBhcmVTdHJpY3RFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgICAgICBjb21waWxlQ29tcGFyZUxlc3MoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgICAgICBjb21waWxlQ29t
cGFyZUxlc3NFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CisgICAgICAgICAgICBjb21waWxlQ29tcGFyZUdyZWF0ZXIoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgICAgICBjb21w
aWxlQ29tcGFyZUdyZWF0ZXJFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TG9naWNhbE5vdDoKKyAgICAgICAgICAgIGNvbXBpbGVMb2dpY2FsTm90KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5l
ZENhbGxlcjoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICBjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bDoKKyAgICAgICAgICAgIGNvbXBpbGVUYWlsQ2FsbCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAg
IGNvbXBpbGVMb2FkVmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAgICAgIGNv
bXBpbGVKdW1wKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OkJyYW5j
aDoKKyAgICAgICAgICAgIGNvbXBpbGVCcmFuY2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERGRzo6U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZVN3aXRjaCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpSZXR1cm46CisgICAgICAgICAgICBj
b21waWxlUmV0dXJuKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CisgICAgICAgICAgICBjb21waWxlRm9yY2VPU1JFeGl0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUaHJvdzoKKyAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgorICAgICAgICAgICAgY29tcGlsZVRocm93KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgICAgIGNvbXBpbGVJbnZhbGlk
YXRpb25Qb2ludCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNVbmRlZmlu
ZWQ6CisgICAgICAgICAgICBjb21waWxlSXNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIElzQm9vbGVhbjoKKyAgICAgICAgICAgIGNvbXBpbGVJc0Jvb2xlYW4o
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTnVtYmVyOgorICAgICAgICAg
ICAgY29tcGlsZUlzTnVtYmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
c1N0cmluZzoKKyAgICAgICAgICAgIGNvbXBpbGVJc1N0cmluZygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgICAgICBjb21waWxlSXNPYmplY3Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgorICAg
ICAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICAgICAgY29tcGlsZUlzRnVuY3Rpb24oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgICAgIGNv
bXBpbGVUeXBlT2YoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrVHlw
ZUluZm9GbGFnczoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1R5cGVJbmZvRmxhZ3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3RhbmNlOgorICAg
ICAgICAgICAgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICAgICAgY29tcGlsZUluc3RhbmNl
T2YoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206
CisgICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZkN1c3RvbSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgICAgICAgICBjb21waWxlQ291
bnRFeGVjdXRpb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlQmFy
cmllcjoKKyAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVy
dHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3Bl
cnR5OgorICAgICAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKKyAgICAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RQbmFtZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVu
Z3RoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1l
cmF0b3I6CisgICAgICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6
CisgICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgor
ICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgICAgICAgICBjb21w
aWxlVG9JbmRleFN0cmluZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJ
bW1lZGlhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b246CisgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb3B5UmVzdDoKKyAgICAgICAgICAgIGNvbXBpbGVDb3B5UmVzdCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhpdE9L
OgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKKyAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Cisg
ICAgICAgIGNhc2UgUHV0SGludDoKKyAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAg
Y2FzZSBLaWxsU3RhY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29nbml6ZWQgbm9kZSBp
biBGVEwgYmFja2VuZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX25vZGUtPmlzVGVybWluYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0
b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZm
ZWN0cyhub2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisgICAgeworICAgICAgICBMVmFsdWUgdXBzaWxv
blZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgICAgIHVwc2lsb25W
YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAg
ICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgdXBz
aWxvblZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEtub3duQm9vbGVhblVz
ZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBj
YXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdXBzaWxvbiA9IG1fb3V0
LmFuY2hvcih1cHNpbG9uVmFsdWUpOworICAgICAgICBMVmFsdWUgcGhpTm9kZSA9IG1fcGhpcy5n
ZXQobV9ub2RlLT5waGkoKSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocGhpTm9k
ZSwgdXBzaWxvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVBoaSgpCisgICAgewor
ICAgICAgICBMVmFsdWUgcGhpID0gbV9waGlzLmdldChtX25vZGUpOworICAgICAgICBtX291dC5t
X2Jsb2NrLT5hcHBlbmQocGhpKTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdERvdWJsZToKKyAgICAg
ICAgICAgIHNldERvdWJsZShwaGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgc2V0SW50MzIocGhpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1MjoKKyAgICAgICAgICAgIHNldElu
dDUyKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9v
bGVhbjoKKyAgICAgICAgICAgIHNldEJvb2xlYW4ocGhpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgIHNldEpTVmFsdWUocGhpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRG91YmxlQ29uc3RhbnQo
KQorICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKG1fbm9kZS0+YXNO
dW1iZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnQ1MkNvbnN0YW50KCkK
KyAgICB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBtX25vZGUtPmFzTWFjaGluZUludCgpOwor
ICAgICAgICAKKyAgICAgICAgc2V0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSA8PCBKU1Zh
bHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7CisgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LmNv
bnN0SW50NjQodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVSZXAoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gdW5ib3hEb3VibGUo
dmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgUmVhbE51bWJlclVzZSBpbnQgY2FzZSIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiRG91YmxlUmVwIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihkb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAgICAgICB1c3Vh
bGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3Bl
Y0J5dGVjb2RlUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91YmxlKSk7CisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmludFRv
RG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZToKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkQ29udmVydE5vbk51bWJlciA9IG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE5v
dENlbGxVc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNW
YWx1ZVRvRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91Ymxl
IHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgZG91
YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub25Eb3VibGVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyB1bmRlZmluZWQgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlz
Tm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShkb3VibGVUZXN0aW5nKSwgdW5zdXJlKGludENhc2UpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
bnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2YWx1ZSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWVJ
c051bWJlciA9IGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVtYmVyLCB1c3VhbGx5KGRvdWJsZUNh
c2UpLCByYXJlbHkobm9uRG91YmxlQ2FzZSkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhkb3VibGVDYXNlLCBub25Eb3VibGVDYXNlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hEb3VibGUodmFsdWUpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgaWYgKHNob3Vs
ZENvbnZlcnROb25OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmlu
ZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydGlu
ZyB1bmRlZmluZWQgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB0ZXN0TnVs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIG51
bGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBudWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgbnVsbCBjYXNlIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3RCb29sZWFuVHJ1ZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGJvb2xlYW4gdHJ1ZSBj
YXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuVHJ1ZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xl
YW4gdHJ1ZSBjYXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29s
ZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29u
dmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub25Eb3VibGVDYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWVJc1VuZGVmaW5lZCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0
KFZhbHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNV
bmRlZmluZWQsIHVuc3VyZSh1bmRlZmluZWRDYXNlKSwgdW5zdXJlKHRlc3ROdWxsQ2FzZSkpOwor
CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2FzZSwgdGVzdE51bGxD
YXNlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRVbmRlZmluZWQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHRlc3ROdWxsQ2FzZSwgbnVsbENhc2UpOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVsbCwgdW5zdXJlKG51bGxD
YXNlKSwgdW5zdXJlKHRlc3RCb29sZWFuVHJ1ZUNhc2UpKTsKKworICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWROdWxsID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNv
bnN0RG91YmxlKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0Qm9vbGVhblRydWVDYXNlLCBj
b252ZXJ0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc0Jv
b2xlYW5UcnVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVl
KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNCb29sZWFuVHJ1ZSwgdW5z
dXJlKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUoY29udmVydEJvb2xlYW5GYWxzZUNh
c2UpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZlcnRCb29sZWFuVHJ1
ZUNhc2UsIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBjb252ZXJ0ZWRUcnVlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDEp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSwgY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlID0g
bV9vdXQubm90RXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOworICAg
ICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+
Y2hpbGQxKCksIH5TcGVjQ2VsbCwgdmFsdWVJc05vdEJvb2xlYW5GYWxzZSk7CisgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2UgPSBtX291dC5hbmNob3IobV9vdXQu
Y29uc3REb3VibGUoMCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCwgY29udmVy
dGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFsc2UpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25E
b3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBt
X291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJs
ZSwgdW5ib3hlZERvdWJsZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAgc2V0RG91
YmxlKHN0cmljdEludDUyVG9Eb3VibGUobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVz
ZSBraW5kIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVBc0lu
dDMyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBjb252ZXJ0RG91Ymxl
VG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIHNob3VsZENoZWNrTmVnYXRpdmVa
ZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgc2V0SW50MzIoaW50ZWdlclZhbHVl
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVWYWx1ZVJlcCgpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgRG91Ymxl
UmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVjRG91YmxlSW1wdXJlTmFOKSkgewor
ICAgICAgICAgICAgICAgIHZhbHVlID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVFcXVhbCh2YWx1ZSwgdmFsdWUpLCB2YWx1ZSwgbV9vdXQuY29uc3REb3Vi
bGUoUE5hTikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGJveERvdWJsZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAg
c2V0SlNWYWx1ZShzdHJpY3RJbnQ1MlRvSlNWYWx1ZShsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNo
aWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVJbnQ1MlJlcCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBzZXRTdHJpY3RJ
bnQ1MihtX291dC5zaWduRXh0MzJUbzY0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNYWNoaW5lSW50
VXNlOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAganNWYWx1
ZVRvU3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVw
TWFjaGluZUludFVzZToKKyAgICAgICAgICAgIHNldFN0cmljdEludDUyKAorICAgICAgICAgICAg
ICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hp
bGQxKCksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVZhbHVlVG9JbnQzMigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgp
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6CisgICAgICAgICAgICBzZXRJbnQzMihkb3VibGVUb0ludDMyKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIGNhc2UgTm90Q2VsbFVzZTogeworICAgICAg
ICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG1fbm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIHNldEludDMyKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobnVtYmVyT3JO
b3RDZWxsVG9JbnQzMihtX25vZGUtPmNoaWxkMSgpLCB2YWx1ZS52YWx1ZSgpKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFdlJ2xsIGJhc2ljYWxseSBqdXN0IGdldCBoZXJlIGZvciBjb25zdGFudHMuIEJ1dCBpdCdz
IGdvb2QgdG8gaGF2ZSB0aGlzCisgICAgICAgICAgICAvLyBjYXRjaC1hbGwgc2luY2Ugd2Ugb2Z0
ZW4gYWRkIG5ldyByZXByZXNlbnRhdGlvbnMgaW50byB0aGUgbWl4LgorICAgICAgICAgICAgc2V0
SW50MzIoCisgICAgICAgICAgICAgICAgbnVtYmVyT3JOb3RDZWxsVG9JbnQzMigKKyAgICAgICAg
ICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwKKyAgICAgICAgICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVCb29sZWFuVG9OdW1iZXIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAgICAgICAg
ICAgIHNldEludDMyKG1fb3V0Lnplcm9FeHQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwg
bV9vdXQuaW50MzIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNCb29sSW50MzIgfCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRBbmQobV9vdXQuY2FzdFRvSW50MzIodmFsdWUpLCBtX291dC5pbnQzMk9uZSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkJvb2xlYW5Ub051bWJlciBib29sZWFuIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xlYW5Ub051bWJlciBj
b250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5vdEJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZSht
X25vZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGJvb2xlYW5DYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYm9vbGVhblJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KHVuYm94Qm9vbGVh
bih2YWx1ZSksIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKSk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIGJvb2xlYW5SZXN1bHQsIG5vdEJvb2xlYW5SZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRXh0
cmFjdE9TUkVudHJ5TG9jYWwoKQorICAgIHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7
CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciAr
IG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0U3RhY2soKQorICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNl
IG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgYXJndW1lbnRzLiBGb3IgYXJndW1lbnRz
LCB3ZSBtaWdodCBoYXZlCisgICAgICAgIC8vIGFscmVhZHkgbG9hZGVkIGl0LgorICAgICAgICBp
ZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRBcmd1bWVudFZhbHVlcy5nZXQobV9ub2RlKSkgewor
ICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgCisgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCkpOworICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS0+Zm9ybWF0ICE9IEZsdXNoZWRE
b3VibGUpOyAvLyBUaGlzIGp1c3QgaGFwcGVucyB0byBub3QgYXJpc2UgZm9yIEdldFN0YWNrcywg
cmlnaHQgbm93LiBJdCB3b3VsZCBiZSB0cml2aWFsIHRvIHN1cHBvcnQuCisgICAgICAgIAorICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3NG
b3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQ
dXRTdGFjaygpCisgICAgeworICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOworICAgICAgICBzd2l0Y2ggKGRhdGEtPmZvcm1hdCkgeworICAg
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2
YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5t
YWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUz
Mih2YWx1ZSwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6
IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFs
dWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU5vT3AoKQorICAgIHsK
KyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCBzcGVjdWxh
dGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb1RoaXMoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlRvVGhpcyBpcyBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgc2xvdyBjYXNlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvVGhpcyBjb250
aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1c3VhbGx5KGlz
Q2VsbENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgc2xvd0Nhc2UpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZhbHVlKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzVHlwZSh2YWx1ZSwgRmluYWxPYmplY3RUeXBlKSwgdXN1YWxs
eShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBKX0pJVE9wZXJh
dGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9u
VG9UaGlzU3RyaWN0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJh
dGlvblRvVGhpczsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKGZ1
bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFz
dFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVWYWx1
ZUFkZCgpCisgICAgeworICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRBZGRHZW5lcmF0b3I+
KG9wZXJhdGlvblZhbHVlQWRkKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlU3RyQ2F0
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgIGlmIChtX25vZGUtPmNo
aWxkMygpKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAg
bV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQzKSwgbV9jYWxsRnJh
bWUsCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MiksIG1fY2Fs
bEZyYW1lLAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJp
dGhBZGRPclN1YigpCisgICAgeworICAgICAgICBib29sIGlzU3ViID0gIG1fbm9kZS0+b3AoKSA9
PSBBcml0aFN1YjsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVy
ZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIHNldEludDMyKGlz
U3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDaGVj
a1ZhbHVlKiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRl
U3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vcmlnaW4pOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogeworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
LmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikKKyAgICAgICAgICAgICAgICAmJiAhYWJzdHJhY3RWYWx1
ZShtX25vZGUtPmNoaWxkMigpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7CisgICAgICAgICAg
ICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dX
aGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKKyAgICAgICAgICAgICAgICBM
VmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBraW5kKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQ1Mihpc1N1YiA/IG1fb3V0LnN1YihsZWZ0LCByaWdodCkgOiBtX291dC5h
ZGQobGVmdCwgcmlnaHQpLCBraW5kKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBp
c1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVjdWxhdGVB
ZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIHNldElu
dDUyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgQzEgPSBs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgQzIgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/
IG1fb3V0LmRvdWJsZVN1YihDMSwgQzIpIDogbV9vdXQuZG91YmxlQWRkKEMxLCBDMikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsK
KyAgICAgICAgICAgIGlmICghaXNTdWIpIHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVFN1YkdlbmVy
YXRvcj4ob3BlcmF0aW9uVmFsdWVTdWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aENsejMyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBv
cGVyYW5kID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNldEludDMyKG1f
b3V0LmN0bHozMihvcGVyYW5kKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFyaXRo
TXVsKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0OworCisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5h
cml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubXVsKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIHNw
ZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY3VsYXRpb247
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBzbG93
IGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHko
c2xvd0Nhc2UpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhh
bihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBz
ZXRJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgICAgICBJbnQ1MktpbmQg
a2luZDsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9ub2Rl
LT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1Miht
X25vZGUtPmNoaWxkMigpLCBvcHBvc2l0ZShraW5kKSk7CisKKyAgICAgICAgICAgIENoZWNrVmFs
dWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vcmlnaW4pOworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0
KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxl
ZnQsIG1fb3V0LmludDY0WmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0Lmlu
dDY0WmVybykpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldERvdWJsZSgKKyAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxK
SVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlTXVsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhEaXYoKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OiB7CisgICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1f
bm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgemVyb051
bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgemVybyBudW1lcmF0b3Ii
KSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVtZXJhdG9yQ29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBudW1lcmF0b3IgY29udGludWF0aW9uIikp
OworCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBt
X291dC5pc1plcm8zMihudW1lcmF0b3IpLAorICAgICAgICAgICAgICAgICAgICByYXJlbHkoemVy
b051bWVyYXRvciksIHVzdWFsbHkobnVtZXJhdG9yQ29udGludWF0aW9uKSk7CisKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oemVyb051
bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0Lmxlc3NUaGFuKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMlplcm8pKTsKKworICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVhdGlvbiwgaW5uZXJMYXN0TmV4dCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2
IHVuc2FmZSBkZW5vbWluYXRvciIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2IGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3RlZERlbm9taW5hdG9yID0gbV9vdXQu
YWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZShhZGp1c3RlZERlbm9taW5h
dG9yLCBtX291dC5pbnQzMk9uZSksCisgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGlu
dWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7CisKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0
LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKKyAgICAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuZGl2KG51bWVyYXRvciwgZGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobV9vdXQubXVsKHJlc3VsdCwgZGVub21p
bmF0b3IpLCBudW1lcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2hpbGxE
aXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlRGl2KAorICAgICAgICAgICAgICAgIGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewor
ICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2R2VuZXJhdG9yLCBOZWVkU2NyYXRj
aEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKKworICAgICAgICAgICAgTFZhbHVlIHJlbWFpbmRlcjsKKyAgICAgICAgICAgIGlmIChz
aG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoTW9kIHVuc2FmZSBkZW5vbWluYXRvciIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTW9kIGNvbnRp
bnVhdGlvbiIpKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3RlZERlbm9taW5hdG9y
ID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZShhZGp1c3Rl
ZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCisgICAgICAgICAgICAgICAgICAgIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7CisKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9t
aW5hdG9yLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUz
MSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9t
aW5hdG9yKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQubW9kKG51bWVyYXRvciwgZGVub21pbmF0b3IpOworICAgICAgICAg
ICAgICAgIHJlbWFpbmRlciA9IHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHJlbWFpbmRlciA9IG1fb3V0LmNoaWxsTW9kKG51bWVyYXRvciwgZGVub21pbmF0b3Ip
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0
aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWdhdGl2ZU51bWVyYXRv
ciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbmVnYXRpdmUgbnVtZXJhdG9yIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbnVtZXJhdG9yIGNvbnRpbnVhdGlvbiIpKTsK
KworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQubGVzc1RoYW4obnVtZXJhdG9yLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAgICAg
ICAgICB1bnN1cmUobmVnYXRpdmVOdW1lcmF0b3IpLCB1bnN1cmUobnVtZXJhdG9yQ29udGludWF0
aW9uKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obmVnYXRpdmVOdW1lcmF0b3IsIG51bWVyYXRvckNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0LmlzWmVybzMyKHJlbWFpbmRlcikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChu
dW1lcmF0b3JDb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0SW50MzIocmVtYWluZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKKyAgICAg
ICAgICAgIHNldERvdWJsZSgKKyAgICAgICAgICAgICAgICBtX291dC5kb3VibGVNb2QobG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhNaW5Pck1heCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUg
cmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAorICAgICAgICAg
ICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KKyAgICAgICAgICAgICAgICAgICAg
ICAgID8gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICA6IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgbGVm
dCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
QmFzaWNCbG9jayBub3RMZXNzVGhhbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNaW4v
QXJpdGhNYXggbm90IGxlc3MgdGhhbiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggY29udGlu
dWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDI+IHJlc3VsdHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG1fb3V0LmFuY2hvcihsZWZ0KSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCisgICAgICAgICAgICAgICAgICAgID8g
bV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpCisgICAgICAgICAgICAgICAgICAgIDog
bV9vdXQuZG91YmxlR3JlYXRlclRoYW4obGVmdCwgcmlnaHQpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90TGVzc1RoYW4pKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RMZXNz
VGhhbiwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRo
TWluCisgICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFs
KGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICA6IG1fb3V0LmRvdWJsZUxlc3NUaGFu
T3JFcXVhbChsZWZ0LCByaWdodCksCisgICAgICAgICAgICAgICAgcmlnaHQsIG1fb3V0LmNvbnN0
RG91YmxlKFBOYU4pKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgcmVzdWx0cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhBYnMoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsK
KworICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5hU2hyKHZhbHVlLCBtX291dC5jb25z
dEludDMyKDMxKSk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYml0WG9yKG1h
c2ssIG1fb3V0LmFkZChtYXNrLCB2YWx1ZSkpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1YWwocmVzdWx0LCBtX291dC5jb25z
dEludDMyKDEgPDwgMzEpKSk7CisKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlQWJzKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aFNpbigpIHsgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZVNpbihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsgfQorCisgICAgdm9p
ZCBjb21waWxlQXJpdGhDb3MoKSB7IHNldERvdWJsZShtX291dC5kb3VibGVDb3MobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KCkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBsbHZtLnBvd2kgdG8gYmV0dGVyIHVu
ZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KKyAgICAgICAgLy8gSXQg
bWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBsb29wIGluIERGRyB0b28uCisgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkKKyAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBleHBvbmVudCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50SXNTbWFsbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aFBvdyB0ZXN0IGludGVnZXIgZXhwb25lbnQgaXMgc21hbGwu
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50UG93QmxvY2sgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIChpbnQpZG91YmxlKS4i
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIGRvdWJsZSkuIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCBjaGVjayBl
eHBvbmVudCBpcyBpbmZpbml0eS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuYW5FeGNl
cHRpb25CYXNlSXNPbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IE5hTiBFeGNl
cHRpb24sIGNoZWNrIGJhc2UgaXMgb25lLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHBv
d0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyByZWd1bGFyIHBvdyIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCByZXN1bHQgaXMgTmFOLiIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQXJpdGhQb3cgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBMVmFsdWUg
aW50ZWdlckV4cG9uZW50ID0gbV9vdXQuZG91YmxlVG9JbnQoZXhwb25lbnQpOworICAgICAgICAg
ICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQuaW50VG9E
b3VibGUoaW50ZWdlckV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElzSW50
ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBpbnRlZ2VyRXhwb25lbnRDb252ZXJ0
ZWRUb0RvdWJsZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goZXhwb25lbnRJc0ludGVnZXIs
IHVuc3VyZShpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2spLCB1bnN1cmUoZG91YmxlRXhwb25l
bnRQb3dCbG9ja0VudHJ5KSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFsbEJsb2NrLCBpbnRlZ2VyRXhwb25l
bnRQb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50QmVsb3cxMDAw
ID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5jb25zdEludDMyKDEwMDApKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhwb25lbnRCZWxvdzEwMDAsIHVzdWFs
bHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHkoZG91YmxlRXhwb25lbnRQb3dCbG9j
a0VudHJ5KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGludGVnZXJFeHBvbmVudFBv
d0Jsb2NrLCBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpOworICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgcG93RG91YmxlSW50UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVBv
d2koYmFzZSwgaW50ZWdlckV4cG9uZW50KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIC8vIElmIHkgaXMgTmFOLCB0aGUgcmVzdWx0IGlzIE5h
Ti4KKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRy
eSwgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KTsKKyAgICAgICAgICAgIExWYWx1ZSBl
eHBvbmVudElzTmFOOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIo
KSkgJiBTcGVjRG91YmxlTmFOKQorICAgICAgICAgICAgICAgIGV4cG9uZW50SXNOYU4gPSBtX291
dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKGV4cG9uZW50LCBleHBvbmVudCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhwb25lbnRJc05hTiA9IG1fb3V0LmJvb2xlYW5G
YWxzZTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChleHBvbmVudElzTmFOLCByYXJlbHkobmFu
RXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1c3VhbGx5KG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZp
bml0eSkpOworCisgICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAraW5maW5p
dHksIHRoZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlzIDEgYW5k
IHkgaXMgLWluZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSwgbmFuRXhjZXB0aW9uQmFzZUlz
T25lKTsKKyAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4cG9uZW50ID0gbV9vdXQuZG91Ymxl
QWJzKGV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4cG9uZW50SXNJbmZp
bml0eSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlRXhwb25lbnQsIG1fb3V0LmNvbnN0RG91
YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5LCByYXJlbHkobmFuRXhj
ZXB0aW9uQmFzZUlzT25lKSwgdXN1YWxseShwb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25CYXNlSXNPbmUsIHBvd0Jsb2NrKTsKKyAgICAgICAgICAg
IExWYWx1ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVBYnMoYmFzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUJh
c2UsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhYnNv
bHV0ZUJhc2VJc09uZSwgdW5zdXJlKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOKSwgdW5zdXJlKHBv
d0Jsb2NrKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBvd0Jsb2NrLCBuYW5FeGNl
cHRpb25SZXN1bHRJc05hTik7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb3dSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93KGJhc2UsIGV4cG9uZW50KSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQ
TmFOKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBwb3dEb3VibGVJbnRSZXN1bHQs
IHBvd1Jlc3VsdCwgcHVyZU5hbikpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhSYW5kb20oKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KworICAgICAgICAvLyBJbmxpbmVkIFdlYWtSYW5kb206OmFkdmFuY2UoKS4KKyAgICAgICAgLy8g
dWludDY0X3QgeCA9IG1fbG93OworICAgICAgICB2b2lkKiBsb3dBZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0Ojp3ZWFrUmFu
ZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpsb3dPZmZzZXQoKTsKKyAgICAgICAgTFZhbHVlIGxv
dyA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShsb3dBZGRyZXNzKSk7CisgICAgICAgIC8v
IHVpbnQ2NF90IHkgPSBtX2hpZ2g7CisgICAgICAgIHZvaWQqIGhpZ2hBZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0Ojp3ZWFr
UmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpoaWdoT2Zmc2V0KCk7CisgICAgICAgIExWYWx1
ZSBoaWdoID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGhpZ2hBZGRyZXNzKSk7CisgICAg
ICAgIC8vIG1fbG93ID0geTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NChoaWdoLCBtX291dC5hYnNv
bHV0ZShsb3dBZGRyZXNzKSk7CisKKyAgICAgICAgLy8geCBePSB4IDw8IDIzOworICAgICAgICBM
VmFsdWUgcGhhc2UxID0gbV9vdXQuYml0WG9yKG1fb3V0LnNobChsb3csIG1fb3V0LmNvbnN0SW50
NjQoMjMpKSwgbG93KTsKKworICAgICAgICAvLyB4IF49IHggPj4gMTc7CisgICAgICAgIExWYWx1
ZSBwaGFzZTIgPSBtX291dC5iaXRYb3IobV9vdXQubFNocihwaGFzZTEsIG1fb3V0LmNvbnN0SW50
NjQoMTcpKSwgcGhhc2UxKTsKKworICAgICAgICAvLyB4IF49IHkgXiAoeSA+PiAyNik7CisgICAg
ICAgIExWYWx1ZSBwaGFzZTMgPSBtX291dC5iaXRYb3IobV9vdXQuYml0WG9yKGhpZ2gsIG1fb3V0
LmxTaHIoaGlnaCwgbV9vdXQuY29uc3RJbnQ2NCgyNikpKSwgcGhhc2UyKTsKKworICAgICAgICAv
LyBtX2hpZ2ggPSB4OworICAgICAgICBtX291dC5zdG9yZTY0KHBoYXNlMywgbV9vdXQuYWJzb2x1
dGUoaGlnaEFkZHJlc3MpKTsKKworICAgICAgICAvLyByZXR1cm4geCArIHk7CisgICAgICAgIExW
YWx1ZSByYW5kb202NCA9IG1fb3V0LmFkZChwaGFzZTMsIGhpZ2gpOworCisgICAgICAgIC8vIEV4
dHJhY3QgcmFuZG9tIDUzYml0LiBbMCwgNTNdIGJpdCBpcyBzYWZlIGludGVnZXIgbnVtYmVyIHJh
bmdlcyBpbiBkb3VibGUgcmVwcmVzZW50YXRpb24uCisgICAgICAgIExWYWx1ZSByYW5kb201MyA9
IG1fb3V0LmJpdEFuZChyYW5kb202NCwgbV9vdXQuY29uc3RJbnQ2NCgoMVVMTCA8PCA1MykgLSAx
KSk7CisKKyAgICAgICAgTFZhbHVlIGRvdWJsZTUzSW50ZWdlciA9IG1fb3V0LmludFRvRG91Ymxl
KHJhbmRvbTUzKTsKKworICAgICAgICAvLyBDb252ZXJ0IGAoNTNiaXQgZG91YmxlIGludGVnZXIg
dmFsdWUpIC8gKDEgPDwgNTMpYCB0byBgKDUzYml0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlKSAqICgx
LjAgLyAoMSA8PCA1MykpYC4KKyAgICAgICAgLy8gSW4gbGF0dGVyIGNhc2UsIGAxLjAgLyAoMSA8
PCA1MylgIHdpbGwgYmVjb21lIGEgZG91YmxlIHZhbHVlIHJlcHJlc2VudGVkIGFzIChtYW50aXNz
YSA9IDAgJiBleHAgPSA5NzAsIGl0IG1lYW5zIDFlLSgyKio1NCkpLgorICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIHNjYWxlID0gMS4wIC8gKDFVTEwgPDwgNTMpOworCisgICAgICAgIC8vIE11
bHRpcGx5aW5nIDFlLSgyKio1NCkgd2l0aCB0aGUgZG91YmxlIGludGVnZXIgZG9lcyBub3QgY2hh
bmdlIGFueXRoaW5nIG9mIHRoZSBtYW50aXNzYSBwYXJ0IG9mIHRoZSBkb3VibGUgaW50ZWdlci4K
KyAgICAgICAgLy8gSXQganVzdCByZWR1Y2VzIHRoZSBleHAgcGFydCBvZiB0aGUgZ2l2ZW4gNTNi
aXQgZG91YmxlIGludGVnZXIuCisgICAgICAgIC8vIChFeGNlcHQgZm9yIDAuMC4gVGhpcyBpcyBz
cGVjaWFsbHkgaGFuZGxlZCBhbmQgaW4gdGhpcyBjYXNlLCBleHAganVzdCBiZWNvbWVzIDAuKQor
ICAgICAgICAvLyBOb3cgd2UgZ2V0IDUzYml0IHByZWNpc2lvbiByYW5kb20gZG91YmxlIHZhbHVl
IGluIFswLCAxKS4KKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmRvdWJsZU11bChkb3Vi
bGU1M0ludGVnZXIsIG1fb3V0LmNvbnN0RG91YmxlKHNjYWxlKSk7CisKKyAgICAgICAgc2V0RG91
YmxlKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhSb3VuZCgpCisgICAg
eworICAgICAgICBMQmFzaWNCbG9jayByZWFsUGFydElzTW9yZVRoYW5IYWxmID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aFJvdW5kIHNob3VsZCByb3VuZCBkb3duIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUm91
bmQgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRv
dWJsZUNlaWwodmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSZXN1
bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlKTsKKworICAgICAgICBMVmFsdWUgcmVhbFBh
cnQgPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCB2YWx1ZSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQocmVhbFBhcnQsIG1f
b3V0LmNvbnN0RG91YmxlKDAuNSkpLCB1bnN1cmUocmVhbFBhcnRJc01vcmVUaGFuSGFsZiksIHVu
c3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93biA9IG1fb3V0LmRvdWJsZVN1YihpbnRl
Z2VyVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
aW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVl
Um91bmRlZERvd24pOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworCisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50ZWdlclZhbHVlUmVzdWx0
LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7CisKKyAgICAgICAgaWYgKHByb2R1Y2Vz
SW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICBMVmFs
dWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LCBzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAg
IHNldEludDMyKGludGVnZXJWYWx1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2V0
RG91YmxlKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhTcXJ0KCkgeyBz
ZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsg
fQorCisgICAgdm9pZCBjb21waWxlQXJpdGhMb2coKSB7IHNldERvdWJsZShtX291dC5kb3VibGVM
b2cobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVBcml0aEZSb3VuZCgpCisgICAgeworICAgICAgICBzZXREb3VibGUobV9vdXQuZnJvdW5kKGxv
d0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVBcml0aE5lZ2F0ZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJm
bG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0
Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVpl
cm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyAiMCAtIHgiIGlz
IHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGluIGJvdGggQjMgYW5kIExMVk0uIFRo
aXMgZ2V0cworICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQgdG8gdGhlIHJpZ2h0IHRoaW5nLgor
ICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1f
b3V0LmludDMyWmVybywgdmFsdWUpOworICAgICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
Y2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjaGVjazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LnRlc3RJc1plcm8z
Mih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDdmZmZmZmZmKSkpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIGlmICghYWJz
dHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7Cisg
ICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0LmlzWmVybzY0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCwg
a2luZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1f
b3V0LmludDY0WmVybywgdmFsdWUpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1
bHQsIEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOworICAgICAg
ICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82
NChyZXN1bHQpKTsKKyAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNl
OiB7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0QW5kKCkKKyAgICB7CisgICAgICAgIGlmICht
X25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAgICAgICAgZW1pdEJp
bmFyeUJpdE9wU25pcHBldDxKSVRCaXRBbmRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0QW5k
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAg
ICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRPckdlbmVyYXRvcj4ob3BlcmF0aW9u
VmFsdWVCaXRPcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0
SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUJpdFhvcigp
CisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkp
IHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8SklUQml0WG9yR2VuZXJhdG9y
PihvcGVyYXRpb25WYWx1ZUJpdFhvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVCaXRSU2hpZnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBlbWl0UmlnaHRTaGlmdFNuaXBwZXQoSklU
UmlnaHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LmFTaHIoCisgICAgICAgICAgICBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCisgICAgeworICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQ8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdExTaGlm
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0SW50MzIobV9v
dXQuc2hsKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0
SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
eworICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3I6OlVuc2lnbmVkU2hpZnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHNldEludDMyKG1fb3V0LmxTaHIoCisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVVJbnQzMlRvTnVtYmVyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGlmIChkb2VzT3ZlcmZsb3cobV9ub2Rl
LT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRv
RG91YmxlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhh
bih2YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgIHNldEludDMyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAg
ICAgRXhpdEtpbmQgZXhpdEtpbmQ7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXND
b25zdGFudCgpKQorICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOworCisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBj
aGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAg
ICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVz
ZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0
aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXND
ZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNl
KSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAg
IGNoZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAgICAg
ICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NI
RUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVDaGVja0NlbGwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAg
ICAgICAgQmFkQ2VsbCwganNWYWx1ZVZhbHVlKGNlbGwpLCBtX25vZGUtPmNoaWxkMSgpLm5vZGUo
KSwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGwsIHdlYWtQb2ludGVyKG1fbm9kZS0+
Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVD
aGVja0JhZENlbGwoKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKEJhZENlbGwpOworICAgIH0K
KworICAgIHZvaWQgY29tcGlsZUNoZWNrTm90RW1wdHkoKQorICAgIHsKKyAgICAgICAgc3BlY3Vs
YXRlKFREWkZhaWx1cmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQobG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUNoZWNr
SWRlbnQoKQorICAgIHsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fbm9kZS0+
dWlkT3BlcmFuZCgpOworICAgICAgICBpZiAodWlkLT5pc1N5bWJvbCgpKSB7CisgICAgICAgICAg
ICBMVmFsdWUgc3ltYm9sID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN5bWJvbCwgbV9oZWFwcy5TeW1i
b2xfcHJpdmF0ZU5hbWUpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50UHRy
KHVpZCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBs
b3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJp
bmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0
Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzcGVj
dWxhdGVGdW5jdGlvbihtX25vZGUtPmNoaWxkMSgpLCBjZWxsKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUoKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBMVmFsdWUgcHJvcGVydHkgPSAhIW1fbm9kZS0+Y2hpbGQyKCkgPyBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKSA6IDA7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayB1bmV4cGVjdGVk
U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheWlmeVRvU3RydWN0dXJlIHVu
ZXhwZWN0ZWQgc3RydWN0dXJlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1Y3R1cmUgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMy
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFr
U3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgcmFyZWx5KHVu
ZXhwZWN0ZWRTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmV4cGVjdGVkU3Ry
dWN0dXJlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKHByb3BlcnR5KSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAw
LAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHJvcGVydHksIG1fb3V0
LmNvbnN0SW50MzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAg
ICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1
cmVJbnQzMiksIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3VibGUpLCBtX2NhbGxGcmFtZSwgY2Vs
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMpLCBtX2NhbGxGcmFtZSwgY2VsbCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0LnZvaWRU
eXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKSwgbV9jYWxs
RnJhbWUsIGNlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVl
KGNlbGwpLCAwLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0U3RydWN0dXJl
KCkKKyAgICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBp
bGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25v
ZGUpOworCisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0OworICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVy
ZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkp
OworICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBuZXdT
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKKworICAgICAgICBMVmFsdWUgY2VsbCA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAorICAgICAgICBtX291dC5zdG9yZTMyKAorICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZSksCisgICAgICAgICAgICBjZWxsLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUdldEJ5SWQoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
Z2V0QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHdlaXJkLCBzaW5jZSB3ZSBkdXBsaWNhdGUgdGhl
IHNsb3cgcGF0aCBib3RoIGhlcmUgYW5kIGluIHRoZQorICAgICAgICAgICAgLy8gY29kZSBnZW5l
cmF0ZWQgYnkgdGhlIElDLiBXZSBzaG91bGQgaW52ZXN0aWdhdGUgbWFraW5nIHRoaXMgbGVzcyBi
YWQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI3ODMwCisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJHZXRCeUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5
cGVkIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNo
aWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjZWxs
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdldEJ5SWQodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgICAg
ICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWRHZW5lcmljKSwK
KyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgY2VsbFJl
c3VsdCwgbm90Q2VsbFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKCkKKyAgICB7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBTZWUgYWJvdmU7
IENlbGxVc2UgaXMgZWFzaWVyIHNvIHdlIGRvIG9ubHkgdGhhdCBmb3Igbm93LgorICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOworCisgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBhdXRvIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworCisgICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwor
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKworICAgICAg
ICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIFB1dEJ5SWRGbHVzaCwgd2UgbWlnaHQgd2FudCB0byBs
YXRlLWNsb2JiZXIgdm9sYXRpbGUgcmVnaXN0ZXJzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4CisKKyAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbV9ncmFw
aC5leGVjdXRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmVjbWFNb2RlKCk7CisgICAg
ICAgIAorICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAgICAgICAg
ICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1
bXBzKGppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBKUyBzZXR0ZXIgY2FsbCBJQ3MgZ2VuZXJh
dGVkIGJ5IHRoZSBQdXRCeUlkIElDIHdpbGwgbmVlZCB0aGlzLgorICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxs
U2l0ZUluZGV4KTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1
dEJ5SWRHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxv
Y2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAorICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1z
WzBdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgZWNtYU1vZGUsCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCA/IERpcmVjdCA6IE5v
dERpcmVjdCk7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgo
aml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRo
QmVnaW4gPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIGdlbmVyYXRvci0+c2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BSUmVnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
ZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dWlkKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
ZG9uZSwgJmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0
U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKKyAgICB7Cisg
ICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHlSZWFk
T25seSgpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKGxvYWRCdXR0ZXJmbHlSZWFkT25seShs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgc2V0U3RvcmFnZShtX291
dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAg
ICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykgewor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgU3RyaW5nIHNsb3cgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSBTdHJpbmcgY29udGludWF0aW9uIikpOworCisgICAgICAg
ICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBz
LkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwoZmFzdFJlc3Vs
dFZhbHVlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVJvcGUp
LCBtX2NhbGxGcmFtZSwgY2VsbCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
ZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCksIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldFN0b3JhZ2UobG9hZFZlY3Rv
cldpdGhCYXJyaWVyKGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tB
cnJheSgpCisgICAgeworICAgICAgICBFZGdlIGVkZ2UgPSBtX25vZGUtPmNoaWxkMSgpOworICAg
ICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
bV9ub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBtX25vZGUsIGFic3Ry
YWN0VmFsdWUoZWRnZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
c3BlY3VsYXRlKAorICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2Vs
bCksIDAsCisgICAgICAgICAgICBtX291dC5sb2dpY2FsTm90KGlzQXJyYXlUeXBlKGNlbGwsIG1f
bm9kZS0+YXJyYXlNb2RlKCkpKSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOyAgICAKKworICAgICAgICBMQmFzaWNCbG9jayBzaW1wbGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWxl
c3MgdHlwZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdhc3RlZnVsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVmdWwgdHlw
ZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgY29udGludWF0aW9uIikpOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBtX291dC5sb2FkMzIoYmFzZVB0ciwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgbV9vdXQubm90RXF1YWwobW9kZSwgbV9vdXQuY29uc3RJbnQzMihXYXN0ZWZ1bFR5
cGVkQXJyYXkpKSwKKyAgICAgICAgICAgIHVuc3VyZShzaW1wbGVDYXNlKSwgdW5zdXJlKHdhc3Rl
ZnVsQ2FzZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oc2ltcGxlQ2FzZSwgd2FzdGVmdWxDYXNlKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
aW1wbGVPdXQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworCisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyh3YXN0
ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHZlY3RvclB0ciA9IGxv
YWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9
IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsKKyAgICAgICAgTFZhbHVlIGFycmF5QnVm
ZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIsIG1faGVhcHMuQnV0dGVyZmx5X2Fy
cmF5QnVmZmVyKTsKKyAgICAgICAgTFZhbHVlIGRhdGFQdHIgPSBtX291dC5sb2FkUHRyKGFycmF5
QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEpOworCisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yih2ZWN0b3JQdHIsIGRh
dGFQdHIpKTsKKworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworCisgICAgICAgIHNldEludDMy
KG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHNpbXBsZU91dCwgd2Fz
dGVmdWxPdXQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3Ro
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
KyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nLCBtX2hlYXBzLkpT
U3RyaW5nX2xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRy
KGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogewor
ICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMiht
X291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292
ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVn
YXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzU29tZVR5cGVkQXJy
YXlWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrSW5Cb3VuZHMoKQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIG5vVmFsdWUo
KSwgMCwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxv
d1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIElu
ZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6SW50MzIgPworICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVy
dGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFw
LCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAgICAgIExW
YWx1ZSBpc0hvbGUgPSBtX291dC5pc1plcm82NChyZXN1bHQpOworICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwg
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgICAg
ICAgICBpc0hvbGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLCBpc0hvbGUpOworICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2lj
QmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250
aWd1b3VzIGZhc3QgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQvY29udGlndW91cyBzbG93IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0
LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpLAorICAg
ICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoZmFzdENhc2UpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhmYXN0Q2FzZSwgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZh
bHVlID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2Rl
LT5jaGlsZDIoKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGZhc3RSZXN1bHRWYWx1ZSksIHJhcmVseShz
bG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAg
ICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbEFy
cmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7CisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAm
IGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZSgKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigp
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5
TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3Vs
dCwgcmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldERvdWJs
ZShyZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgaW4gYm91bmRzIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgYm94UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlW
YWwgZG91YmxlIGJveGluZyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgc2xvdyBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBkb3VibGUgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAor
ICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShpbkJvdW5kcykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBib3hQ
YXRoKTsKKyAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IG1fb3V0LmxvYWREb3VibGUo
CisgICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUt
PmNoaWxkMigpKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
bV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUp
LAorICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoYm94UGF0aCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhib3hQYXRoLCBzbG93Q2Fz
ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGJveERvdWJsZShkb3VibGVWYWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCksIG1fY2FsbEZyYW1lLCBiYXNl
LCBpbmRleCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoT3V0
T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQu
aW50MzJaZXJvKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBu
b1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5s
b2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1Zh
bHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAg
ICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMy
Tm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkpOworCisg
ICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56
ZXJvRXh0UHRyKGluZGV4KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChh
ZGRyZXNzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1
ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RvdGFsTGVuZ3RoKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBtX291dC5sb2FkUHRyKGJh
c2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAgIExWYWx1ZSBu
YW1lZExlbmd0aCA9IG1fb3V0LmxvYWQzMih0YWJsZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNU
YWJsZV9sZW5ndGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBuYW1l
ZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFNjb3BlZEFyZ3VtZW50cyBu
YW1lZCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgb3ZlcmZsb3dDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRBcmd1bWVudHMgb3ZlcmZsb3cgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbmFtZWRMZW5ndGgpLCB1bnN1cmUob3ZlcmZsb3dDYXNl
KSwgdW5zdXJlKG5hbWVkQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5hbWVkQ2FzZSwgb3ZlcmZsb3dDYXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihi
YXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19zY29wZSk7CisgICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbV9vdXQubG9hZFB0cih0YWJsZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNU
YWJsZV9hcmd1bWVudHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBUeXBlZFBvaW50ZXIg
YWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3Bl
ZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5k
ZXgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRy
ZXNzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICBtX291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6
aW52YWxpZE9mZnNldCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNv
cmRfdmFyaWFibGVzLCBzY29wZSwgbV9vdXQuemVyb0V4dFB0cihzY29wZU9mZnNldCkpOworICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
bG9hZDY0KGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZsb3dDYXNlLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRyZXNzID0gbV9vdXQu
YmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJm
bG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1fb3V0
LnN1YihpbmRleCwgbmFtZWRMZW5ndGgpKSk7CisgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dW
YWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShFeG90
aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KG92ZXJmbG93
VmFsdWUpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG92ZXJmbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG92ZXJmbG93VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0
LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwK
KyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKKyAgICAgICAgICAgIGNv
bXBpbGVTdHJpbmdDaGFyQXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlw
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IFR5cGVkUG9pbnRlcigKKyAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5UHJvcGVydGllcywKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNTaWduZWQodHlwZSkgPyBtX291dC5sb2FkOFNpZ25F
eHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkOFplcm9FeHQzMihwb2ludGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc1NpZ25lZCh0eXBlKSA/IG1fb3V0LmxvYWQx
NlNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkMTZaZXJvRXh0MzIocG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZDMyKHBvaW50ZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGVsZW1lbnQgc2l6ZSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0
IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnQzMihy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkU3BlY3VsYXRl
SW50MzIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFu
KHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJ
bnQzMihyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0Lnplcm9FeHQocmVzdWx0LCBtX291dC5pbnQ2
NCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQudW5zaWduZWRUb0RvdWJsZShyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBM
VmFsdWUgcmVzdWx0OworICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0LmZsb2F0VG9Eb3VibGUobV9vdXQubG9hZEZsb2F0KHBvaW50ZXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZShwb2ludGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB0eXBlZCBhcnJheSB0
eXBlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQorICAgIHsK
KyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxk
MSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgbGltaXQ7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LmNvbnN0
SW50MzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IGxpbWl0ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRS
ZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmFib3ZlT3JF
cXVhbChpbmRleCwgbGltaXQpKTsKKyAgICAgICAgCisgICAgICAgIFR5cGVkUG9pbnRlciBiYXNl
OworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBkdWUgdG8gdGhlIGJvdW5kcyBjaGVjaywgYWJv
dmUuIEp1c3QgdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAvLyBjb21waWxlciB0aGF0IGFueXRo
aW5nIGRvbWluYXRlZCBieSB0aGlzIGluc3RydWN0aW9uIGlzIG5vdCByZWFjaGFibGUsIHNvCisg
ICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCB3YXN0ZSB0aW1lIGdlbmVyYXRpbmcgc3Vj
aCBjb2RlLiBUaGlzIHdpbGwgYWxzbyBwbGFudCBzb21lCisgICAgICAgICAgICAgICAgLy8ga2lu
ZCBvZiBjcmFzaGluZyBpbnN0cnVjdGlvbiBzbyB0aGF0IGlmIGJ5IHNvbWUgZmx1a2UgdGhlIGJv
dW5kcyBjaGVjayBkaWRuJ3QKKyAgICAgICAgICAgICAgICAvLyB3b3JrLCB3ZSdsbCBjcmFzaCBp
biBhbiBlYXN5LXRvLXNlZSB3YXkuCisgICAgICAgICAgICAgICAgZGlkQWxyZWFkeVRlcm1pbmF0
ZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJhc2UgPSBhZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlID0gYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgIGJhc2UudmFsdWUoKSwg
bV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwgU2NhbGVFaWdodCk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KFR5cGVkUG9pbnRlcihtX2hlYXBzLnZhcmlhYmxlcy5h
dEFueUluZGV4KCksIHBvaW50ZXIpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1
dEJ5VmFsKCkKKyAgICB7CisgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApOworICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKTsKKyAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMik7CisgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDMpOworICAgICAgICBFZGdlIGNoaWxkNSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCA0KTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICAgICAgVl9KSVRP
cGVyYXRpb25fRUpKSiBvcGVyYXRpb247CisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RN
b2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdE5vblN0cmljdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dDZWxsKGNoaWxkMSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGNo
aWxkMik7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShjaGlsZDQpOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGNvbnRpbnVhdGlv
biIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhtX291dC5tX2Jsb2NrLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxkMywgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKQorICAgICAgICAg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBjaGlsZDMsIFNw
ZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6Oklu
dDMyID8KKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVz
IDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsCisgICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLCBwcm92ZW5WYWx1ZShjaGlsZDIp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09
IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgZWxlbWVudFBvaW50ZXIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29udGlndW91c1B1
dEJ5VmFsT3V0T2ZCb3VuZHMoCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKQorICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QKKyAgICAgICAgICAgICAgICAgICAgOiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBiYXNlLCBz
dG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93RG91YmxlKGNoaWxkMyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVl
KSwgY2hpbGQzLCBTcGVjRG91YmxlUmVhbCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgZWxlbWVudFBvaW50ZXIgPSBtX291dC5iYXNl
SW5kZXgoCisgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAorICAgICAgICAgICAgICAgICAg
ICBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGVsZW1lbnRQb2ludGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRzKAorICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkKKyAgICAgICAgICAgICAgICAgICAg
PyBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0CisgICAgICAg
ICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3RvcmFnZSwgaW5kZXgsIHZhbHVl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlRG91YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkg
dHlwZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIG91dGVyTGFz
dE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpc1R5cGVkVmlldyh0eXBlKSkgeworICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBw
b2ludGVyID0gVHlwZWRQb2ludGVyKAorICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnR5cGVk
QXJyYXlQcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c2hsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1f
b3V0LmludFB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE91dHB1dDo6U3RvcmVUeXBlIHN0b3JlVHlwZTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWVUb1N0b3JlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBMVmFsdWUgaW50VmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQzLnVzZUtpbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMy
VXNlOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLnVzZUtpbmQoKSA9PSBJ
bnQzMlVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IGxvd0ludDMy
KGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJbnQ1Mihj
aGlsZDMpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
UHV0QnlWYWwgaW50IGNsYW1wIGF0TGVhc3RaZXJvIikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
UHV0QnlWYWwgaW50IGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDI+IGludFZhbHVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMu
YXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lmxlc3NUaGFuKGludFZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGF0TGVhc3Ra
ZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhhdExlYXN0WmVy
bywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5z
ZWxlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFu
KGludFZhbHVlLCBtX291dC5jb25zdEludDMyKDI1NSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKDI1NSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludFZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaSht
X291dC5pbnQzMiwgaW50VmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IGxvd0RvdWJs
ZShjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGF0TGVhc3RaZXJv
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgYXRMZWFzdFpl
cm8iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgd2l0aGluUmFu
Z2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCB3aXRoaW5S
YW5nZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCBjb250
aW51YXRpb24iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAzPiBpbnRWYWx1ZXM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobV9v
dXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBtX291dC5kb3VibGVaZXJvKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShhdExlYXN0WmVy
bykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oYXRMZWFzdFplcm8s
IHdpdGhpblJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBw
ZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDI1NSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERvdWJs
ZSgyNTUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZSh3aXRoaW5SYW5nZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5h
cHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludFZhbHVlID0gZG91YmxlVG9JbnQzMihkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RvcmUgPSBpbnRW
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9y
ZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzJBczg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTMyQXMxNjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXplIik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgLyogIWlzSW50KHR5
cGUpICovIHsKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNo
aWxkMyk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVU
b1N0b3JlID0gbV9vdXQuZG91YmxlVG9GbG9hdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRmxvYXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURvdWJsZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB0eXBlZCBhcnJh
eSB0eXBlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpIHx8IG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKQorICAgICAgICAgICAg
ICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUsIHBvaW50ZXIsIHN0b3JlVHlwZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
SW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHR5cGVkIGFycmF5IGlu
IGJvdW5kcyBjYXNlIikpOworICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHR5cGVkIGFycmF5IGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChp
bmRleCwgbG93SW50MzIoY2hpbGQ1KSksCisgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUo
Y29udGludWF0aW9uKSwgdW5zdXJlKGlzSW5Cb3VuZHMpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNJbkJvdW5kcywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeUlkKCkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldOworICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC52b2lkVHlwZSwKKyAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlJZCA/
IG9wZXJhdGlvblB1dEdldHRlckJ5SWQgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkKSwKKyAgICAg
ICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5j
b25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CisgICAg
fQorCisgICAgdm9pZCBjb21waWxlUHV0R2V0dGVyU2V0dGVyQnlJZCgpCisgICAgeworICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSBnZXR0ZXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUg
c2V0dGVyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgYXV0byB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworICAg
ICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciksCisgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFz
ZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFjY2Vz
c29yQXR0cmlidXRlcygpKSwgZ2V0dGVyLCBzZXR0ZXIpOworCisgICAgfQorCisgICAgdm9pZCBj
b21waWxlUHV0QWNjZXNzb3JCeVZhbCgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdWJzY3JpcHQgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgYWNjZXNzb3IgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291
dC52b2lkVHlwZSwKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0g
UHV0R2V0dGVyQnlWYWwgPyBvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCA6IG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsKSwKKyAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBzdWJzY3JpcHQsIG1f
b3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJyYXlQdXNoKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWU7CisgICAgICAgICAg
ICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpJbnQzMikgeworICAgICAgICAgICAgICAgICAgICBGVExfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQyKCksIFNwZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlNjQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNE
b3VibGVSZWFsLAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkKHZhbHVlLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1
dDo6U3RvcmVEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmZvckFycmF5VHlwZShtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSk7CisKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2TGVuZ3RoID0g
bV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcnJheVB1c2ggZmFzdCBwYXRoIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UHVzaCBzbG93IHBh
dGgiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFycmF5UHVzaCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1
YWwoCisgICAgICAgICAgICAgICAgICAgIHByZXZMZW5ndGgsIG1fb3V0LmxvYWQzMihzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICB1bnN1
cmUoc2xvd1BhdGgpLCB1bnN1cmUoZmFzdFBhdGgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwgc2xvd1Bh
dGgpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUoCisgICAgICAgICAgICAgICAgdmFsdWUsIG1f
b3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKHByZXZMZW5ndGgp
KSwgc3RvcmVUeXBlKTsKKyAgICAgICAgICAgIExWYWx1ZSBuZXdMZW5ndGggPSBtX291dC5hZGQo
cHJldkxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihu
ZXdMZW5ndGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5h
bmNob3IoYm94SW50MzIobmV3TGVuZ3RoKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIG9wZXJhdGlvbjsKKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKQor
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJh
eVB1c2gpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2hEb3VibGUpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlLCBiYXNlKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVBcnJheVBvcCgpCisgICAgeworICAgICAgICBMVmFsdWUg
YmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdl
ID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVh
cHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFycmF5UG9wIGZhc3QgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBzbG93IGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFycmF5UG9wIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzMy
KHByZXZMZW5ndGgpLCByYXJlbHkoY29udGludWF0aW9uKSwgdXN1YWxseShmYXN0Q2FzZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGZhc3RDYXNlLCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgbmV3TGVuZ3Ro
ID0gbV9vdXQuc3ViKHByZXZMZW5ndGgsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgPSBtX291dC5iYXNlSW5k
ZXgoaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihuZXdMZW5ndGgpKTsKKyAgICAgICAg
ICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7Cisg
ICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmxvYWQ2NChwb2ludGVyKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgcG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHJlc3VsdCkpOworICAg
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90
WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5sb2FkRG91YmxlKHBvaW50ZXIpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
bV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBwb2ludGVyKTsK
KyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94RG91YmxlKHJl
c3VsdCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUVxdWFsKHJlc3VsdCwgcmVzdWx0KSwKKyAgICAgICAgICAgICAgICAg
ICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1D
YWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKSwgbV9jYWxsRnJhbWUsIGJhc2UpKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3Rp
dmF0aW9uKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJh
bmQ8U3ltYm9sVGFibGUqPigpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpOworICAgICAgICBKU1ZhbHVlIGluaXRpYWxpemF0aW9uVmFsdWUgPSBtX25vZGUt
PmluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCk7CisgICAgICAgIEFTU0VSVChpbml0
aWFsaXphdGlvblZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbGl6YXRpb25WYWx1ZSA9PSBq
c1REWlZhbHVlKCkpOworICAgICAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3Rp
bGxWYWxpZCgpKSB7CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IHZtQ2FsbCgKKyAg
ICAgICAgICAgICAgICBtX291dC5pbnQ2NCwKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9p
bnRlcihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIHNjb3BlLCB3ZWFrUG9pbnRlcih0YWJs
ZSksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUp
KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZhdGlvbiBzbG93IHBhdGgiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q3JlYXRlQWN0aXZhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpT
TGV4aWNhbEVudmlyb25tZW50PigKKyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50Ojph
bGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1Bh
dGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBtZW1vcnkgYmFycmllcnMg
c2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAg
ICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNj
b3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4dCk7CisgICAgICAgIG1fb3V0LnN0
b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1N5bWJvbFRh
YmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkgeworICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCgKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29k
ZShpbml0aWFsaXphdGlvblZhbHVlKSksCisgICAgICAgICAgICAgICAgZmFzdE9iamVjdCwgbV9o
ZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFz
dE9iamVjdCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBM
VmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
c2NvcGUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgPT0gTmV3RnVuY3Rpb24gfHwgbV9ub2RlLT5v
cCgpID09IE5ld0Fycm93RnVuY3Rpb24gfHwgbV9ub2RlLT5vcCgpID09IE5ld0dlbmVyYXRvckZ1
bmN0aW9uKTsKKyAgICAgICAgYm9vbCBpc0dlbmVyYXRvckZ1bmN0aW9uID0gbV9ub2RlLT5vcCgp
ID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHNjb3Bl
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oKTsKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCkt
PmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9CisgICAg
ICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IHZtQ2FsbChtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUs
IHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgorICAgICAgICAgICAgICAgIHZtQ2Fs
bChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uKSwgbV9j
YWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgICAgICBpc0dl
bmVyYXRvckZ1bmN0aW9uID8gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZSgpIDoKKyAgICAgICAgICAgIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3RnVuY3Rp
b24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPQorICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlv
biA/IGFsbG9jYXRlT2JqZWN0PEpTR2VuZXJhdG9yRnVuY3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQu
aW50UHRyWmVybywgc2xvd1BhdGgpIDoKKyAgICAgICAgICAgIGFsbG9jYXRlT2JqZWN0PEpTRnVu
Y3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICAK
KyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgbWVtb3J5IGJhcnJpZXJzIHNpbmNl
IHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBmdW5jdGlvbiwgc28gaXQKKyAgICAgICAgLy8gbXVz
dCBiZSB5b3VuZy4KKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1f
aGVhcHMuSlNGdW5jdGlvbl9zY29wZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2lu
dGVyKGV4ZWN1dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0YWJs
ZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3Qs
IG1faGVhcHMuSlNGdW5jdGlvbl9yYXJlRGF0YSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKworICAgICAgICBWZWN0b3I8TFZhbHVlPiBzbG93
UGF0aEFyZ3VtZW50czsKKyAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMuYXBwZW5kKHNjb3BlKTsK
KyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdG9yRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb25X
aXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVj
dXRhYmxlKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxS
ZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cygpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVjdGl2ZSB3YXkgb2YgZGVhbGluZyB3
aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlzIHRvIGhhdmUKKyAgICAgICAgLy8g
dGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBub2RlLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjA3CisgICAgICAgIAorICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVy
ZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbWluQ2FwYWNpdHkgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bnVtUGFyYW1ldGVy
cygpIC0gMTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgc2xvdyBwYXRoIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNy
ZWF0ZURpcmVjdEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0
aCk7CisgICAgICAgIAorICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoID0gZ2V0QXJndW1l
bnRzTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZmFzdE9iamVjdDsKKyAgICAg
ICAgaWYgKGxlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2Nh
dGVPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKKyAgICAgICAgICAgICAgICBEaXJlY3RBcmd1bWVu
dHM6OmFsbG9jYXRpb25TaXplKHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpKSwg
c3RydWN0dXJlLAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzaXplID0gbV9vdXQuYWRkKAor
ICAgICAgICAgICAgICAgIG1fb3V0LnNobChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
MykpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSA9IG1fb3V0
LnNlbGVjdCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLnZhbHVl
LCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCisgICAgICAgICAgICAgICAgc2l6ZSwg
bV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFj
aXR5KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVW
YXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCisgICAgICAgICAgICAgICAgc2l6
ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZhbHVlLCBmYXN0T2JqZWN0LCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOworICAgICAgICBtX291dC5zdG9yZTMyKG1f
b3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFy
Z3VtZW50c19taW5DYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0
clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcyk7Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGZhc3RPYmplY3QpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMs
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWluQ2FwYWNp
dHkpKTsKKyAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgbV9vdXQu
c3RvcmVQdHIoZ2V0Q3VycmVudENhbGxlZSgpLCByZXN1bHQsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX2NhbGxlZSk7CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoLmlzS25vd24pIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFzc2VtYmx5SGVscGVyczo6YXJndW1l
bnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkNjQoYWRkcmVzc0ZvcihzdGFydCArIGkpKSwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW2ldKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzdGFja0Jhc2UgPSBnZXRB
cmd1bWVudHNTdGFydCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBs
b29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBi
b2R5IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZW5kID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBlbmQiKSk7CisKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIG9yaWdpbmFsTGVuZ3RoOworICAgICAgICAgICAgaWYgKG1pbkNhcGFjaXR5
KSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIGNhcGFjaXR5ID0gbV9vdXQuc2VsZWN0KAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLnZhbHVlLCBtX291dC5j
b25zdEludDMyKG1pbkNhcGFjaXR5KSksCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aC52YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihtaW5DYXBhY2l0eSkpOwor
ICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0aFZhbHVlID0gbV9vdXQuemVyb0V4
dFB0cihjYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5h
bmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChs
b29wKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIG9yaWdp
bmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aC52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5hbmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1
ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChvcmlnaW5hbExl
bmd0aFZhbHVlKSwgdW5zdXJlKGVuZCksIHVuc3VyZShsb29wKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcCwg
ZW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1fb3V0
LmludFB0ciwgb3JpZ2luYWxMZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9v
dXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7CisgICAgICAgICAgICBtX291
dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHN0YWNrQmFzZSwgaW5kZXgpKSwKKyAgICAgICAgICAgICAgICBt
X291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgcmVzdWx0LCBp
bmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmV4dEluZGV4ID0gbV9vdXQuYW5j
aG9yKGluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJ
bmRleCwgbmV4dEluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwo
aW5kZXgpLCB1bnN1cmUoZW5kKSwgdW5zdXJlKGxvb3ApKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZW5kLCBsYXN0TmV4dCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21w
aWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzY29wZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAg
IHdlYWtQb2ludGVyKAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2NvcGVkQXJndW1lbnRzU3RydWN0dXJlKCkpLAorICAg
ICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJndW1lbnRzTGVuZ3RoKCkudmFsdWUs
IGdldEN1cnJlbnRDYWxsZWUoKSwgc2NvcGUpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1
bWVudHMoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICB3ZWFrUG9pbnRlcigKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykt
Pm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgIGdldEFyZ3VtZW50
c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVlKCkp
OworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUNvcHlSZXN0KCkKKyAgICB7ICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGRvQ29weVJlc3QgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvcHlSZXN0IEMgY2FsbCIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJGaWxsUmVzdFBhcmFtZXRlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTFZhbHVl
IGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShk
b0NvcHlSZXN0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51YXRpb24pOworICAgICAgICAvLyBB
cmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpu
dW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCisgICAgICAgIExWYWx1
ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgbV9v
dXQudm9pZFR5cGUsbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNvcHlSZXN0KSwgbV9jYWxsRnJh
bWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBnZXRBcmd1bWVudHNT
dGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgYXJyYXlMZW5ndGgpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0
aCgpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBub25aZXJvTGVuZ3RoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIG5vbiB6ZXJvIikpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFJlc3RMZW5ndGgg
Y29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgemVyb0xl
bmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKworICAgICAg
ICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9k
ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgIExWYWx1ZSBhcmd1bWVudHNM
ZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLAor
ICAgICAgICAgICAgdW5zdXJlKG5vblplcm9MZW5ndGgpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vblplcm9MZW5ndGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
blplcm9MZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0
aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgemVyb0xl
bmd0aFJlc3VsdCwgbm9uWmVyb0xlbmd0aFJlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVOZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0ZU9i
amVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZU5ld0FycmF5KCkKKyAgICB7CisgICAgICAgIC8vIEZpcnN0IHNwZWN1bGF0ZSBhcHByb3ByaWF0
ZWx5IG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4uIERvIHRoaXMgdW5jb25kaXRpb25hbGx5IHVwIGhl
cmUKKyAgICAgICAgLy8gYmVjYXVzZSBzb21lIG9mIHRoZSBzbG93IHBhdGhzIG1heSBvdGhlcndp
c2UgZm9yZ2V0IHRvIGRvIGl0LiBJdCdzIHNvcnQgb2YgYXJndWFibGUKKyAgICAgICAgLy8gdGhh
dCBkb2luZyB0aGUgc3BlY3VsYXRpb25zIHVwIGhlcmUgbWlnaHQgYmUgdW5wcm9maXRhYmxlIGZv
ciBSQSAtIHNvIHdlIGNhbiBjb25zaWRlcgorICAgICAgICAvLyBzaW5raW5nIHRoaXMgdG8gYmVs
b3cgdGhlIGFsbG9jYXRpb24gZmFzdCBwYXRoIGlmIHdlIGZpbmQgdGhhdCB0aGlzIGhhcyBhIGxv
dCBvZgorICAgICAgICAvLyByZWdpc3RlciBwcmVzc3VyZS4KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgc3BlY3VsYXRlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oCisgICAgICAg
ICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKworICAgICAgICBpZiAoIWdsb2JhbE9iamVj
dC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2Rl
LT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcnJheVZhbHVlcyBh
cnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9w
ZXJhbmRJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoICht
X25vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGluZGV4aW5nIHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBsb3dEb3VibGUoZWRnZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheVZhbHVlcy5idXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXNb
b3BlcmFuZEluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSktPmF0KG9w
ZXJhbmRJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW5kZXhpbmcgdHlwZSIpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
bm9kZS0+bnVtQ2hpbGRyZW4oKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisg
ICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdF
bXB0eUFycmF5KSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
bV9ub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICBBU1NFUlQoc2NyYXRjaFNpemUpOworICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJ
bmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpIHsKKyAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgp
OworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9vdXQu
YWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZEluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2Ny
YXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIo
KSkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXkpLCBtX2Nh
bGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSksIG1fb3V0
LmNvbnN0SW50UHRyKGJ1ZmZlciksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX25v
ZGUtPm51bUNoaWxkcmVuKCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmludFB0clplcm8sIG1fb3V0LmFic29sdXRlKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0
aFB0cigpKSk7CisgICAgICAgIAorICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZU5ld0FycmF5QnVmZmVyKCkKKyAgICB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
CisgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3Rv
cmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbnVt
RWxlbWVudHMgPSBtX25vZGUtPm51bUNvbnN0YW50cygpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1cmUs
IG51bUVsZW1lbnRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZSogZGF0YSA9
IGNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihtX25vZGUtPnN0YXJ0Q29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX25vZGUtPm51bUNv
bnN0YW50cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90PihkYXRhW2luZGV4
XS5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDY0KHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0
dGVyZmx5LAorICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmZvckluZGV4aW5nVHlwZShtX25v
ZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5hcnJheSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlciksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5zdGFydENvbnN0YW50KCkp
LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5udW1Db25zdGFudHMoKSkp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSgpCisgICAg
eworICAgICAgICBMVmFsdWUgcHVibGljTGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9ub2RlLT5pbmRleGluZ1R5
cGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFk
VGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBmYXN0IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5ld0FycmF5V2l0aFNpemUgbGFyZ2UgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXpl
IGZhaWwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIHNsb3cgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3
QXJyYXlXaXRoU2l6ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHVibGlj
TGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9M
RU5HVEgpKSwKKyAgICAgICAgICAgICAgICByYXJlbHkobGFyZ2VDYXNlKSwgdXN1YWxseShmYXN0
Q2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBX
ZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJheShibGFoKS4K
KyAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBwdWJsaWNMZW5ndGg7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9CisgICAgICAgICAgICAgICAg
bV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3RoLCBtX291dC5pbnRQdHIpLCBtX291
dC5jb25zdEludFB0cigzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHlTaXplID0gbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291
dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdl
dEVuZChidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVj
dDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2UpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5zdG9yZTMyKHB1YmxpY0xlbmd0aCwgYnV0dGVyZmx5LCBtX2hl
YXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2
ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShtX25vZGUtPmluZGV4aW5n
VHlwZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluaXRMb29wID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGRvdWJsZSBpbml0IGxvb3AiKSk7Cisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdERvbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5ld0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgZG9uZSIpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbEluZGV4ID0gbV9vdXQu
YW5jaG9yKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3Jp
Z2luYWxQb2ludGVyID0gbV9vdXQuYW5jaG9yKGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIodmVjdG9y
TGVuZ3RoKSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGluaXREb25lKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdExhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW5pdExvb3AsIGluaXREb25lKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaW5k
ZXggPSBtX291dC5waGkobV9vdXQuaW50MzIsIG9yaWdpbmFsSW5kZXgpOworICAgICAgICAgICAg
ICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgb3JpZ2luYWxQb2lu
dGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90
PihQTmFOKSksCisgICAgICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0SW5kZXggPSBtX291dC5zdWIoaW5kZXgs
IG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhp
KGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
YWRkSW5jb21pbmdUb1BoaShwb2ludGVyLCBtX291dC5hbmNob3IobV9vdXQuYWRkKHBvaW50ZXIs
IG1fb3V0LmludFB0ckVpZ2h0KSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG5leHRJbmRleCksIHVuc3VyZShpbml0
TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGluaXREb25lLCBpbml0TGFzdE5leHQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG9iamVjdCk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZSwg
ZmFpbENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VTdHJ1Y3R1cmUgPSBt
X291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBzbG93Q2Fz
ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYWlsU3RydWN0dXJlID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChzbG93Q2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZVZhbHVl
ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbGFyZ2VTdHJ1Y3R1
cmUsIGZhaWxTdHJ1Y3R1cmUpOworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUp
OworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xv
d1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICBt
X291dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJB
WV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpLAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSk7CisgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZSksIG1fY2FsbEZyYW1lLCBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJheSgpCisgICAgeworICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVj
dHVyZSh0eXBlKTsKKworICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxFbm91Z2hDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5IHNtYWxsIGVub3VnaCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm9uWmVyb0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5ld1R5cGVkQXJyYXkgbm9uLXplcm8gY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5IHNs
b3cgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZShzaXplLCBt
X291dC5jb25zdEludDMyKEpTQXJyYXlCdWZmZXJWaWV3OjpmYXN0U2l6ZUxpbWl0KSksCisgICAg
ICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEVub3VnaENhc2UpKTsK
KworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbWFs
bEVub3VnaENhc2UsIG5vblplcm9DYXNlKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0Lm5vdFplcm8zMihzaXplKSwgdXN1YWxseShub25aZXJvQ2FzZSksIHJhcmVseShzbG93Q2Fz
ZSkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25aZXJvQ2FzZSwgc2xvd0Nhc2Up
OworCisgICAgICAgICAgICBMVmFsdWUgYnl0ZVNpemUgPQorICAgICAgICAgICAgICAgIG1fb3V0
LnNobChtX291dC56ZXJvRXh0UHRyKHNpemUpLCBtX291dC5jb25zdEludDMyKGxvZ0VsZW1lbnRT
aXplKHR5cGUpKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA4KSB7Cisg
ICAgICAgICAgICAgICAgYnl0ZVNpemUgPSBtX291dC5iaXRBbmQoCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFkZChieXRlU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoNykpLAorICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cih+c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDcpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBh
bGxvY2F0ZUJhc2ljU3RvcmFnZShieXRlU2l6ZSwgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBM
VmFsdWUgZmFzdFJlc3VsdFZhbHVlID0KKyAgICAgICAgICAgICAgICBhbGxvY2F0ZU9iamVjdDxK
U0FycmF5QnVmZmVyVmlldz4oc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93Q2FzZSk7
CisKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHN0b3JhZ2UsIGZhc3RSZXN1bHRWYWx1ZSwg
bV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICAgICAgbV9vdXQuc3Rv
cmUzMihzaXplLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbGVu
Z3RoKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihGYXN0VHlw
ZWRBcnJheSksIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2Rl
KTsKKworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAg
ICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZSksIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgc2l6ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisK
KyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudEZvclR5cGUodHlwZSkpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUodHlwZSkpLCBhcmd1bWVu
dCk7CisKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIHNldFN0b3JhZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2Jq
ZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMpKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIFRyYW5z
aXRpb24qIHRyYW5zaXRpb24gPSBtX25vZGUtPnRyYW5zaXRpb24oKTsKKyAgICAgICAgTFZhbHVl
IG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBvbGRT
dG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAg
IHNldFN0b3JhZ2UoCisgICAgICAgICAgICByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJhbnNpdGlvbi0+cHJldmlvdXMsIHRy
YW5zaXRpb24tPm5leHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlVG9TdHJpbmdP
ckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxsKG1fbm9kZS0+Y2hpbGQxKCksIGNl
bGwpOworICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIobV9ub2RlLT5jaGlsZDEoKSwg
U3BlY1N0cmluZ09iamVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9pbnRlcm5hbFZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RydWN0
dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmcgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBzdHJpbmcg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0aW9u
IikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVSZXN1
bHQgPSBtX291dC5hbmNob3IoY2VsbCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmNvbnN0SW50MzIodm0o
KS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY29udGlu
dWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKG1f
bm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHVuYm94ZWRSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9pbnRlcm5hbFZhbHVlKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNpbXBsZVJlc3VsdCwgdW5ib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlciht
X25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENlbGxV
c2U6CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVl
OworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2Up
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBDZWxsVXNlL1VudHlwZWRVc2UgaXMg
Y2VsbCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVkVXNlIG5vdCBzdHJpbmciKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBjb250aW51YXRpb24iKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBpc0NlbGxQcmVkaWNhdGU7CisgICAgICAgICAgICBp
ZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAgICAg
ICBpc0NlbGxQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSB0aGlzLT5pc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbFByZWRpY2F0ZSwgdW5zdXJlKGlzQ2VsbCksIHVuc3VyZShub3RTdHJpbmcpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpc0NlbGwsIG5vdFN0cmluZyk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVS
ZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOworICAgICAgICAgICAgTFZhbHVlIGlzU3RyaW5n
UHJlZGljYXRlOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSAmIFNwZWNTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IGlz
U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJlZGljYXRlID0gbV9vdXQuYm9vbGVh
bkZhbHNlOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nUHJlZGljYXRlLCB1bnN1
cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBMVmFsdWUgb3BlcmF0aW9uOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gbV9vdXQu
b3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/IG9wZXJhdGlvblRvU3RyaW5nT25D
ZWxsIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxsKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24obV9ub2Rl
LT5vcCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJpbmcgOiBvcGVyYXRpb25DYWxsU3Ry
aW5nQ29uc3RydWN0b3IpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChtX291dC5pbnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxG
cmFtZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgc2lt
cGxlUmVzdWx0LCBjb252ZXJ0ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb1ByaW1pdGl2ZSgpCisg
ICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiVG9QcmltaXRpdmUgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBpc09iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIG9iamVj
dCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgaXNPYmplY3RDYXNlKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZh
bHVlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpc09i
amVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhpc09iamVjdENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSkp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlTWFrZVJvcGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGtpZHNbM107CisgICAg
ICAgIHVuc2lnbmVkIG51bUtpZHM7CisgICAgICAgIGtpZHNbMF0gPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBraWRzWzFdID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKKyAgICAgICAgICAgIGtpZHNbMl0gPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbnVtS2lkcyA9IDM7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBraWRzWzJdID0gMDsKKyAgICAgICAgICAgIG51bUtp
ZHMgPSAyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0
aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUgc2xvdyBwYXRoIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1ha2VS
b3BlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0KKyAgICAgICAgICAgIHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplb2YoSlNSb3BlU3RyaW5nKSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksCisgICAgICAgICAgICB2bSgpLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIHJlc3VsdCwgbV9oZWFwcy5K
U1N0cmluZ192YWx1ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1LaWRz
OyArK2kpCisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihraWRzW2ldLCByZXN1bHQsIG1faGVh
cHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUtpZHM7IGkgPCBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7CisgICAgICAgIExWYWx1ZSBmbGFncyA9IG1fb3V0
LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKKyAgICAgICAgTFZhbHVl
IGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1LaWRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdzLCBtX291dC5sb2FkMzIoa2lkc1tpXSwg
bV9oZWFwcy5KU1N0cmluZ19mbGFncykpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogbGVuZ3Ro
Q2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCisgICAgICAgICAgICAgICAgbGVuZ3RoLCBtX291
dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsKKyAgICAgICAgICAg
IGJsZXNzU3BlY3VsYXRpb24obGVuZ3RoQ2hlY2ssIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aENoZWNrOworICAg
ICAgICB9CisgICAgICAgIG1fb3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5iaXRBbmQo
bV9vdXQuY29uc3RJbnQzMihKU1N0cmluZzo6SXM4Qml0KSwgZmxhZ3MpLAorICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihs
ZW5ndGgsIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICAKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihyZXN1bHQpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1
bHRWYWx1ZTsKKyAgICAgICAgc3dpdGNoIChudW1LaWRzKSB7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVM
YXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VS
b3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOworICAg
ICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0
aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAg
fSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
bnVtYmVyIG9mIGNoaWxkcmVuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRW
YWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTdHJpbmcgZmFzdCBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIHNsb3cgcGF0aCIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRC
eVZhbCBTdHJpbmcgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAg
ICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ19s
ZW5ndGgpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoZmFzdFBhdGgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUp
OworICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDgtYml0IGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyAx
Ni1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYml0c0NvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGJpdG5lc3MgY29udGludWF0aW9u
IikpOworICAgICAgICBMQmFzaWNCbG9jayBiaWdDaGFyYWN0ZXIgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldEJ5VmFsIFN0cmluZyBiaWcgY2hhcmFjdGVyIikpOworICAgICAgICAgICAgCisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBs
X2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJ
bXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpczE2Qml0KSwgdW5zdXJl
KGlzOEJpdCkpOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwg
aXMxNkJpdCk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hhcjhCaXQg
PSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5i
YXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5jaGFyYWN0ZXJzOCwgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCksCisgICAgICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9u
b2RlLT5jaGlsZDIoKSkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoYml0c0NvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgYmlnQ2hhcmFj
dGVyKTsKKworICAgICAgICBMVmFsdWUgY2hhcjE2Qml0VmFsdWUgPSBtX291dC5sb2FkMTZaZXJv
RXh0MzIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9o
ZWFwcy5jaGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAorICAg
ICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hvcihjaGFyMTZCaXRWYWx1ZSk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChjaGFy
MTZCaXRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDEwMCkpLAorICAgICAgICAgICAgcmFyZWx5
KGJpZ0NoYXJhY3RlciksIHVzdWFsbHkoYml0c0NvbnRpbnVhdGlvbikpOworICAgICAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpZ0NoYXJhY3RlciwgYml0c0NvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCA0PiByZXN1bHRz
OworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAgICAg
ICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJT
dHJpbmcpLAorICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNoYXIxNkJpdFZhbHVlKSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYml0c0NvbnRpbnVhdGlvbiwgc2xvd1BhdGgpOworICAgICAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBjaGFyYWN0ZXIgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGNoYXI4Qml0
LCBjaGFyMTZCaXQpOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3Mg
PSBtX291dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmdzKCkpOworICAgICAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hv
cihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgIG1faGVhcHMuc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBtX291dC56ZXJvRXh0UHRyKGNoYXJh
Y3RlcikpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwgbV9vdXQu
Ym9vbGVhblRydWUpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1f
b3V0LmludFB0clplcm8pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgY2FwdHVyZWQgdXNpbmcgYSBTcGVjdWxhdGlvbiBtb2Rl
IHRoYXQgbWVhbnMKKyAgICAgICAgICAgICAgICAvLyAib3V0LW9mLWJvdW5kcyBsb2FkcyByZXR1
cm4gYSB0cml2aWFsIHZhbHVlIiwgc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBT
YW5lQ2hhaW5PdXRPZkJvdW5kcy4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShnbG9iYWxPYmplY3QtPnN0
cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bmVnYXRpdmVJbmRleCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIG5l
Z2F0aXZlIGluZGV4IikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSwK
KyAgICAgICAgICAgICAgICAgICAgcmFyZWx5KG5lZ2F0aXZlSW5kZXgpLCB1c3VhbGx5KGNvbnRp
bnVhdGlvbikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhuZWdhdGl2ZUluZGV4LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZt
Q2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsU3RyaW5nSW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgcmVzdWx0cykp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKKyAgICB7
CisgICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3Ry
aW5nQ2hhckNvZGVBdCA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBpczE2Qml0
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29kZUF0IDE2LWJpdCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0cmluZ0NoYXJDb2RlQXQgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsCisgICAgICAgICAgICBtX291
dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5l
Z2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSkpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNTdHJp
bmdfdmFsdWUpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAg
dW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7CisgICAgICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOwor
ICAgICAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXI4Qml0ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAor
ICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9F
eHRQdHIoaW5kZXgpLAorICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyMTZCaXQgPSBtX291dC5hbmNob3IoCisg
ICAgICAgICAgICBtX291dC5sb2FkMTZaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAorICAgICAg
ICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRy
KGluZGV4KSwKKyAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAg
ICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIGNoYXI4Qml0LCBjaGFyMTZCaXQpKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdGcm9tQ2hhckNvZGUoKQorICAgIHsKKyAg
ICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQpLCBtX2NhbGxG
cmFtZSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkRWRnZSkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNoaWxkRWRnZS51c2VLaW5kKCkg
PT0gSW50MzJVc2UpOworCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKGNoaWxkRWRn
ZSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbWFsbEludENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBzbWFsbCBpbnQgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmlu
Z0Zyb21DaGFyQ29kZSBzbG93IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nRnJvbUNoYXJDb2RlIGNvbnRpbnVh
dGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92
ZU9yRXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHhmZikpLAorICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEludENhc2UpKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsSW50Q2FzZSwgc2xvd0Nhc2UpOwor
CisgICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291dC5jb25zdEludFB0cih2bSgpLnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpOworICAgICAgICBMVmFsdWUgZmFz
dFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cigKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRl
eChtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIHNtYWxsU3RyaW5ncywgbV9vdXQuemVy
b0V4dFB0cih2YWx1ZSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAg
IG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29k
ZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworCisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEJ5
T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbV9ub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShsb2Fk
UHJvcGVydHkoCisgICAgICAgICAgICBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRh
LmlkZW50aWZpZXJOdW1iZXIsIGRhdGEub2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUdldEdldHRlcigpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQ
dHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5HZXR0ZXJTZXR0ZXJfZ2V0dGVy
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFNldHRlcigpCisgICAgeworICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwg
bV9oZWFwcy5HZXR0ZXJTZXR0ZXJfc2V0dGVyKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZU11bHRpR2V0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAg
aWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWlu
c3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0
IGxpa2UgdGhhdC4KKyAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9j
aywgMj4gYmxvY2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZz
ZXQgZmFpbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKKyAgICAgICAgU3RydWN0dXJl
U2V0IGJhc2VTZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0
YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCku
c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
ZXRDYXNlLnNldCgpW2pdOworICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlE
KHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBtX291
dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBjYXNlcywgZXhpdCwg
V2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ss
IDI+IHJlc3VsdHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0
YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENh
c2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJs
b2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtZXRo
b2QuY29uc3RhbnQoKS0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7Cisg
ICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKKyAgICAgICAgICAgICAgICBpZiAo
bWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5wcm90b3R5cGUo
KS0+dmFsdWUoKS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9mZnNl
dChtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBs
b2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
ZXhpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLmZvck5vZGUo
bV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihiYXNlU2V0KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29s
ZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlUHV0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CisgICAgICAgIAorICAgICAg
ICBzdG9yZVByb3BlcnR5KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygp
KSwKKyAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksIGRhdGEuaWRlbnRp
Zmllck51bWJlciwgZGF0YS5vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVN
dWx0aVB1dEJ5T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBk
YXRhID0gbV9ub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOworICAgICAgICAKKyAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNl
dCBjYXNlICIsIGkpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBmYWlsIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0QnlPZmZzZXQgY29u
dGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNh
c2VzOworICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQub2xkU3RydWN0dXJlKClbal07
CisgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxv
Y2tzW2ldLCBXZWlnaHQoMSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBt
X291dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBleGl0LCBXZWlnaHQoMCkpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworCisgICAgICAgICAgICBjaGVja0luZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1
ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZh
cmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBsb2FkQnV0
dGVyZmx5V2l0aEJhcnJpZXIoYmFzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKKyAgICAgICAgICAg
ICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5P
d25lcigpLAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICAgICAg
ICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygp
LnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZUlEKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0
b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkp
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdl
dEdsb2JhbFZhcmlhYmxlKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKCkKKyAgICB7CisgICAgICAgIG1f
b3V0LnN0b3JlNjQoCisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5hYnNvbHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKCkKKyAgICB7CisgICAgICAgIFdhdGNocG9pbnRT
ZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5
V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDhaZXJvRXh0
MzIobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5jb25zdEludDMy
KElzSW52YWxpZGF0ZWQpKSwKKyAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KGlzTm90SW52YWxpZGF0ZWQpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgY29udGludWF0aW9uKTsK
KworICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgp
CisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihKU1N0
YWNrOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50
Q291bnQoKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxl
R2V0U2NvcGUoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNGdW5jdGlvbl9zY29wZSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoKQorICAgIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNT
Y29wZV9uZXh0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldENsb3N1cmVWYXIo
KQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgK
KyAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAg
ICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbbV9ub2RlLT5zY29wZU9m
ZnNldCgpLm9mZnNldCgpXSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRDbG9z
dXJlVmFyKCkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAorICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwKKyAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJs
ZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUdldEZyb21Bcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSgK
KyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0
b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpXSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cygpCisgICAgeworICAgICAg
ICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
KSwKKyAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQoKS5vZmZzZXQoKV0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJl
RXEoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50NTJSZXBVc2UpCisg
ICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpCisgICAg
ICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpCisgICAgICAgICAg
ICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKQorICAgICAgICAgICAgfHwg
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpCisgICAgICAgICAgICB8fCBtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CisgICAgICAgICAgICBjb21waWxlQ29tcGFy
ZVN0cmljdEVxKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UsIE9iamVjdE9yT3Ro
ZXJVc2UpKSB7CisgICAgICAgICAgICBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QobV9u
b2RlLT5jaGlsZDIoKSwgbV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RPck90aGVyVXNlLCBPYmplY3RVc2UpKSB7CisgICAgICAgICAgICBjb21wYXJlRXFPYmpl
Y3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAgICAgICAgbm9uU3BlY3Vs
YXRpdmVDb21wYXJlKAorICAgICAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFy
ZUVxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgeworICAgICAgICAgICAgQVNTRVJU
KCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhl
cikpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUt
PmNoaWxkMigpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT3RoZXJVc2UpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhtX25vZGUtPmNo
aWxkMigpLCBTcGVjT3RoZXIpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JV
bmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsT3JV
bmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZHMiKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVx
KCkKKyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkp
IHsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwo
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
X25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkpIHsKKyAgICAgICAgICAgIEludDUy
S2luZCBraW5kOworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1Miht
X25vZGUtPmNoaWxkMSgpLCBraW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoRG91YmxlUmVwVXNl
KSkgeworICAgICAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5kb3Vi
bGVFcXVhbChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKSB7CisgICAg
ICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd1N0cmlu
Z0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMigp
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFRyaXZpYWxseUVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmlj
dEVxL1N0cmluZyBub3QgdHJpdmlhbGx5IGVxdWFsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJp
Y3RFcS9TdHJpbmcgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RUcml2aWFsbHlFcXVhbENhc2UpKTsK
KworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RU
cml2aWFsbHlFcXVhbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN0cmluZyhtX25vZGUtPmNoaWxkMigpLCByaWdodCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc3RyaW5nc0VxdWFs
KGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSwgVW50eXBlZFVzZSkpIHsKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCisgICAg
ICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksCisgICAg
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE9iamVjdFVzZSkpIHsKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAg
IGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2Up
KSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkp
LAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKSkgeworICAgICAgICAgICAgc2V0
Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dCb29sZWFuKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3ltYm9sVXNlKSkgeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dTeW1ib2wobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dTeW1ib2wobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgbGVmdFN0cmluZ0ltcGwgPSBtX291dC5s
b2FkUHRyKGxlZnQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHJpZ2h0LCBtX2hlYXBzLlN5bWJv
bF9wcml2YXRlTmFtZSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnRT
dHJpbmdJbXBsLCByaWdodFN0cmluZ0ltcGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE1pc2NV
c2UsIFVudHlwZWRVc2UpCisgICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlLCBNaXNjVXNlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFyVXNlKQorICAgICAgICAgICAgfHwgbV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoTm90U3RyaW5nVmFyVXNlLCBTdHJpbmdJZGVudFVzZSkpIHsK
KyAgICAgICAgICAgIEVkZ2UgbGVmdEVkZ2UgPSBtX25vZGUtPmNoaWxkRm9yKFN0cmluZ0lkZW50
VXNlKTsKKyAgICAgICAgICAgIEVkZ2UgcmlnaHRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihOb3RT
dHJpbmdWYXJVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxv
d1N0cmluZ0lkZW50KGxlZnRFZGdlKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodFZhbHVlID0g
bG93SlNWYWx1ZShyaWdodEVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIgaXMg
Y2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3Ry
aW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEgU3RyaW5nSWRl
bnQgdG8gTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5i
b29sZWFuRmFsc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IGlzQ2VsbChyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAorICAgICAgICAgICAg
ICAgIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Q2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RT
dHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc1N0cmluZyhyaWdodFZhbHVlLCBw
cm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShpc1N0cmluZ0Nh
c2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodCA9IG1fb3V0LmxvYWRQdHIocmlnaHRWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192
YWx1ZSk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChyaWdodEVkZ2UsIHJpZ2h0
VmFsdWUsIHJpZ2h0KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzU3RyaW5nUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgbm90U3RyaW5nUmVzdWx0
LCBpc1N0cmluZ1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCgp
CisgICAgeworICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gbV9ub2RlLT5jaGlsZDIoKS0+YXNK
U1ZhbHVlKCk7CisKKyAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCisgICAgeworICAgICAg
ICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmln
aHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVMZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUxlc3NFcSgpCisgICAgeworICAg
ICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NUaGFuT3JFcXVhbChsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZUxlc3NUaGFu
T3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvbXBhcmVH
cmVhdGVyKCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUoCisgICAgICAgICAgICBbJl0gKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZ3Jl
YXRlclRoYW4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5kb3VibGVHcmVhdGVyVGhhbihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVDb21wYXJlR3JlYXRlckVxKCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUoCisgICAgICAg
ICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdCgpCisgICAgewor
ICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmxvZ2ljYWxOb3QoYm9vbGlmeShtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCisgICAg
eworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
ID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKworICAgICAgICB1bnNp
Z25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJnczsK
KyAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBmcmFtZVNpemUpOworCisgICAgICAgIC8v
IEpTLT5KUyBjYWxsaW5nIGNvbnZlbnRpb24gcmVxdWlyZXMgdGhhdCB0aGUgY2FsbGVyIGFsbG93
cyB0aGlzIG11Y2ggc3BhY2Ugb24gdG9wIG9mIHN0YWNrIHRvCisgICAgICAgIC8vIGdldCB0cmFz
aGVkIGJ5IHRoZSBjYWxsZWUsIGV2ZW4gaWYgbm90IGFsbCBvZiB0aGF0IHNwYWNlIGlzIHVzZWQg
dG8gcGFzcyBhcmd1bWVudHMuIFdlIHRlbGwKKyAgICAgICAgLy8gQjMgdGhpcyBleHBsaWNpdGx5
IGZvciB0d28gcmVhc29uczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSB3aWxsIG9ubHkg
cGFzcyBmcmFtZVNpemUgd29ydGggb2Ygc3R1ZmYuCisgICAgICAgIC8vIC0gVGhlIHRyYXNoZWQg
c3RhY2sgZ3VhcmFudGVlIGlzIGxvZ2ljYWxseSBzZXBhcmF0ZSBmcm9tIHRoZSBhY3Qgb2YgcGFz
c2luZyBhcmd1bWVudHMsIHNvIHdlCisgICAgICAgIC8vICAgc2hvdWxkbid0IHJlbHkgb24gQWly
IHRvIGluZmVyIHRoZSB0cmFzaGVkIHN0YWNrIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBhcmd1bWVu
dHMgaXQgZW5kcworICAgICAgICAvLyAgIHVwIHNlZWluZy4KKyAgICAgICAgbV9wcm9jLnJlcXVl
c3RDYWxsQXJnQXJlYVNpemUoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgLy8gQ29sbGVj
dCB0aGUgYXJndW1lbnRzLCBzaW5jZSB0aGlzIGNhbiBnZW5lcmF0ZSBjb2RlIGFuZCB3ZSB3YW50
IHRvIGdlbmVyYXRlIGl0IGJlZm9yZSB3ZSBlbWl0CisgICAgICAgIC8vIHRoZSBjYWxsLgorICAg
ICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOworCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIEdQUjAgYmVjYXVzZSB0aGF0J3Mgd2hl
cmUgdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0IHRoZQorICAgICAgICAvLyBjYWxsZWUgdG8g
YmUuCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKKworICAgICAgICBhdXRvIGFkZEFyZ3Vt
ZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdpc3RlciByZWcsIGludCBvZmZzZXQp
IHsKKyAgICAgICAgICAgIGludHB0cl90IG9mZnNldEZyb21TUCA9CisgICAgICAgICAgICAgICAg
KHJlZy5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXQ7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KG9mZnNldEZyb21T
UCkpKTsKKyAgICAgICAgfTsKKworICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxlZSwgVmlydHVh
bFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIDApOworICAgICAgICBhZGRBcmd1bWVudChtX291
dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCksIFBheWxvYWRPZmZzZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtQXJnczsgKytpKQorICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
LCAwKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRj
aHBvaW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50
cyk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlv
bkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0
Y2hwb2ludCk7CisgICAgICAgIAorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChj
b2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVF
eGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOworCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFy
Z2V0VG9DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKDApKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
ID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHRhcmdldFRvQ2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCisgICAgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOworICAgICAgICB1bnNpZ25lZCBudW1BcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgQjMgdG8g
Z2l2ZSB1cyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB1c2luZyB3aGF0ZXZlciBtZWNoYW5pc20gaXQg
dGhpbmtzIGlzCisgICAgICAgIC8vIGNvbnZlbmllbnQuIFRoZSBnZW5lcmF0b3IgdGhlbiBzaHVm
ZmxlcyB0aG9zZSBhcmd1bWVudHMgaW50byBvdXIgb3duIGNhbGwgZnJhbWUsCisgICAgICAgIC8v
IGRlc3Ryb3lpbmcgb3VyIGZyYW1lIGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIGV4Y2VwdGlvbnMu
IEEgdGFpbCBjYWxsIGlzIG9ubHkgYQorICAgICAgICAvLyB0YWlsIGNhbGwgaWYgaXQgaXMgbm90
IGluc2lkZSBhIHRyeSBibG9jay4KKworICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4g
YXJndW1lbnRzOworCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShq
c0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7CisgICAgICAgICAgICAvLyBOb3Rl
OiB3ZSBjb3VsZCBsZXQgdGhlIHNodWZmbGVyIGRvIGJveGluZyBmb3IgdXMsIGJ1dCBpdCdzIG5v
dCBzdXBlciBjbGVhciB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8vIHdvdWxkIGJlIGJldHRlci4g
QWxzbywgaWYgd2Ugd2FudGVkIHRvIGRvIHRoYXQsIHRoZW4gd2UnZCBoYXZlIHRvIHRlYWNoIHRo
ZSBzaHVmZmxlcgorICAgICAgICAgICAgLy8gdGhhdCAzMi1iaXQgdmFsdWVzIGNvdWxkIGxhbmQg
YXQgNC1ieXRlIGFsaWdubWVudCBidXQgbm90IDgtYnl0ZSBhbGlnbm1lbnQuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY29uc3RyYWluZWRWYWx1ZSgKKyAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpKSwK
KyAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6V2FybUFueSk7CisgICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGNvbnN0cmFpbmVkVmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7CisKKyAgICAgICAgLy8gUHJldmVu
dCBhbnkgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHVzaW5nIHRoZSBzY3JhdGNoIHJlZ2lzdGVyLgor
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRlbGwgdGhlIHBh
dGNocG9pbnQgdGhhdCB3ZSB3aWxsIGNsb2JiZXIgcmVnaXN0ZXJzLCBzaW5jZSB3ZSB3b24ndCBy
ZXR1cm4KKyAgICAgICAgLy8gYW55d2F5LgorCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVE
YXRhIHNodWZmbGVEYXRhOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3RlckNvdW50OworICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKEdQUkluZm86OnJl
Z1QwLCBEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUFyZ3M7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CisKKyAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9j
aygpKTsKKworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRh
cmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFll
cywgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LiBZb3UgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9u
IGluIGEgaG9zdCBjYWxsIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vIHNsb3cgcGF0aC4gVGhh
dCdsbCByb3V0ZSB1cyB0byBsb29rdXBFeGNlcHRpb25IYW5kbGVyKCksIHdoaWNoIHVud2luZHMg
c3RhcnRpbmcKKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBjYWxsIHNpdGUgaW5kZXggb2Yg
b3VyIGZyYW1lLiBCYWQgdGhpbmdzIGhhcHBlbiBpZiBpdCdzIG5vdCBzZXQuCisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CisKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0
Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOworCisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
c2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKworICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIGNvZGVPcmlnaW4s
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd0NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncygpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBM
VmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIAor
ICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRyOworICAgICAgICBib29sIGZvcndh
cmRpbmcgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNh
c2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBmb3J3YXJkaW5nID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBm
b3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1c2UgYmVmb3JlIGFueSBjbG9iYmVy
aW5nIGhhcHBlbnMuCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChqc0NhbGxlZSwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBpZiAoanNBcmd1bWVudHMpCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoanNBcmd1bWVudHMpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIodGhpc0FyZyk7CisKKyAgICAgICAg
aWYgKCFmb3J3YXJkaW5nKSB7CisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZW0gYWdhaW4g
Zm9yIGFmdGVyIGNsb2JiZXJpbmcuIE5vdGUgdGhhdCB0aGUgY29tcGlsZXIgbWF5IGFzayB1cyB0
byB1c2UgYQorICAgICAgICAgICAgLy8gZGlmZmVyZW50IHJlZ2lzdGVyIGZvciB0aGUgbGF0ZSBm
b3IgdGhlIHBvc3QtY2xvYmJlcmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS4gVGhpcyBnaXZlcwor
ICAgICAgICAgICAgLy8gdGhlIGNvbXBpbGVyIGEgY2hhbmNlIHRvIHNwaWxsIHRoZXNlIHZhbHVl
cyB3aXRob3V0IGhhdmluZyB0byBidXJuIGFueSBjYWxsZWUtc2F2ZXMuCisgICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNBcmd1bWVudHMsIFZhbHVlUmVwOjpMYXRlQ29s
ZEFueSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQodGhpc0FyZywgVmFsdWVSZXA6
OkxhdGVDb2xkQW55KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNo
cG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworICAgICAgICAKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjYWxsIGFyZyBhcmVhIHN0YWNrIHNwYWNlIHRoYXQg
YWxsIEpTLT5KUyBjYWxscyBhbHdheXMgaGF2ZS4KKyAgICAgICAgdW5zaWduZWQgbWluaW11bUpT
Q2FsbEFyZWFTaXplID0KKyAgICAgICAgICAgIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisg
ICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCA1ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisKKyAgICAgICAgbV9wcm9jLnJlcXVlc3RD
YWxsQXJnQXJlYVNpemUobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUo
KTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3Jp
Z2luKTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNl
cHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4
aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRl
SW5kZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAg
ICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRh
KCk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IDE7CisgICAgICAgICAg
ICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1thcmdJbmRleCsrXS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY2FsbGVlR1BSID09IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0ganNBcmd1bWVudHMgPyBwYXJhbXNbYXJnSW5k
ZXgrK10uZ3ByKCkgOiBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIEdQUlJlZyB0aGlz
R1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOworCisgICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIGNhbGxlZUxhdGVSZXA7CisgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGFyZ3Vt
ZW50c0xhdGVSZXA7CisgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHRoaXNMYXRlUmVwOwor
ICAgICAgICAgICAgICAgIGlmICghZm9yd2FyZGluZykgeworICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBub3QgZm9yd2FyZGluZyB0aGVuIHdlJ2xsIG5lZWQgY2FsbGVlLCBhcmd1bWVu
dHMsIGFuZCB0aGlzIGFmdGVyIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgcG90ZW50
aWFsbHkgY2xvYmJlcmVkIGNhbGxlZUdQUiwgYXJndW1lbnRzR1BSLCBhbmQgdGhpc0dQUi4gT3Vy
IHRlY2huaXF1ZQorICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhpcyBpcyB0byBzdXBwbHkg
YWxsIG9mIHRob3NlIG9wZXJhbmRzIGFzIGxhdGUgdXNlcyBpbiBhZGRpdGlvbiB0bworICAgICAg
ICAgICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoZW0gYXMgZWFybHkgdXNlcy4gSXQncyBwb3Nz
aWJsZSB0aGF0IHRoZSBsYXRlIHVzZSB1c2VzIGEgc3BpbGwKKyAgICAgICAgICAgICAgICAgICAg
Ly8gd2hpbGUgdGhlIGVhcmx5IHVzZSB1c2VzIGEgcmVnaXN0ZXIsIGFuZCBpdCdzIHBvc3NpYmxl
IGZvciB0aGUgbGF0ZSBhbmQgZWFybHkKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlcyB0byB1
c2UgZGlmZmVyZW50IHJlZ2lzdGVycy4gV2UgZG8ga25vdyB0aGF0IHRoZSBsYXRlIHVzZXMgaW50
ZXJmZXJlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cyBhbmQgc28gd29uJ3QgdXNlIHRob3NlLCBidXQgdGhlIGVhcmx5IHVzZXMgbWF5IHVzZQorICAg
ICAgICAgICAgICAgICAgICAvLyB2b2xhdGlsZSByZWdpc3RlcnMgYW5kIGluIHRoZSBjYXNlIG9m
IGNhbGxlZUdQUiwgaXQncyBwaW5uZWQgdG8gcmVnVDAgc28gaXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZGVmaW5pdGVseSB3aWxsLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBiZSBzdXBlciBjYXJlZnVsIHdpdGgg
dGhlc2UuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAvLyB1
c2UgYSBzaHVmZmxpbmcgb2YgdGhlIHJlZ2lzdGVycyB1c2VkIGZvciBjYWxsZWVHUFIsIGFyZ3Vt
ZW50c0dQUiwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXNHUFIuIElmIHRoYXQgaGFw
cGVucyBhbmQgd2UgZG8gZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICBjYWxsZWVMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgY2Fs
bGVlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFyZ3VtZW50c0xhdGVSZXAuZW1p
dFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGVuIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGdhcmJhZ2UgaWYgY2Fs
bGVlTGF0ZVJlcC5ncHIoKSA9PSBhcmd1bWVudHNHUFIgYW5kCisgICAgICAgICAgICAgICAgICAg
IC8vIGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgPT0gY2FsbGVlR1BSLgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhIHZhcmlldHkgb2YgdGhpbmdz
IHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gRm9yIGV4YW1wbGUsIHdlIHVzZQorICAg
ICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRlUmVwIGJlZm9yZSBuZWVkaW5nIHRoZSBv
dGhlciB0d28gYW5kIGFmdGVyIHdlJ3ZlIGFscmVhZHkgc3RvcHBlZAorICAgICAgICAgICAgICAg
ICAgICAvLyB1c2luZyB0aGUgKkdQUnMuIEFsc28sIHdlIHBpbiBjYWxsZWVHUFIgdG8gcmVnVDAs
IGFuZCByZWx5IG9uIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlICpM
YXRlUmVwcyBjYW5ub3QgdXNlIHZvbGF0aWxlIHJlZ2lzdGVycyAoc28gdGhleSBjYW5ub3QgYmUg
cmVnVDAsIHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZUdQUiAhPSBhcmd1bWVudHNM
YXRlUmVwLmdwcigpIGFuZCBjYWxsZWVHUFIgIT0gdGhpc0xhdGVSZXAuZ3ByKCkpLgorICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBBbiBhbHRlcm5hdGl2ZSB3
b3VsZCBoYXZlIGJlZW4gdG8ganVzdCB1c2UgZWFybHkgdXNlcyBhbmQgZWFybHktY2xvYmJlciBh
bGwKKyAgICAgICAgICAgICAgICAgICAgLy8gdm9sYXRpbGUgcmVnaXN0ZXJzLiBCdXQgdGhhdCB3
b3VsZCBmb3JjZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgaW50bworICAgICAgICAgICAg
ICAgICAgICAvLyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZXZlbiBpZiB3ZSBoYXZlIHRvIHNwaWxs
IHRoZW0uIFdlIGRvbid0IHdhbnQgc3BpbGxpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
dXNlIHVwIHRocmVlIGNhbGxlZS1zYXZlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gVEw7RFI6IFRoZSB3YXkgd2UgdXNlIExhdGVSZXBzIGhlcmUgaXMg
ZGFuZ2Vyb3VzIGFuZCBiYXJlbHkgd29ya3MgYnV0IGFjaGlldmVzCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNvbWUgZGVzaXJhYmxlIHBlcmZvcm1hbmNlIHByb3BlcnRpZXMsIHNvIGRvbid0IG1p
c3Rha2UgdGhlIGNsZXZlcm5lc3MgZm9yCisgICAgICAgICAgICAgICAgICAgIC8vIGVsZWdhbmNl
LgorICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4Kytd
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4
KytdOworICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsr
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgc29tZSBzY3Jh
dGNoIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
OworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAg
ICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlTGF0ZVJl
cC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVM
YXRlUmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGF0ZVJlcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNMYXRl
UmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0xhdGVSZXAuaXNSZWcoKSkKKyAg
ICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQodGhpc0xhdGVSZXAucmVnKCkpOwor
ICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjMgPSBmb3J3YXJkaW5nID8gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpIDogSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWxs
b2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgYXV0
byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhB
c3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZh
ckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRv
IGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxTdGFj
a0hlaWdodCA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZm9yd2FyZGluZykgeworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPmNoaWxkMigpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nh
c2UpOworCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0
Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERpZE5vdFRocm93KTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0
KTsKKworICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFjayhzY3JhdGNoR1BSMik7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJh
dGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKKworICAgICAgICAgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVp
Z2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BS
MSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1pbmltdW1KU0NhbGxBcmVh
U2l6ZSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3Jh
dGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBh
ZGp1c3RTdGFjayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIEdQUkluZm86OnJlZ1QwKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBub3QgZW1pdCBjb2RlIGlmIHRoaXNHUFIgZ290
IGEgY2FsbGVlLXNhdmUuIEFsc28sIHdlJ3JlIGd1YXJhbnRlZWQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCB0aGlzR1BSICE9IEdQUkluZm86OnJlZ1QwIGJlY2F1c2UgcmVnVDAgaW50ZXJm
ZXJlcyB3aXRoIGl0LgorICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJlcC5lbWl0UmVzdG9y
ZShqaXQsIHRoaXNHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpj
YWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJn
cyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAg
ICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZh
cmFyZ3M7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxs
ID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFi
ZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGw7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwg
PSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Y2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKKyAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbGlua0NhbGwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlu
a0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
c2xvd0NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZih0YXJnZXRUb0NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9p
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1l
bnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIExW
YWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQzMiwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwganNBcmd1bWVudHMs
CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFu
IGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAv
LyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3Vi
dGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4g
VGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0
aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQo
bGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
IFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgbV9vdXQu
YWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywg
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTGFvZFZh
cmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIG9mIGEgVmlydHVh
bFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKKyAgICAgICAgTFZhbHVl
IG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKKyAgICAgICAgCisgICAgICAgIHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNhc3RUb0lu
dDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9m
ZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0
b3J5TWluaW11bSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJn
cygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAg
ICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNh
bGxGcmFtZSkudmFsdWU7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9v
dXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxIC0gZGF0YS0+b2Zmc2V0KSk7CisgICAg
ICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRB
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBMVmFsdWUgdGFyZ2V0U3Rh
cnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKKworICAgICAgICBM
QmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJk
VmFyYXJncyB1bmRlZmluZWQgbG9vcCBib2R5IikpOworICAgICAgICBMQmFzaWNCbG9jayBtYWlu
TG9vcEVudHJ5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxv
b3AgZW50cnkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG1haW5Mb29wID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxvb3AgYm9keSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFy
YXJncyBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoQXNQ
dHIgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsb29wQm91bmRW
YWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBsb29wQm91bmQgPSBtX291dC5hbmNob3IobG9vcEJvdW5kVmFsdWUp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShsb29wQm91
bmRWYWx1ZSwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShtYWlu
TG9vcEVudHJ5KSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIG1haW5Mb29wRW50cnkpOworICAgICAgICBMVmFs
dWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGxvb3BCb3VuZCk7Cisg
ICAgICAgIExWYWx1ZSBjdXJyZW50SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9v
dXQuaW50UHRyT25lKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKKyAgICAgICAgICAg
IG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJ
bmRleCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBtX291dC5hbmNob3Io
Y3VycmVudEluZGV4KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0lu
ZGV4LCBuZXh0SW5kZXgpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5hYm92ZShjdXJyZW50SW5kZXgsIGxlbmd0aEFzUHRyKSwgdW5zdXJlKHVuZGVmaW5lZExvb3Ap
LCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obWFpbkxvb3BFbnRyeSwgbWFpbkxvb3ApOworICAgICAgICBsb29wQm91bmQgPSBtX291dC5h
bmNob3IobGVuZ3RoQXNQdHIpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChs
ZW5ndGhBc1B0ciksIHVuc3VyZShtYWluTG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5Mb29wLCBjb250aW51YXRpb24pOwor
ICAgICAgICBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgbG9vcEJvdW5k
KTsKKyAgICAgICAgY3VycmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0
LmludFB0ck9uZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAgICAg
ICAgICAgIG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLnZhcmlhYmxl
cywgc291cmNlU3RhcnQsCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGN1cnJlbnRJbmRleCwg
bV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+b2Zmc2V0KSkpKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwg
Y3VycmVudEluZGV4KSk7CisgICAgICAgIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihjdXJyZW50
SW5kZXgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5l
eHRJbmRleCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwoY3VycmVudEluZGV4
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShtYWluTG9vcCkpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlSnVtcCgpCisgICAgeworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2Nr
KG1fbm9kZS0+dGFyZ2V0QmxvY2soKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVC
cmFuY2goKQorICAgIHsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgYm9vbGlm
eShtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIFdlaWdodGVkVGFyZ2V0KAorICAgICAg
ICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jayksCisg
ICAgICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmNvdW50KSwKKyAgICAg
ICAgICAgIFdlaWdodGVkVGFyZ2V0KAorICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+
YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayksCisgICAgICAgICAgICAgICAgbV9ub2RlLT5i
cmFuY2hEYXRhKCktPm5vdFRha2VuLmNvdW50KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVN3aXRjaCgpCisgICAgeworICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbV9ub2RlLT5z
d2l0Y2hEYXRhKCk7CisgICAgICAgIHN3aXRjaCAoZGF0YS0+a2luZCkgeworICAgICAgICBjYXNl
IFN3aXRjaEltbTogeworICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBpbnRW
YWx1ZXM7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzd2l0Y2hPbkludHMgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaW50IGNhc2UiKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obV9vdXQu
bV9ibG9jaywgc3dpdGNoT25JbnRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlVz
ZTogeworICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChzd2l0
Y2hPbkludHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0
Y2hJbW0gaXMgaW50IikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW50ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoSW1tIGlzIG5vdCBpbnQiKSk7Cisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNEb3VibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgZG91YmxlIikpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExWYWx1ZSBib3hlZFZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihib3hlZFZhbHVl
KSwgdW5zdXJlKGlzTm90SW50KSwgdW5zdXJlKGlzSW50KSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzSW50LCBpc05vdEludCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50
VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMihib3hlZFZhbHVlKSkpOworICAg
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRzKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc05vdEludCwgaXNEb3VibGUpOworICAg
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgaXNDZWxsT3JN
aXNjKGJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAg
ICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHJh
cmVseShpc0RvdWJsZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZShib3hlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgaW50SW5Eb3VibGUgPSBtX291dC5kb3VibGVUb0ludChkb3VibGVWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IoaW50SW5Eb3VibGUp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmRvdWJsZUVxdWFsKG1fb3V0LmludFRvRG91YmxlKGludEluRG91YmxlKSwgZG91YmxlVmFs
dWUpLAorICAgICAgICAgICAgICAgICAgICB1bnN1cmUoc3dpdGNoT25JbnRzKSwgdW5zdXJlKGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN3aXRjaE9uSW50cywgbGFzdE5leHQpOworICAg
ICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50MzIsIG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW50VmFsdWVzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogeworICAgICAgICAgICAgTFZhbHVlIHN0cmlu
Z1ZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVz
ZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB1bnN1cmUoKSBmb3IgdGhlIGJyYW5jaCB3ZWlnaHQKKyAg
ICAgICAgICAgIC8vIG9mIHRoZSBmYWxsVGhyb3VnaCBibG9jay4gVGhlIG1haW4gY2hhbGxlbmdl
IGlzIGp1c3QgdGhhdCB3ZSBoYXZlIG11bHRpcGxlCisgICAgICAgICAgICAvLyBicmFuY2hlcyB0
byBmYWxsVGhyb3VnaCBidXQgYSBzaW5nbGUgY291bnQsIHNvIHdlIHdvdWxkIG5lZWQgdG8gZGl2
dnkgaXQgdXAKKyAgICAgICAgICAgIC8vIGFtb25nIHRoZSBkaWZmZXJlbnQgbG93ZXJlZCBicmFu
Y2hlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjkwODIKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKKyAgICAg
ICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSB1bmJv
eGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIGNlbGwiKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gv
U3dpdGNoQ2hhciBpcyBzdHJpbmciKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc05vdENlbGwodW5ib3hlZFZh
bHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
dW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc0NlbGxD
YXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAg
ICAgICAgICAgIExWYWx1ZSBjZWxsVmFsdWUgPSB1bmJveGVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc05vdFN0cmluZyhjZWxsVmFs
dWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAgICAgICAgICAgICB1
bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzU3RyaW5n
Q2FzZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGlzU3RyaW5nQ2FzZSwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0g
Y2VsbFZhbHVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxlbmd0aElzMSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgbGVu
Z3RoIGlzIDEiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWVkUmVzb2x1dGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgcmVzb2x1dGlvbiIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHJlc29sdmVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2hhciByZXNvbHZlZCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
OEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgOGJpdCIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlN3aXRjaC9Td2l0Y2hDaGFyIDE2Yml0IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBjb250
aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUobGVuZ3RoSXMx
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obGVuZ3RoSXMxLCBuZWVkUmVzb2x1dGlvbik7CisgICAgICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHZhbHVlczsKKyAgICAgICAgICAgIExWYWx1ZSBmYXN0VmFs
dWUgPSBtX291dC5sb2FkUHRyKHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsK
KyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGZhc3RWYWx1ZSkpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChmYXN0VmFsdWUpLCByYXJlbHkobmVl
ZFJlc29sdXRpb24pLCB1c3VhbGx5KHJlc29sdmVkKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5lZWRSZXNvbHV0aW9uLCByZXNvbHZlZCk7CisgICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9v
dXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVJvcGUpLCBtX2NhbGxG
cmFtZSwgc3RyaW5nVmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKHJlc29sdmVkKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVzb2x2ZWQsIGlzOEJp
dCk7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCB2
YWx1ZXMpOworICAgICAgICAgICAgTFZhbHVlIGNoYXJhY3RlckRhdGEgPSBtX291dC5sb2FkUHRy
KHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
KSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFn
SXM4Qml0KCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXM4Qml0KSwgdW5zdXJlKGlzMTZC
aXQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAy
PiBjaGFyYWN0ZXJzOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0
KTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5sb2Fk
OFplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnM4WzBdKSkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
Y2hhcmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQxNlplcm9FeHQzMihjaGFy
YWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnMxNlswXSkpKTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBidWlsZFN3aXRjaChk
YXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0LmludDMyLCBjaGFyYWN0ZXJzKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgU3dp
dGNoU3RyaW5nOiB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisgICAgICAgICAgICBjYXNlIFN0cmluZ0lkZW50VXNlOiB7CisgICAgICAgICAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2Fz
ZXM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0
LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmluZ0ltcGwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJsb2NrID0gbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0u
dGFyZ2V0LmJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgV2VpZ2h0IHdlaWdodCA9IFdlaWdo
dChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpOworICAgICAgICAgICAgICAgICAgICBjYXNl
cy5hcHBlbmQoU3dpdGNoQ2FzZSh2YWx1ZSwgYmxvY2ssIHdlaWdodCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zd2l0Y2hJbnN0
cnVjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nSW1wbCwgY2FzZXMsIGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgV2VpZ2h0KGRh
dGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIFVudHlwZWQgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQmxvY2sgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgVW50eXBlZCBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSks
CisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxCbG9jayksIHVuc3VyZShsb3dCbG9j
ayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbEJsb2Nr
LCBpc1N0cmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBl
KG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGlzU3RyaW5n
QmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdCbG9j
aywgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaFN0
cmluZyhkYXRhLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTd2l0Y2hDZWxsOiB7CisgICAgICAgICAg
ICBMVmFsdWUgY2VsbDsKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgICAgIGNl
bGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENlbGwgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5z
dXJlKGNlbGxDYXNlKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlKTsKKyAgICAgICAgICAg
ICAgICBjZWxsID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1
aWxkU3dpdGNoKG1fbm9kZS0+c3dpdGNoRGF0YSgpLCBtX291dC5pbnRQdHIsIGNlbGwpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlUmV0dXJuKCkKKyAgICB7CisgICAgICAgIG1fb3V0LnJldChsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRm9yY2VP
U1JFeGl0KCkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUaHJvdygpCisgICAgeworICAgICAgICB0ZXJt
aW5hdGUoVW5jb3VudGFibGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnZhbGlk
YXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOworCisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOworICAgICAgICAKKyAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsK
KyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9
IG1fb3JpZ2luOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRDb2xkQW55cyhidWlsZEV4aXRB
cmd1bWVudHMoZGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQsIG5vVmFsdWUoKSkpOworICAgICAg
ICAKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisKKyAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIE1hY3JvQXNzZW1ibGVyIGtub3dzIG1vcmUgYWJvdXQgdGhpcyB0aGFuIEIz
IGRvZXMuIFRoZSB3YXRjaHBvaW50TGFiZWwoKSBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyB3
aWxsIGVuc3VyZSB0aGF0IHRoaXMgaXMgZm9sbG93ZWQgYnkgYSBub3Agc2hhZG93IGJ1dCBvbmx5
IHdoZW4gdGhpcyBpcyBhY3R1YWxseQorICAgICAgICAgICAgICAgIC8vIG5lY2Vzc2FyeS4KKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxhYmVsID0gaml0LndhdGNocG9pbnRM
YWJlbCgpOworCisgICAgICAgICAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9
IGRlc2NyaXB0b3ItPmVtaXRPU1JFeGl0TGF0ZXIoCisgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIG9yaWdpbiwgcGFyYW1zKTsKKworICAgICAgICAg
ICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gc3RhdGUtPmppdENvZGUuZ2V0KCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgSnVt
cFJlcGxhY2VtZW50IGp1bXBSZXBsYWNlbWVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoanVtcFJl
cGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3VzIHRoaW5ncy4KKyAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc0xvY2FsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFk
c0xvY2FsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgaG93IHdl
IHRlbGwgQjMgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGp1bXAgcmVwbGFjZW1lbnQuCisgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgIAor
ICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29tZSBwcmlvciBicmFuY2ggdG8gZGV0
ZXJtaW5lIHRoZSBzYWZldHkgb2YgdGhpcyBvcGVyYXRpb24uIEl0J3MgYWx3YXlzCisgICAgICAg
IC8vIGZpbmUgdG8gZXhlY3V0ZSB0aGlzIG9uIHNvbWUgcGF0aCB0aGF0IHdvdWxkbid0IGhhdmUg
b3JpZ2luYWxseSBleGVjdXRlZCBpdCBiZWZvcmUKKyAgICAgICAgLy8gb3B0aW1pemF0aW9uLgor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQgPSBmYWxzZTsKKwor
ICAgICAgICAvLyBJZiB0aGlzIGZhbGxzIHRocm91Z2ggdGhlbiBpdCB3b24ndCB3cml0ZSBhbnl0
aGluZy4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoKTsK
KworICAgICAgICAvLyBXaGVuIHRoaXMgYWJydXB0bHkgdGVybWluYXRlcywgaXQgY291bGQgcmVh
ZCBhbnkgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9
IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUlzVW5kZWZp
bmVkKCkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9u
b2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlSXNCb29sZWFuKCkKKyAgICB7CisgICAgICAgIHNldEJv
b2xlYW4oaXNCb29sZWFuKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSXNOdW1i
ZXIoKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihpc051bWJlcihsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUlzU3RyaW5nKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc1N0cmluZyBjZWxs
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiSXNTdHJpbmcgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpc1N0cmluZyh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90
Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzT2Jq
ZWN0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiSXNPYmplY3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0IGNvbnRpbnVhdGlv
biIpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShp
c0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpc09iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5v
dENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc09i
amVjdE9yTnVsbCgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICAKKyAgICAgICAgRWRnZSBjaGlsZCA9IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2lj
QmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNP
YmplY3RPck51bGwgb2JqZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRo
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBzbG93IHBhdGgiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJ
c09iamVjdE9yTnVsbCBub3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGNlbGxDYXNlLCBub3RGdW5jdGlvbkNhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpc0Z1
bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUo
Y2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVu
Y3Rpb25DYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlv
bkNhc2UsIG9iamVjdENhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RPYmplY3RSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAg
ICAgICAgICAgIHVuc3VyZShvYmplY3RDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4b3RpY0Zv
clR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNs
b3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0s
IHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ub3RaZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxD
YXNlLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgbm90Q2VsbFJlc3VsdFZhbHVlID0g
bV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG5vdENlbGxSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgbV9v
dXQuYm9vbGVhbiwKKyAgICAgICAgICAgIGlzRnVuY3Rpb25SZXN1bHQsIG5vdE9iamVjdFJlc3Vs
dCwgb2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0LCBub3RDZWxsUmVzdWx0KTsKKyAgICAgICAgc2V0
Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAg
ICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjZWxsIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiSXNGdW5jdGlvbiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gc2xvdyBwYXRoIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzRnVuY3Rpb24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2Up
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZnVuY3Rp
b25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxk
KSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9u
Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNl
LCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAg
ICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAg
ICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlv
biwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpKTsKKyAgICAgICAgICAgIH0sIHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQs
IGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBzZXRC
b29sZWFuKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVR5cGVPZigpCisg
ICAgeworICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlR5cGVPZiBjb250aW51
YXRpb24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2s+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBidWlsZFR5cGVPZigKKyAg
ICAgICAgICAgIGNoaWxkLCB2YWx1ZSwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2lu
dGVyKHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlSW4oKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9k
ZTsKKyAgICAgICAgRWRnZSBiYXNlID0gbm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChiYXNlKTsKKyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2Rl
LT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJ
bXBsKCktPmlzQXRvbWljKCkpIHsKKyAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
c3RyID0gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1
ZUltcGwoKSk7CisgICAgICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihjZWxsKTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisKKyAgICAgICAg
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
cGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHBhcmFtc1swXS5ncHIoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCktPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50
OF90PihyZXN1bHRHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNo
LnVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIGp1bXAgPSBqaXQu
cGF0Y2hhYmxlSnVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQu
bGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMsIG51bGxwdHIsIG9wZXJhdGlvbkluT3B0aW1pemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHVi
SW5mbyksIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUg
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihk
b25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxv
Y2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gCisKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25HZW5lcmljSW4pLCBtX2NhbGxGcmFtZSwgY2VsbCwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZU92ZXJy
aWRlc0hhc0luc3RhbmNlKCkKKyAgICB7CisgICAgICAgIEpTRnVuY3Rpb24qIGRlZmF1bHRIYXNJ
bnN0YW5jZUZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmNlbGxPcGVyYW5k
KCktPnZhbHVlKCkpOworCisgICAgICAgIExWYWx1ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgZGVmYXVsdEhhc0luc3Rh
bmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBTeW1ib2wu
aGFzSW5zdGFuY2UgaXMgZGVmYXVsdCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBjb250aW51
YXRpb24iKSk7CisKKyAgICAgICAgLy8gVW5saWtlIGluIHRoZSBERkcsIHdlIGRvbid0IHdvcnJ5
IGFib3V0IGNsZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBw
cm92ZW4gdGhlIGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25zdGFudCBhcyBMTFZNIHNob3VsZCBm
aXggaXQgZm9yIHVzLgorCisgICAgICAgIEFTU0VSVCghbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkt
PmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPT0gbV9ub2Rl
LT5jaGlsZDIoKS5ub2RlKCktPmFzQ2VsbCgpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBu
b3REZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRy
dWUpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1YWwoaGFzSW5zdGFuY2UsIG1f
b3V0LmNvbnN0SW50UHRyKGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uKSksIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUoZGVmYXVsdEhhc0luc3RhbmNlKSk7CisKKyAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkZWZhdWx0SGFzSW5zdGFuY2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY29uc3RydWN0b3IsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2VSZXN1bHQsIG5vdERlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCkpOworICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpCisgICAgeworICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICBCYWRUeXBlSW5mb0ZsYWdzLCBub1ZhbHVlKCksIDAsCisgICAgICAg
ICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJv
RXh0MzIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9G
bGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPnR5cGVJbmZv
T3BlcmFuZCgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mKCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBjZWxsID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgcHJvdG90eXBlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkluc3Rh
bmNlT2YgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGxvb3AiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFlldEluc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIG5vdCB5ZXQg
aW5zdGFuY2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgY29uZGl0aW9uOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IGlzQ2VsbChjZWxs
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIAorICAgICAgICBWYWx1
ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxz
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24sIHVuc3VyZShpc0NlbGxDYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBsb29wKTsKKyAgICAgICAgCisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBub1ZhbHVlKCksIDAsIGlzTm90T2JqZWN0KHByb3RvdHlw
ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgb3JpZ2luYWxWYWx1ZSA9IG1fb3V0LmFuY2hvcihjZWxsKTsKKyAgICAgICAg
bV9vdXQuanVtcChsb29wKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3As
IG5vdFlldEluc3RhbmNlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQucGhpKG1fb3V0
LmludDY0LCBvcmlnaW5hbFZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRT
dHJ1Y3R1cmUodmFsdWUpOworICAgICAgICBMVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fb3V0
LmxvYWQ2NChzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3Byb3RvdHlwZSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGlzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVh
bChjdXJyZW50UHJvdG90eXBlLCBwcm90b3R5cGUpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRp
bnVhdGlvbiksIHVuc3VyZShub3RZZXRJbnN0YW5jZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90WWV0SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vdEluc3RhbmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5G
YWxzZSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkodmFsdWUsIG1fb3V0LmFuY2hv
cihjdXJyZW50UHJvdG90eXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoY3VycmVu
dFByb3RvdHlwZSksIHVuc3VyZShsb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90
Q2VsbFJlc3VsdCwgaXNJbnN0YW5jZVJlc3VsdCwgbm90SW5zdGFuY2VSZXN1bHQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9tKCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVxdWFsKG1fb3V0LmNvbnN0SW50MzIo
MCksIHZtQ2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20pLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0YW5jZSkp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvdW50RXhlY3V0aW9uKCkKKyAgICB7
CisgICAgICAgIFR5cGVkUG9pbnRlciBjb3VudGVyID0gbV9vdXQuYWJzb2x1dGUobV9ub2RlLT5l
eGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQobV9v
dXQuYWRkKG1fb3V0LmxvYWQ2NChjb3VudGVyKSwgbV9vdXQuY29uc3RJbnQ2NCgxKSksIGNvdW50
ZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIoKQorICAgIHsK
KyAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBM
VmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAg
ICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPworICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hvbGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhh
c0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjaGVjayBob2xlIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4
ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQ
cm9wZXJ0eSBpbnQvY29udGlndW91cyBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgIGlm
ICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja0hvbGUpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2hlY2tIb2xlKTsKKworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVja0hvbGUsIHNsb3dD
YXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVSZXN1bHRWYWx1ZSA9CisgICAgICAg
ICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgoaGVhcCwgc3Rv
cmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2hlY2tIb2xlUmVzdWx0VmFsdWUp
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJlc3VsdFZhbHVlLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAor
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFw
ID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIb2xlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJ
bmRleGVkUHJvcGVydHkgZG91YmxlIGNoZWNrIGhvbGUiKSk7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5
IGRvdWJsZSBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3VibGUgY29u
dGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5C
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgICAgIHJhcmVseShzbG93
Q2FzZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xlLCBzbG93Q2FzZSk7CisgICAgICAg
ICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2FkRG91YmxlKGJhc2VJbmRleChoZWFw
LCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAgTFZhbHVl
IGNoZWNrSG9sZVJlc3VsdFZhbHVlID0gbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoZWNrSG9sZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCisgICAgICAgICAg
ICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOworICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNH
ZW5lcmljUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1l
LCBiYXNlLCBwcm9wZXJ0eSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY29ycmVjdFN0cnVjdHVyZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJvcGVydHkgY29ycmVjdCBzdHJ1Y3R1
cmUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdyb25nU3RydWN0dXJlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSB3cm9uZyBzdHJ1Y3R1cmUiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFz
U3RydWN0dXJlUHJvcGVydHkgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwK
KyAgICAgICAgICAgIHJhcmVseSh3cm9uZ1N0cnVjdHVyZSksIHVzdWFsbHkoY29ycmVjdFN0cnVj
dHVyZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
Y29ycmVjdFN0cnVjdHVyZSwgd3JvbmdTdHJ1Y3R1cmUpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb3JyZWN0U3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVl
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHdyb25nU3RydWN0dXJlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21C
bG9jayB3cm9uZ1N0cnVjdHVyZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkpLCBtX2NhbGxG
cmFtZSwgYmFzZSwgcHJvcGVydHkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgY29ycmVjdFN0cnVjdHVy
ZVJlc3VsdCwgd3JvbmdTdHJ1Y3R1cmVSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVHZXREaXJlY3RQbmFtZSgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAg
ICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDMpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY2hlY2sgb2Zmc2V0IikpOworICAgICAgICBMQmFz
aWNCbG9jayBpbmxpbmVMb2FkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFt
ZSBpbmxpbmUgbG9hZCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZMaW5lTG9hZCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgb3V0LW9mLWxpbmUgbG9hZCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdl
dERpcmVjdFBuYW1lIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFtZSBjb250aW51YXRpb24i
KSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAg
bV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwg
dXN1YWxseShjaGVja09mZnNldCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oY2hlY2tPZmZzZXQsIGlubGluZUxvYWQpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSwK
KyAgICAgICAgICAgIHVuc3VyZShvdXRPZkxpbmVMb2FkKSwgdW5zdXJlKGlubGluZUxvYWQpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAg
ICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRB
bnlOdW1iZXIoKSwgCisgICAgICAgICAgICAgICAgYmFzZSwgbV9vdXQuemVyb0V4dChpbmRleCwg
bV9vdXQuaW50NjQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7CisgICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOworICAgICAgICBMVmFsdWUgcmVhbElu
ZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKKyAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5z
dWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAg
ICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5saW5lUmVzdWx0LCBv
dXRPZkxpbmVSZXN1bHQsIHNsb3dDYXNlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpCisgICAgeworICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0Lmxv
YWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExl
bmd0aCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigp
CisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKSwgbV9jYWxsRnJhbWUsIGJhc2UpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGluIGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZSBvdXQgb2YgYm91bmRzIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZSBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGlu
ZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAorICAgICAgICAgICAgdXN1YWxseShp
bkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKKyAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3IpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBpbkJvdW5k
c1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVH
ZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3Vu
ZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgaW4g
Ym91bmRzIikpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSBvdXQgb2YgYm91bmRzIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSks
CisgICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91dE9mQm91bmRzKSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywg
b3V0T2ZCb3VuZHMpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvcik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNv
bnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91
bmRzLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvSW5k
ZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHN0
cnVjdHVyZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKAorICAgICAgICAgICAgc3RydWN0dXJlLCBub1ZhbHVlKCksIEJhZENhY2hlLCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVO
ZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0
YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAKKyAgICAg
ICAgLy8gTG93ZXIgdGhlIHZhbHVlcyBmaXJzdCwgdG8gYXZvaWQgY3JlYXRpbmcgdmFsdWVzIGlu
c2lkZSBhIGNvbnRyb2wgZmxvdyBkaWFtb25kLgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPExW
YWx1ZSwgOD4gdmFsdWVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5t
X3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOworICAgICAgICAKKyAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSBtX25vZGUtPnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAxPiBibG9ja3Moc2V0LnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBkdW1teURlZmF1bHQgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGRlZmF1bHQgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNhc2VzW2ld
ID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEp
KTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBsb3dDZWxs
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNhc2VzLCBkdW1teURlZmF1bHQsIFdl
aWdodCgwKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBvdXRlckxhc3ROZXh0ID0g
bV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDE+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkg
KyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBkdW1teURlZmF1bHQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsKKyAgICAgICAgICAgIExWYWx1ZSBi
dXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCku
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGgg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2Jq
ZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmpl
Y3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVu
ZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0
QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxv
Y2F0ZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2Nh
dG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIHNsb3dQYXRoKTsKKworICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291dC5hbmNob3IoZmFzdE9i
amVjdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICAg
ICAgTFZhbHVlIHNsb3dPYmplY3RWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAg
ICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Ioc2xvd09iamVjdFZhbHVlKTsK
KyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3RWYWx1ZSwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlYXN5IGNh
c2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2NhdGlvbiwgd2Ugc2ltcGx5IGFsbG9j
YXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0byBkaXJlY3RseSBoYXZlIHRoZSBk
ZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVj
dChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERv
bid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5n
ZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVt2YWx1ZS5tX2lk
ZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlc1tpXSwgYmFzZSwgdmFs
dWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1bHQsIG91dGVyQ29udGludWF0aW9u
KTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1bHRzKSk7CisgICAgfQorCisgICAg
dm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCkKKyAgICB7CisgICAgICAg
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEoKTsKKworICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMiArIGkpKSk7CisKKyAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbCht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFi
bGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKKyAgICAgICAgQVNTRVJU
KHRhYmxlID09IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS0+Y2FzdENvbnN0YW50PFN5
bWJvbFRhYmxlKj4oKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0
dXJlKCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJp
YWxpemVDcmVhdGVBY3RpdmF0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisK
KyAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0xleGljYWxFbnZp
cm9ubWVudD4oCisgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNp
emUodGFibGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKworICAg
ICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1Njb3BlX25l
eHQpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcih0YWJsZSksIGZhc3RPYmpl
Y3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1ib2xUYWJsZSk7CisKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIFdlIGVuc3VyZSBhbGxvY2F0
aW9uIHNpbmtpbmcgZXhwbGljdGx5IHNldHMgYm90dG9tIHZhbHVlcyBmb3IgYWxsIGZpZWxkIG1l
bWJlcnMuIAorICAgICAgICAvLyBUaGVyZWZvcmUsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgSlNW
YWx1ZSB3ZSBwYXNzIGluIGFzIHRoZSBpbml0aWFsaXphdGlvbiB2YWx1ZQorICAgICAgICAvLyBi
ZWNhdXNlIGFsbCBmaWVsZHMgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgLy8gRklYTUU6
IEl0IG1heSBiZSB3b3J0aCBjcmVhdGluZyBhbiBvcGVyYXRpb24gdGhhdCBjYWxscyBhIGNvbnN0
cnVjdG9yIG9uIEpTTGV4aWNhbEVudmlyb25tZW50IHRoYXQgCisgICAgICAgIC8vIGRvZXNuJ3Qg
aW5pdGlhbGl6ZSBldmVyeSBzbG90IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gZG8gdGhh
dCBoZXJlLgorICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisgICAgICAgICAgICB9LCBz
Y29wZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSAgbV9vdXQuYW5jaG9y
KGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1
ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKSA9
PSB0YWJsZS0+c2NvcGVTaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LnN0b3Jl
NjQodmFsdWVzW2ldLAorICAgICAgICAgICAgICAgIGFjdGl2YXRpb24sCisgICAgICAgICAgICAg
ICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tkYXRhLm1fcHJvcGVydGll
c1tpXS5tX2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWxp
ZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUg
ZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUgaGFzIG9uZSB2YWx1ZS4KKyAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgZm9yIChh
dXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5kID0gdGFibGUtPmVuZChsb2NrZXIp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJv
cGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFs
dWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA9PSBkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50
aWZpZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5k
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoYWN0aXZh
dGlvbik7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCkKKyAg
ICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHRpbWVyRGlkRmlyZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIHRpbWVyIGRpZCBmaXJlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrV2F0Y2hk
b2dUaW1lciBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc3RhdGUg
PSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0ZSh2bSgpLndhdGNoZG9nKCktPnRp
bWVyRGlkRmlyZUFkZHJlc3MoKSkpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIoc3RhdGUpLAorICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkodGlt
ZXJEaWRGaXJlKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyh0aW1lckRpZEZpcmUsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbGF6eVNsb3dQYXRo
KAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVmUHRyPExh
enlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIsIEludmFsaWRHUFJS
ZWcpOworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgIH0KKworICAgIExWYWx1ZSBkaWRPdmVyZmxvd1N0YWNrKCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIGxlYWYgZnVuY3Rpb24gYW5hbHlzaXMuIFRoZSBp
bnZhcmlhbnQgb2YgRlRMIGNhbGwKKyAgICAgICAgLy8gZnJhbWVzIGlzIHRoYXQgdGhlIGNhbGxl
ciBoYWQgYWxyZWFkeSBkb25lIGVub3VnaCBvZiBhIHN0YWNrIGNoZWNrIHRvCisgICAgICAgIC8v
IHByb3ZlIHRoYXQgdGhpcyBjYWxsIGZyYW1lIGhhcyBlbm91Z2ggc3RhY2sgdG8gcnVuLCBhbmQg
YWxzbyBlbm91Z2ggc3RhY2sKKyAgICAgICAgLy8gdG8gbWFrZSBydW50aW1lIGNhbGxzLiBTbywg
d2Ugb25seSBuZWVkIHRvIHN0YWNrIGNoZWNrIHdoZW4gbWFraW5nIGNhbGxzCisgICAgICAgIC8v
IHRvIG90aGVyIEpTIGZ1bmN0aW9ucy4gSWYgd2UgZG9uJ3QgZmluZCBzdWNoIGNhbGxzIHRoZW4g
d2UgZG9uJ3QgbmVlZCB0bworICAgICAgICAvLyBkbyBhbnkgc3RhY2sgY2hlY2tzLgorICAgICAg
ICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBERkc6OkJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUlu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWQ6CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICAgICAgICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJz
b2x1dGUodm0oKS5hZGRyZXNzT2ZGVExTdGFja0xpbWl0KCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICB9CisgICAgCisgICAgc3Ry
dWN0IEFyZ3VtZW50c0xlbmd0aCB7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCgpCisgICAgICAg
ICAgICA6IGlzS25vd24oZmFsc2UpCisgICAgICAgICAgICAsIGtub3duKFVJTlRfTUFYKQorICAg
ICAgICAgICAgLCB2YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNLbm93bjsKKyAgICAgICAgdW5zaWduZWQga25vd247CisgICAgICAg
IExWYWx1ZSB2YWx1ZTsKKyAgICB9OworICAgIEFyZ3VtZW50c0xlbmd0aCBnZXRBcmd1bWVudHNM
ZW5ndGgoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBB
cmd1bWVudHNMZW5ndGggbGVuZ3RoOworCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYg
IWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIGxlbmd0aC5rbm93
biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAgICBs
ZW5ndGguaXNLbm93biA9IHRydWU7CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5j
b25zdEludDMyKGxlbmd0aC5rbm93bik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZW5ndGgua25vd24gPSBVSU5UX01BWDsKKyAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7
CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBheWxv
YWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgQXJn
dW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4g
Z2V0QXJndW1lbnRzTGVuZ3RoKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBnZXRDdXJyZW50Q2FsbGVlKCkKKyAgICB7Cisg
ICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNh
bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFt
ZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIHJldHVy
biB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihKU1N0
YWNrOjpDYWxsZWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGFydCkudmFsdWUoKTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBnZXRBcmd1bWVudHNTdGFydChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVEaXNjcmlt
aW5hbnQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtpbmQgZXhp
dEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBjb25zdCBGdW5jdG9yJiB3
ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZShleGl0S2luZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0LnNpemUoKSA9PSAxKSB7CisgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1hdHRlZFZhbHVl
LCAwLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZURpc2NyaW1pbmFu
dCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbMF0pKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5l
eHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIG5leHRT
dHJ1Y3R1cmUiKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
bV9vdXQuZXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3ZWFrU3RydWN0dXJlRGlzY3JpbWlu
YW50KHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXQu
bGFzdCgpKSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG5vdEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBub3QgaW50
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSAwOworICAgICAgICBM
QmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gMDsKKyAgICAgICAgaWYgKGVkZ2UudXNlS2luZCgp
ID09IE5vdENlbGxVc2UpIHsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBkb3VibGUgY2FzZSIpKTsKKyAgICAgICAgICAgIG5vdE51
bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBub3QgbnVtYmVy
IGNhc2UiKSk7CisgICAgICAgIH0KKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1bHRzOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIodmFsdWUpLCB1bnN1cmUobm90SW50Q2Fz
ZSksIHVuc3VyZShpbnRDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIG5vdEludENhc2UpOworICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMih2YWx1ZSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UudXNlS2lu
ZCgpID09IE51bWJlclVzZSkgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90SW50Q2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwgaXNDZWxsT3JNaXNjKHZhbHVlKSk7
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoZG91YmxlVG9JbnQzMih1
bmJveERvdWJsZSh2YWx1ZSkpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnRD
YXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICBpc0NlbGxPck1pc2ModmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUobm90TnVt
YmVyQ2FzZSksIHVuc3VyZShkb3VibGVDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdE51bWJlckNhc2UpOworICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRvSW50MzIodW5ib3hEb3VibGUodmFs
dWUpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdW1iZXJDYXNlLCBjb250aW51YXRp
b24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2YWx1ZSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMVmFsdWUgc3BlY2lhbFJlc3VsdCA9IG1fb3V0LnNlbGVjdCgKKyAgICAg
ICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMyT25l
LCBtX291dC5pbnQzMlplcm8pOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKHNwZWNpYWxSZXN1bHQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJl
c3VsdHMpOworICAgIH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBM
VmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2so
KSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAg
ICAgICAvLworICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8v
CisgICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAg
ICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoK
KyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAg
ICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8g
ICAgIGNhc2UgNDM6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0
eXBlMik7CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFu
ZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQg
dGhlIGVkZ2Ugd291bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwg
aW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBl
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBt
X291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJ
bnQzMjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5n
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3ltYm9sKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAg
ICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3Ry
dWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1
Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29u
dGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAg
IGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RD
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0
T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RD
ZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0
eXBlIik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3Jh
Z2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFn
ZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Rv
cmVQcm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHZhbHVlLCBMVmFsdWUgc3RvcmFnZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRp
Zmllck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRy
ZXNzT2ZQcm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X291dC5hZGRyZXNzKAorICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJO
dW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICBMVmFsdWUgb2Jq
ZWN0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9
PSBuZXh0U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9i
amVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgb2JqZWN0
LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcmV2
aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShM
VmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwK
KyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1f
b3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSByZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKAorICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3Rv
cmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKKwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5j
b25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG9iamVjdCwg
bmV3QWxsb2NTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKG5ld1NpemUpOworCisgICAg
ICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJbmRleGluZ0hlYWRlcikgLSBzaXpl
b2Yodm9pZCopOworICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAg
ICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3Jh
Z2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVk
ID0gCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMu
cHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
V2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHNsb3dCdXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgaWYgKHNpemVJblZh
bHVlcyA9PSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIHNsb3dCdXR0
ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAg
ICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVJblZh
bHVlcykpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc2xvd0J1dHRlcmZseVZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNs
b3dCdXR0ZXJmbHkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZ2V0QnlJZChMVmFsdWUgYmFz
ZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihiYXNlKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIEdldEJ5SWRGbHVz
aCwgd2UgbWlnaHQgZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYm9vc3QgaWYgd2UgY2xhaW0gdGhhdCBp
dAorICAgICAgICAvLyBjbG9iYmVycyB2b2xhdGlsZSByZWdpc3RlcnMgbGF0ZS4gSXQncyBub3Qg
bmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgdGhvdWdoLCBzaW5jZSB0aGUKKyAgICAgICAgLy8g
SUMgY29kZSBpcyBzdXBlciBzbWFydCBhYm91dCBzYXZpbmcgcmVnaXN0ZXJzLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4CisgICAgICAg
IAorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7
CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
ID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVD
YWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJnZXQgZm9yIG9wZXJhdGlvbiBjYWxscy4KKyAg
ICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Cisg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24o
cGFyYW1zKS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGV4
aXQgZm9yIGNhbGwgSUMncyBjcmVhdGVkIGJ5IHRoZSBnZXRCeUlkIGZvciBnZXR0ZXJzLiBXZSBk
b24ndCBoYXZlCisgICAgICAgICAgICAgICAgLy8gdG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIg
dGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwgYXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW5kZXguCisgICAgICAgICAgICAgICAgZXhj
ZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxT
aXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUR2V0
QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxTaXRlSW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhwYXJhbXNb
MV0uZ3ByKCkpLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQp
OworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgp
OworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdp
biA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRv
ci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVn
aW4sIHNsb3dQYXRoQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5h
bGl6ZShsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcGF0
Y2hwb2ludDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKExW
YWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAg
ICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBs
b2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5
QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAg
ICAgICBmYXN0UmVzdWx0VmFsdWUsCisgICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKKyAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0
b3JXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmFyZWx5
KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOworICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBMVmFsdWUgY29w
eUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIFBfSklUT3BlcmF0aW9uX0VD
IHNsb3dQYXRoRnVuY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisg
ICAgICAgICAgICBwb2ludGVyLAorICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1d
IChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoRnVu
Y3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgTFZhbHVlIGNvcHlCYXJy
aWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNvcHlCYXJy
aWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50ZXIpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbiksIHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihmdW5jdG9yKCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50
UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNJblRv
U3BhY2UoTFZhbHVlIHBvaW50ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQudGVzdElz
WmVyb1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllckJhc2U6OnNwYWNl
Qml0cykpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkoTFZhbHVl
IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmVTcGFjZUJpdHMobV9vdXQubG9h
ZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgfQorCisgICAg
TFZhbHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAg
TFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpT
QXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgcG9zc2libHlG
cm9tU3BhY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBwb3Nz
aWJseSBmcm9tIHNwYWNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBjb250aW51YXRpb24iKSk7
CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0
UmVzdWx0VmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0luVG9TcGFjZShmYXN0UmVz
dWx0VmFsdWUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShwb3NzaWJseUZyb21TcGFj
ZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocG9z
c2libHlGcm9tU3BhY2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1
bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgIGlzRmFzdFR5cGVkQXJyYXkob2Jq
ZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1bHRWYWx1ZSksIGZhc3RSZXN1bHRWYWx1ZSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OworICAgIH0KKworICAgIExWYWx1ZSByZW1vdmVTcGFjZUJpdHMoTFZhbHVlIHN0b3JhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5kKAorICAgICAgICAgICAgc3RvcmFnZSwg
bV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0cl90PihDb3B5QmFycmllckJhc2U6
OnNwYWNlQml0cykpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNGYXN0VHlwZWRBcnJheShMVmFs
dWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKSwK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5cGVkQXJyYXkpKTsKKyAgICB9Cisg
ICAgCisgICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFw
LCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBFZGdlIGVkZ2UsIHB0cmRpZmZfdCBvZmZz
ZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAg
ICAgIGhlYXAsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLCBwcm92ZW5WYWx1ZShl
ZGdlKSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRGdW5jdG9y
LCB0eXBlbmFtZSBEb3VibGVGdW5jdG9yPgorICAgIHZvaWQgY29tcGFyZSgKKyAgICAgICAgY29u
c3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgY29uc3QgRG91YmxlRnVuY3RvciYgZG91YmxlRnVu
Y3RvciwKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgeworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChJbnQ1MlJlcFVzZSkpIHsKKyAgICAgICAgICAgIEludDUyS2luZCBraW5kOworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBr
aW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQy
KCksIGtpbmQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpKSB7CisgICAgICAgICAgICBM
VmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oZG91YmxlRnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZShpbnRG
dW5jdG9yLCBoZWxwZXJGdW5jdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmRzIik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2Jq
ZWN0KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCisgICAgeworICAgICAgICBMVmFs
dWUgcmlnaHRDZWxsID0gbG93Q2VsbChyaWdodENoaWxkKTsKKyAgICAgICAgTFZhbHVlIGxlZnRW
YWx1ZSA9IGxvd0pTVmFsdWUobGVmdENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KHJpZ2h0Q2hpbGQsIHJpZ2h0
Q2VsbCwgU3BlY09iamVjdCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsZWZ0Q2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09i
amVjdCBsZWZ0IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVmdE5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmpl
Y3QgbGVmdCBub3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVj
dCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0NlbGwobGVmdFZhbHVlLCBwcm92ZW5UeXBlKGxlZnRDaGlsZCkpLAorICAgICAg
ICAgICAgdW5zdXJlKGxlZnRDZWxsQ2FzZSksIHVuc3VyZShsZWZ0Tm90Q2VsbENhc2UpKTsKKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVm
dENlbGxDYXNlLCBsZWZ0Tm90Q2VsbENhc2UpOworICAgICAgICBzcGVjdWxhdGVUcnV0aHlPYmpl
Y3QobGVmdENoaWxkLCBsZWZ0VmFsdWUsIFNwZWNPYmplY3QgfCAoflNwZWNDZWxsKSk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwo
cmlnaHRDZWxsLCBsZWZ0VmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdE5vdENlbGxDYXNlLCBjb250
aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZShsZWZ0VmFsdWUpLCBsZWZ0Q2hpbGQsIFNwZWNPdGhlciB8IFNwZWNDZWxsLCBpc05vdE90
aGVyKGxlZnRWYWx1ZSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFu
LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Bl
Y3VsYXRlVHJ1dGh5T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICB7CisgICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmplY3QoY2VsbCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGVExfVFlQRV9DSEVDSyhq
c1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmplY3QoY2VsbCkpOworICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCks
IGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50RnVuY3Rvcj4K
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlQ29tcGFyZShjb25zdCBJbnRGdW5jdG9yJiBpbnRGdW5j
dG9yLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCisgICAgeworICAgICAgICBM
VmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBsZWZ0SXNJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVF
cSB1bnR5cGVkIGxlZnQgaXMgaW50IikpOworICAgICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgZmFzdCBwYXRoIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29t
cGFyZUVxIHVudHlwZWQgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGxlZnQp
LCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGxlZnRJc0ludCkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZWZ0SXNJbnQsIGZhc3RQ
YXRoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIocmlnaHQpLCByYXJlbHkoc2xv
d1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGludEZ1bmN0b3IodW5ib3hJbnQzMihsZWZ0KSwgdW5ib3hJbnQz
MihyaWdodCkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90TnVsbCh2
bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJhdGlvbihoZWxwZXJG
dW5jdGlvbiksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJv
b2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgc3Ry
aW5nc0VxdWFsKExWYWx1ZSBsZWZ0SlNTdHJpbmcsIExWYWx1ZSByaWdodEpTU3RyaW5nKQorICAg
IHsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5VW5lcXVhbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBub3QgdHJpdmlhbGx5IHVuZXF1YWwgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgbm90IGVtcHR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxlZnRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBsZWZ0
IHJlYWR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHJpZ2h0UmVhZHlDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmlnaHQgcmVhZHkgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGVmdDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgbGVmdCA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayByaWdo
dDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmlnaHQgOC1i
aXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgic3RyaW5nc0VxdWFsIGxvb3AiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ5dGVzRXF1
YWwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBieXRlcyBlcXVhbCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0
cmluZ3NFcXVhbCB0cnVlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhbHNlQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGZhbHNlIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdz
RXF1YWwgc2xvdyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihsZWZ0SlNTdHJpbmcsIG1faGVhcHMu
SlNTdHJpbmdfbGVuZ3RoKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmxvYWQzMihyaWdodEpTU3RyaW5nLCBtX2hlYXBz
LkpTU3RyaW5nX2xlbmd0aCkpLAorICAgICAgICAgICAgdW5zdXJlKGZhbHNlQ2FzZSksIHVuc3Vy
ZShub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5VW5lcXVhbENhc2UsIG5vdEVtcHR5Q2Fz
ZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGxlbmd0aCksIHVuc3Vy
ZSh0cnVlQ2FzZSksIHVuc3VyZShub3RFbXB0eUNhc2UpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RFbXB0eUNhc2UsIGxlZnRSZWFkeUNhc2UpOworCisgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbV9vdXQubG9hZFB0cihsZWZ0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291dC5sb2FkUHRyKHJpZ2h0SlNTdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxs
KGxlZnQpLCB1c3VhbGx5KGxlZnRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhsZWZ0UmVhZHlDYXNlLCByaWdodFJlYWR5Q2FzZSk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChyaWdodCksIHVzdWFsbHko
cmlnaHRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhyaWdodFJlYWR5Q2FzZSwgbGVmdDhCaXRDYXNlKTsKKworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCisg
ICAgICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUobGVmdDhCaXRDYXNlKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdDhCaXRDYXNlLCByaWdodDhCaXRDYXNlKTsKKworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKHJpZ2h0LCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFu
ZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZs
YWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dDYXNlKSwgdW5zdXJlKHJpZ2h0
OEJpdENhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhyaWdodDhCaXRDYXNlLCBsb29w
KTsKKworICAgICAgICBMVmFsdWUgbGVmdERhdGEgPSBtX291dC5sb2FkUHRyKGxlZnQsIG1faGVh
cHMuU3RyaW5nSW1wbF9kYXRhKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0RGF0YSA9IG1fb3V0Lmxv
YWRQdHIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKKworICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmRleEF0U3RhcnQgPSBtX291dC5hbmNob3IobGVuZ3RoKTsKKworICAgICAgICBt
X291dC5qdW1wKGxvb3ApOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3AsIGJ5dGVzRXF1
YWwpOworCisgICAgICAgIExWYWx1ZSBpbmRleEF0TG9vcFRvcCA9IG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW5kZXhBdFN0YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4SW5Mb29wID0gbV9vdXQu
c3ViKGluZGV4QXRMb29wVG9wLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgTFZhbHVlIGxl
ZnRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5k
ZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgbGVmdERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJ
bkxvb3ApKSk7CisgICAgICAgIExWYWx1ZSByaWdodEJ5dGUgPSBtX291dC5sb2FkOFplcm9FeHQz
MigKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmNoYXJhY3RlcnM4LCByaWdo
dERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3ApKSk7CisKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGxlZnRCeXRlLCByaWdodEJ5dGUpLCB1bnN1cmUoZmFsc2VD
YXNlKSwgdW5zdXJlKGJ5dGVzRXF1YWwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhieXRl
c0VxdWFsLCB0cnVlQ2FzZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhGb3JOZXh0
SXRlcmF0aW9uID0gbV9vdXQuYW5jaG9yKGluZGV4SW5Mb29wKTsKKyAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShpbmRleEF0TG9vcFRvcCwgaW5kZXhGb3JOZXh0SXRlcmF0aW9uKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihpbmRleEluTG9vcCksIHVuc3VyZShs
b29wKSwgdW5zdXJlKHRydWVDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odHJ1ZUNh
c2UsIGZhbHNlQ2FzZSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayB0cnVlUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhbHNlQ2FzZSwgc2xv
d0Nhc2UpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhbHNlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgbV9v
dXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEpLCBtX2Nh
bGxGcmFtZSwKKyAgICAgICAgICAgIGxlZnRKU1N0cmluZywgcmlnaHRKU1N0cmluZyk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFu
KHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
IHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1ZVJlc3VsdCwgZmFsc2VSZXN1bHQs
IHNsb3dSZXN1bHQpOworICAgIH0KKworICAgIGVudW0gU2NyYXRjaEZQUlVzYWdlIHsKKyAgICAg
ICAgRG9udE5lZWRTY3JhdGNoRlBSLAorICAgICAgICBOZWVkU2NyYXRjaEZQUgorICAgIH07Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdlbmVyYXRvciwgU2NyYXRjaEZQUlVz
YWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRjaEZQUj4KKyAgICB2b2lkIGVtaXRC
aW5hcnlTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBs
ZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgIFNuaXBwZXRPcGVyYW5kIGxl
ZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsK
KyAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQpOworICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBSZWZQdHI8UGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMjsKKyAgICAgICAgaWYgKHNjcmF0Y2hGUFJVc2FnZSA9PSBOZWVkU2Ny
YXRjaEZQUikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycysr
OworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5l
cmF0b3IgPSBCb3g8QmluYXJ5QXJpdGhPcEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBd
LmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgw
KSwKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUlVzYWdlID09IE5lZWRTY3JhdGNoRlBS
ID8gcGFyYW1zLmZwU2NyYXRjaCgyKSA6IEludmFsaWRGUFJSZWcpOworCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdG9yLT5kaWRFbWl0RmFzdFBhdGgoKSkgeworICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUs
ICZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5Qml0T3BHZW5lcmF0b3I+Cisg
ICAgdm9pZCBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0
aEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhjZXB0aW9ucy4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4NgorICAgICAgICAg
ICAgCisgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQp
OworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVt
YmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
KyAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hl
ZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxCaW5hcnlCaXRPcEdlbmVy
YXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigp
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdl
bmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmVuZEp1bXBM
aXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRv
bmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgK
KyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmln
aW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQo
KSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hw
b2ludCk7CisgICAgfQorCisgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRT
aGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNoaWZ0VHlwZSkKKyAgICB7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRv
IGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE2ODYKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pT
VmFsdWUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVl
KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LnJlc3VsdFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVy
cyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb3g8Q0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8
SklUUmlnaHRTaGlmdEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJl
Z3MocGFyYW1zWzJdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRj
aCgwKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwgSW52YWxpZEZQUlJlZywgc2hpZnRUeXBlKTsKKwor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVt
cExpc3QoKS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBKX0pJVE9wZXJh
dGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hpZnRUeXBlID09IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNpZ25lZFNoaWZ0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25WYWx1ZUJpdFJTaGlmdCA6IG9wZXJhdGlv
blZhbHVlQml0VVJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
c3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBz
bG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50
KTsKKyAgICB9CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExC
YXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgib2JqZWN0IGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKKyAg
ICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAgICAgICAgTFZhbHVlIGNvbmRpdGlvbjsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gbV9vdXQuaW50UHRyWmVybzsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1fb3V0LmJv
b2xlYW5GYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0
LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9j
YXRvcl9mcmVlTGlzdEhlYWQpOworICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQubm90TnVs
bChyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24sIHVz
dWFsbHkoc3VjY2VzcyksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc3VjY2Vzcyk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cigK
KyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlz
dE5leHQpLAorICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9m
cmVlTGlzdEhlYWQpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJl
LT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1f
b3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+b2Jq
ZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAorICAgICAgICAgICAgb2JqZWN0LCBtX2hlYXBzLkpT
Q2VsbF91c2VmdWxCeXRlcyk7CisgICAgfQorCisgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFs
dWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwg
c2xvd1BhdGgpOworICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0
KAorICAgICAgICBMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgcmVzdWx0LCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KKyAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCisg
ICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlw
ZT4oc2l6ZSk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5jb25zdEludFB0
cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRl
T2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdDxDbGFzc1R5
cGU+KAorICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJl
LCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisg
ICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEo
TWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEp
KSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgJiAoTWFy
a2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOworCisgICAgICAgIExWYWx1ZSBzdWJzcGFjZSA9
IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmplY3RPZlR5cGU8Q2xh
c3NUeXBlPigpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNtYWxsQ2FzZUJsb2Nr
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3Qgc21h
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgbGFy
Z2Ugb3Igb3ZlcnNpemUgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlQmxv
Y2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBs
YXJnZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChz
aXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0b2ZmKSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChpc1NtYWxsLCB1bnN1cmUoc21hbGxDYXNlQmxvY2spLCB1bnN1cmUobGFyZ2VPck92ZXJz
aXplQ2FzZUJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHNtYWxsQ2FzZUJsb2NrLCBsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2sp
OworICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfcHJlY2lzZUFsbG9jYXRvcnMsIHN1
YnNwYWNlLAorICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRl
ZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3Rl
cCkpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbEFsbG9jYXRvciA9IG1fb3V0LmFu
Y2hvcihhZGRyZXNzLnZhbHVlKCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZU9yT3ZlcnNpemVDYXNlQmxv
Y2ssIGxhcmdlQ2FzZUJsb2NrKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihNYXJrZWRTcGFjZTo6
aW1wcmVjaXNlQ3V0b2ZmKSksCisgICAgICAgICAgICB1c3VhbGx5KGxhcmdlQ2FzZUJsb2NrKSwg
cmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJn
ZUNhc2VCbG9jaywgY29udGludWF0aW9uKTsKKyAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKKyAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfaW1wcmVjaXNl
QWxsb2NhdG9ycywgc3Vic3BhY2UsCisgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1fb3V0
LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3Bh
Y2U6OmltcHJlY2lzZVN0ZXApKSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
bV9vdXQuaW50UHRyLCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VBbGxvY2F0b3IpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0
ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIg
dG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi4KKyAgICBMVmFsdWUgYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsK
KyAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSB2bSgpLmhlYXAuc3RvcmFnZUFs
bG9jYXRvcigpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3RvcmFnZSBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgcmVtYWluaW5nID0gbV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0
ZSgmYWxsb2NhdG9yLm1fY3VycmVudFJlbWFpbmluZykpOworICAgICAgICBMVmFsdWUgbmV3UmVt
YWluaW5nID0gbV9vdXQuc3ViKHJlbWFpbmluZywgc2l6ZSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5sZXNzVGhhbihuZXdSZW1haW5pbmcsIG1f
b3V0LmludFB0clplcm8pLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShz
dWNjZXNzKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdWNjZXNzKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG5ld1JlbWFpbmluZywgbV9vdXQuYWJzb2x1
dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRSZW1haW5pbmcpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LnN1YigKKyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRv
ci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmluZyk7CisgICAgfQorCisgICAgTFZh
bHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlKExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5zdWIoYWxsb2NhdGVCYXNpY1N0b3JhZ2VB
bmRHZXRFbmQoc2l6ZSwgc2xvd1BhdGgpLCBzaXplKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVl
IGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2Nh
dGVPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAg
ICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxv
Y2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0
cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0
VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IEFycmF5VmFsdWVz
IHsKKyAgICAgICAgQXJyYXlWYWx1ZXMoKQorICAgICAgICAgICAgOiBhcnJheSgwKQorICAgICAg
ICAgICAgLCBidXR0ZXJmbHkoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBcnJheVZhbHVlcyhMVmFsdWUgYXJyYXksIExWYWx1ZSBidXR0ZXJmbHkpCisgICAgICAg
ICAgICA6IGFycmF5KGFycmF5KQorICAgICAgICAgICAgLCBidXR0ZXJmbHkoYnV0dGVyZmx5KQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBhcnJheTsKKyAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICB9OworICAgIEFycmF5VmFsdWVzIGFsbG9jYXRl
SlNBcnJheSgKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUVsZW1l
bnRzLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAg
ICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAg
ICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8
IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVs
ZW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNp
emVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLAor
ICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eSA9IG1fb3V0LnN1YigKKyAgICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCisgICAgICAgICAgICBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3Rv
cmUzMihtX291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0
SW50MzIodmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0dGVyZmx5KTsKKyAgICB9
CisgICAgCisgICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0FycmF5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0FycmF5IGFsbG9jYXRpb24gc2xvdyBw
YXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBBcnJheVZhbHVlcyBmYXN0VmFsdWVzID0g
YWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMsIHNsb3dQYXRoKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdEFycmF5ID0gbV9vdXQuYW5jaG9yKGZhc3RWYWx1ZXMuYXJy
YXkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KGZhc3RWYWx1ZXMuYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93QXJyYXlWYWx1ZSA9IGxhenlTbG93
UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9vdXQuYW5jaG9yKHNsb3dBcnJheVZh
bHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd0FycmF5VmFsdWUsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KSk7CisKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gQXJyYXlWYWx1ZXMoCisgICAgICAgICAgICBtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QXJyYXksIHNsb3dBcnJheSksCisgICAgICAgICAgICBt
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBib29saWZ5KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAg
ICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKKyAgICAgICAgICAgIHJldHVybiBsb3dCb29sZWFu
KGVkZ2UpOworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdFplcm8zMihsb3dJbnQzMihlZGdlKSk7CisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZU5vdEVxdWFsQW5kT3JkZXJlZChsb3dEb3Vi
bGUoZWRnZSksIG1fb3V0LmRvdWJsZVplcm8pOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJV
c2U6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9naWNhbE5vdCgKKyAgICAgICAgICAgICAg
ICBlcXVhbE51bGxPclVuZGVmaW5lZCgKKyAgICAgICAgICAgICAgICAgICAgZWRnZSwgQ2VsbENh
c2VTcGVjdWxhdGVzT2JqZWN0LCBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQsCisgICAgICAgICAg
ICAgICAgICAgIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICBjYXNlIFN0cmlu
Z1VzZTogeworICAgICAgICAgICAgTFZhbHVlIHN0cmluZ1ZhbHVlID0gbG93U3RyaW5nKGVkZ2Up
OworICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0
cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291dC5pbnQzMlplcm8pOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShlZGdlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW1wbGVtZW50cyB0aGUg
Zm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAvLyBpZiAodmFs
dWUgaXMgY2VsbCkgeworICAgICAgICAgICAgLy8gICAgIGlmICh2YWx1ZSBpcyBzdHJpbmcpCisg
ICAgICAgICAgICAvLyAgICAgICAgIHJlc3VsdCA9ICEhdmFsdWUtPmxlbmd0aAorICAgICAgICAg
ICAgLy8gICAgIGVsc2UgeworICAgICAgICAgICAgLy8gICAgICAgICBkbyBldmlsIHRoaW5ncyBm
b3IgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkCisgICAgICAgICAgICAvLyAgICAgICAgIHJlc3Vs
dCA9IHRydWUKKyAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLyB9IGVsc2UgaWYg
KHZhbHVlIGlzIGludDMyKSB7CisgICAgICAgICAgICAvLyAgICAgcmVzdWx0ID0gISF1bmJveElu
dDMyKHZhbHVlKQorICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSBpcyBudW1iZXIpIHsK
KyAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94RG91YmxlKHZhbHVlKQorICAgICAg
ICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSB2YWx1ZSA9PSBq
c1RydWUKKyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzdHJpbmdDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgc3RyaW5nIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJC
b29saWZ5IHVudHlwZWQgbm90IHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBu
b3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50MzJDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgaW50MzIgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdEludDMyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIG5vdCBpbnQzMiBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGRv
dWJsZSBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90RG91YmxlQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBkb3VibGUgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQm9vbGlmeSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1bHRzOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwg
dW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2Us
IHN0cmluZ0Nhc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKG5vdFN0cmluZ0Nhc2UpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyaW5nQ2FzZSwgbm90U3RyaW5n
Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgbm9uRW1wdHlTdHJpbmcgPSBtX291dC5ub3RaZXJv
MzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUodmFsdWUsIG1faGVh
cHMuSlNTdHJpbmdfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3Iobm9uRW1wdHlTdHJpbmcpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90U3RyaW5n
Q2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGlzVHJ1dGh5T2JqZWN0Owor
ICAgICAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICAgICAgaXNUcnV0aHlPYmplY3QgPSBtX291dC5ib29sZWFuVHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG1hc3F1
ZXJhZGVzQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG1hc3F1
ZXJhZGVzIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBt
X291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwK
KyAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkobWFzcXVl
cmFkZXNDYXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obWFzcXVlcmFkZXNDYXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpc1RydXRoeU9iamVjdCA9IG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGxvYWRTdHJ1Y3R1
cmUodmFsdWUpLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihpc1RydXRoeU9iamVj
dCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgaW50MzJDYXNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0ludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaW50
MzJDYXNlKSwgdW5zdXJlKG5vdEludDMyQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhpbnQzMkNhc2UsIG5vdEludDMyQ2FzZSk7CisgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90WmVybzMyKHVuYm94SW50MzIodmFs
dWUpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnQzMkNhc2UsIGRvdWJsZUNhc2Up
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzTnVtYmVyKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1
cmUoZG91YmxlQ2FzZSksIHVuc3VyZShub3REb3VibGVDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdERvdWJsZUNhc2UpOworICAg
ICAgICAgICAgTFZhbHVlIGRvdWJsZUlzVHJ1dGh5ID0gbV9vdXQuZG91YmxlTm90RXF1YWxBbmRP
cmRlcmVkKAorICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHZhbHVlKSwgbV9vdXQuY29uc3RE
b3VibGUoMCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJs
ZUlzVHJ1dGh5KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERvdWJsZUNhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgbWlzY0lzVHJ1dGh5ID0gbV9vdXQuZXF1YWwo
CisgICAgICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtaXNjSXNUcnV0aHkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4s
IHJlc3VsdHMpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIFN0cmluZ09yT2JqZWN0TW9k
ZSB7CisgICAgICAgIEFsbENlbGxzQXJlRmFsc2UsCisgICAgICAgIENlbGxDYXNlU3BlY3VsYXRl
c09iamVjdAorICAgIH07CisgICAgZW51bSBFcXVhbE51bGxPclVuZGVmaW5lZE1vZGUgeworICAg
ICAgICBFcXVhbE51bGwsCisgICAgICAgIEVxdWFsVW5kZWZpbmVkLAorICAgICAgICBFcXVhbE51
bGxPclVuZGVmaW5lZCwKKyAgICAgICAgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkCisgICAgfTsK
KyAgICBMVmFsdWUgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIEVkZ2UgZWRnZSwgU3Ry
aW5nT3JPYmplY3RNb2RlIGNlbGxNb2RlLCBFcXVhbE51bGxPclVuZGVmaW5lZE1vZGUgcHJpbWl0
aXZlTW9kZSwKKyAgICAgICAgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBvcGVyYW5kTW9kZSA9IEF1
dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsaWRXYXRj
aHBvaW50ID0gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsK
KyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgb3BlcmFu
ZE1vZGUpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1
YWxOdWxsT3JVbmRlZmluZWQgcHJpbWl0aXZlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmlu
ZWQgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShwcmltaXRpdmVDYXNlKSwgdW5z
dXJlKGNlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmltaXRpdmVDYXNlKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAoY2VsbE1vZGUpIHsKKyAgICAgICAgY2FzZSBBbGxDZWxsc0FyZUZhbHNlOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0Ogor
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBpc05vdE9iamVjdCh2YWx1
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICh2YWxpZFdhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG1hc3F1
ZXJhZGVzQ2FzZSA9CisgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJFcXVh
bE51bGxPclVuZGVmaW5lZCBtYXNxdWVyYWRlcyBjYXNlIikpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxz
ZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwK
KyAgICAgICAgICAgICAgICByYXJlbHkobWFzcXVlcmFkZXNDYXNlKSwgdXN1YWxseShjb250aW51
YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFzcXVl
cmFkZXNDYXNlLCBwcmltaXRpdmVDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9v
dXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxP
YmplY3QpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhwcmltaXRpdmVDYXNlLCBjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHByaW1pdGl2ZVJlc3VsdDsKKyAg
ICAgICAgc3dpdGNoIChwcmltaXRpdmVNb2RlKSB7CisgICAgICAgIGNhc2UgRXF1YWxOdWxsOgor
ICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNv
bnN0SW50NjQoVmFsdWVOdWxsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
cXVhbFVuZGVmaW5lZDoKKyAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmVxdWFs
KHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFcXVhbE51bGxPclVuZGVmaW5lZDoKKyAgICAgICAgICAgIHBy
aW1pdGl2ZVJlc3VsdCA9IGlzT3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkOgorICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAg
ICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmJvb2xlYW5UcnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHByaW1pdGl2ZVJlc3VsdCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgcmVzdWx0
cyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KKyAg
ICB2b2lkIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRzKAorICAgICAgICBGdW5jdGlvblR5
cGUgc2xvd1BhdGhGdW5jdGlvbiwgTFZhbHVlIGJhc2UsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUg
aW5kZXgsIExWYWx1ZSB2YWx1ZSwKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIGlzTm90SW5Cb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwo
CisgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CisgICAgICAgIGlmICghbV9ub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEluQm91
bmRzQ2FzZSA9CisgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZh
bCBub3QgaW4gYm91bmRzIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgcGVyZm9ybVN0b3Jl
ID0KKyAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHBlcmZv
cm0gc3RvcmUiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2go
aXNOb3RJbkJvdW5kcywgdW5zdXJlKG5vdEluQm91bmRzQ2FzZSksIHVuc3VyZShwZXJmb3JtU3Rv
cmUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90SW5Cb3VuZHNDYXNlLCBwZXJmb3JtU3RvcmUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGlzT3V0T2ZCb3VuZHMgPSBtX291dC5hYm92
ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwg
aXNPdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBvdXRPZkJvdW5kc0Nhc2UgPQorICAgICAgICAgICAgICAgICAgICBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG91dCBvZiBib3VuZHMiKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaG9sZUNhc2UgPQorICAgICAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlB1dEJ5VmFsIGhvbGUgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT3V0T2ZCb3VuZHMsIHJhcmVseShvdXRPZkJv
dW5kc0Nhc2UpLCB1c3VhbGx5KGhvbGVDYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhv
dXRPZkJvdW5kc0Nhc2UsIGhvbGVDYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9v
dXQub3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICBtX2Nh
bGxGcmFtZSwgYmFzZSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhob2xlQ2FzZSwgaW5uZXJMYXN0TmV4
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGluZGV4LCBtX291dC5pbnQzMk9uZSksCisg
ICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAocGVyZm9ybVN0b3JlKTsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBlcmZvcm1TdG9yZSwgbGFzdE5leHQpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRTd2l0Y2goU3dpdGNoRGF0YSogZGF0
YSwgTFR5cGUgdHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHR5cGUgPT0gbV9vdXQuaW50UHRyIHx8IHR5cGUgPT0gbV9vdXQuaW50MzIpOworCisgICAgICAg
IFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBTd2l0Y2hDYXNlIG5l
d0Nhc2U7CisKKyAgICAgICAgICAgIGlmICh0eXBlID09IG1fb3V0LmludFB0cikgeworICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPmNh
c2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEtPmtpbmQpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKSwgV2VpZ2h0KGRh
dGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09IG1fb3V0LmludDMyKSB7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFN3aXRjaENhc2Uo
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5jYXNlc1tpXS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1ZShk
YXRhLT5raW5kKSksCisgICAgICAgICAgICAgICAgICAgIGxvd0Jsb2NrKGRhdGEtPmNhc2VzW2ld
LnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChuZXdDYXNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9v
dXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBzd2l0Y2hWYWx1ZSwgY2FzZXMsCisg
ICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayksIFdlaWdodChkYXRh
LT5mYWxsVGhyb3VnaC5jb3VudCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN3aXRjaFN0cmlu
ZyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQorICAgIHsKKyAgICAgICAgYm9vbCBj
YW5Eb0JpbmFyeVN3aXRjaCA9IHRydWU7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0g
MDsKKyAgICAgICAgCisgICAgICAgIGZvciAoREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA6IGRhdGEt
PmNhc2VzKSB7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBteUNhc2UudmFsdWUu
c3RyaW5nSW1wbCgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmctPmlzOEJpdCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FuRG9CaW5hcnlTd2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdHJpbmctPmxlbmd0aCgpID4g
T3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENhc2VMZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIGNhbkRvQmluYXJ5U3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSBzdHJpbmctPmxl
bmd0aCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbkRvQmluYXJ5U3dp
dGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRv
dGFsTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1Nsb3coZGF0YSwgc3RyaW5n
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ192
YWx1ZSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzIoc3RyaW5nLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBoYXNJ
bXBsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgaGFz
IGltcGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0QmxvY2sgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgaXMgOCBiaXQgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoU3RyaW5nIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc051bGwoc3RyaW5nSW1wbCksIHVuc3VyZShzbG93QmxvY2spLCB1bnN1cmUo
aGFzSW1wbEJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGhhc0ltcGxCbG9jaywgaXM4Qml0QmxvY2spOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxf
aGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0lt
cGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dCbG9jayksIHVuc3Vy
ZShpczhCaXRCbG9jaykpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0
QmxvY2ssIHNsb3dCbG9jayk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9v
dXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBicmFuY2ggd2VpZ2h0IGRh
dGEgdG8gdGhlIGNhc2VzIG9mIHRoaXMgc3dpdGNoLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY4CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8U3RyaW5nU3dpdGNoQ2FzZT4gY2FzZXM7CisgICAgICAgIGZvciAoREZHOjpTd2l0Y2hDYXNl
IG15Q2FzZSA6IGRhdGEtPmNhc2VzKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN0cmluZ1N3
aXRjaENhc2UobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSwgbG93QmxvY2sobXlDYXNlLnRhcmdl
dC5ibG9jaykpKTsKKyAgICAgICAgc3RkOjpzb3J0KGNhc2VzLmJlZ2luKCksIGNhc2VzLmVuZCgp
KTsKKyAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZShkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2Fz
ZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgMCwgZmFsc2UpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dCbG9jaywgbGFzdE5leHQpOworICAgICAgICBzd2l0Y2hTdHJpbmdTbG93KGRhdGEs
IHN0cmluZyk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBjb2RlIGZvciBzdHJpbmcgc3dpdGNo
aW5nIGlzIGJhc2VkIGNsb3NlbHkgb24gdGhlIHNhbWUgY29kZSBpbiB0aGUgREZHIGJhY2tlbmQu
IFdoaWxlIGl0CisgICAgLy8gd291bGQgYmUgbmljZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBz
aW1pbGFyLWxvb2tpbmcgY29kZSwgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIG9uZSBvZgorICAgIC8v
IHRob3NlIGFsZ29yaXRobXMgd2hlcmUgZmFjdG9yaW5nIG91dCB0aGUgY29tbW9uIGJpdHMgd291
bGQgcmVzdWx0IGluIG1vcmUgY29kZSB0aGFuIGp1c3QKKyAgICAvLyBkdXBsaWNhdGluZy4KKyAg
ICAKKyAgICBzdHJ1Y3QgU3RyaW5nU3dpdGNoQ2FzZSB7CisgICAgICAgIFN0cmluZ1N3aXRjaENh
c2UoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZ1N3aXRjaENhc2UoU3RyaW5nSW1wbCog
c3RyaW5nLCBMQmFzaWNCbG9jayB0YXJnZXQpCisgICAgICAgICAgICA6IHN0cmluZyhzdHJpbmcp
CisgICAgICAgICAgICAsIHRhcmdldCh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZ1N3aXRjaENhc2UmIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nTGVzc1RoYW4oKnN0cmluZywg
Km90aGVyLnN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZ0ltcGwq
IHN0cmluZzsKKyAgICAgICAgTEJhc2ljQmxvY2sgdGFyZ2V0OworICAgIH07CisgICAgCisgICAg
c3RydWN0IENoYXJhY3RlckNhc2UgeworICAgICAgICBDaGFyYWN0ZXJDYXNlKCkKKyAgICAgICAg
ICAgIDogY2hhcmFjdGVyKDApCisgICAgICAgICAgICAsIGJlZ2luKDApCisgICAgICAgICAgICAs
IGVuZCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENoYXJhY3Rl
ckNhc2UoTENoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQorICAg
ICAgICAgICAgOiBjaGFyYWN0ZXIoY2hhcmFjdGVyKQorICAgICAgICAgICAgLCBiZWdpbihiZWdp
bikKKyAgICAgICAgICAgICwgZW5kKGVuZCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBDaGFyYWN0ZXJDYXNlJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlciA8IG90aGVyLmNoYXJh
Y3RlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTENoYXIgY2hhcmFjdGVyOworICAg
ICAgICB1bnNpZ25lZCBiZWdpbjsKKyAgICAgICAgdW5zaWduZWQgZW5kOworICAgIH07CisgICAg
CisgICAgdm9pZCBzd2l0Y2hTdHJpbmdSZWN1cnNlKAorICAgICAgICBTd2l0Y2hEYXRhKiBkYXRh
LCBMVmFsdWUgYnVmZmVyLCBMVmFsdWUgbGVuZ3RoLCBjb25zdCBWZWN0b3I8U3RyaW5nU3dpdGNo
Q2FzZT4mIGNhc2VzLAorICAgICAgICB1bnNpZ25lZCBudW1DaGVja2VkLCB1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kLCB1bnNpZ25lZCBhbHJlYWR5Q2hlY2tlZExlbmd0aCwKKyAgICAgICAg
dW5zaWduZWQgY2hlY2tlZEV4YWN0TGVuZ3RoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sg
ZmFsbFRocm91Z2ggPSBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CisgICAgICAg
IAorICAgICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7CisgICAgICAgICAgICBtX291dC5qdW1wKGZh
bGxUaHJvdWdoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgbWluTGVuZ3RoID0gY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCk7
CisgICAgICAgIHVuc2lnbmVkIGNvbW1vbkNoYXJzID0gbWluTGVuZ3RoOworICAgICAgICBib29s
IGFsbExlbmd0aHNFcXVhbCA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2lu
ICsgMTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUNvbW1vbkNoYXJz
ID0gbnVtQ2hlY2tlZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4oY2Fz
ZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCksIGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbnVtQ2hlY2tlZDsgaiA8IGxpbWl0OyArK2op
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FzZXNbYmVnaW5dLnN0cmluZy0+YXQoaikgIT0gY2Fz
ZXNbaV0uc3RyaW5nLT5hdChqKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgbXlDb21tb25DaGFycysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29t
bW9uQ2hhcnMgPSBzdGQ6Om1pbihjb21tb25DaGFycywgbXlDb21tb25DaGFycyk7CisgICAgICAg
ICAgICBpZiAobWluTGVuZ3RoICE9IGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgYWxsTGVuZ3Roc0VxdWFsID0gZmFsc2U7CisgICAgICAgICAgICBtaW5MZW5ndGgg
PSBzdGQ6Om1pbihtaW5MZW5ndGgsIGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoY2hlY2tlZEV4YWN0TGVuZ3RoKSB7CisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxyZWFkeUNoZWNrZWRMZW5ndGggPT0g
bWluTGVuZ3RoKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBhbGxM
ZW5ndGhzRXF1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgbWluTGVuZ3RoID49IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghYWxsTGVuZ3Roc0VxdWFsICYmIGFscmVhZHlDaGVja2VkTGVuZ3RoIDwgbWluTGVu
Z3RoKQorICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQuYmVsb3cobGVuZ3RoLCBtX291dC5j
b25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRocm91Z2gpKTsKKyAgICAgICAgaWYg
KGFsbExlbmd0aHNFcXVhbCAmJiAoYWxyZWFkeUNoZWNrZWRMZW5ndGggPCBtaW5MZW5ndGggfHwg
IWNoZWNrZWRFeGFjdExlbmd0aCkpCisgICAgICAgICAgICBtX291dC5jaGVjayhtX291dC5ub3RF
cXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVuZ3RoKSksIHVuc3VyZShmYWxsVGhy
b3VnaCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ2hlY2tlZDsg
aSA8IGNvbW1vbkNoYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LmNoZWNrKAorICAgICAg
ICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
OFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVyczhbaV0pLAorICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PHVpbnQxNl90PihjYXNlc1tiZWdp
bl0uc3RyaW5nLT5hdChpKSkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoZmFsbFRocm91Z2gp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1pbkxlbmd0aCA9PSBjb21tb25D
aGFycykgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBvbmUgb2YgdGhl
IGNhc2VzIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgb3RoZXIgY2FzZXMuCisgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgcHJl
Zml4IG9mIGFsbCBvZiB0aGUgY2FzZXMsCisgICAgICAgICAgICAvLyBzbyB3ZSBqdXN0IGNoZWNr
IGxlbmd0aCB0byBqdW1wIHRvIHRoYXQgY2FzZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2JlZ2luXS5zdHJpbmctPmxlbmd0aCgp
ID09IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luICsg
MTsgaSA8IGVuZDsgKytpKQorICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9u
b2RlLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpID4gY29tbW9uQ2hhcnMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFsKSB7CisgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA9PSBiZWdpbiArIDEpOworICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY2FzZXNbYmVnaW5dLnRhcmdldCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5j
aGVjaygKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50
MzIoY29tbW9uQ2hhcnMpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY2FzZXNbYmVnaW5dLnRh
cmdldCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSd2ZSBjaGVja2VkIGlmIHRo
ZSBsZW5ndGggaXMgPj0gbWluTGVuZ3RoLCBhbmQgdGhlbiB3ZSBjaGVja2VkIGlmIHRoZSBsZW5n
dGggaXMKKyAgICAgICAgICAgIC8vID09IGNvbW1vbkNoYXJzLiBXZSBnZXQgdG8gdGhpcyBwb2lu
dCBpZiBpdCBpcyA+PSBtaW5MZW5ndGggYnV0IG5vdCA9PSBjb21tb25DaGFycy4KKyAgICAgICAg
ICAgIC8vIEhlbmNlIHdlIGtub3cgdGhhdCBpdCBub3cgbXVzdCBiZSA+IG1pbkxlbmd0aCwgaS5l
LiB0aGF0IGl0J3MgPj0gbWluTGVuZ3RoICsgMS4KKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1Jl
Y3Vyc2UoCisgICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCBjb21t
b25DaGFycywgYmVnaW4gKyAxLCBlbmQsIG1pbkxlbmd0aCArIDEsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB3ZSBrbm93IHRoYXQgdGhlIHN0cmluZyBpcyBsb25nZXIgdGhhbiBjb21tb25DaGFycywgYW5k
IHdlJ3ZlIG9ubHkgdmVyaWZpZWQKKyAgICAgICAgLy8gY29tbW9uQ2hhcnMuIFVzZSBhIGJpbmFy
eSBzd2l0Y2ggb24gdGhlIG5leHQgdW5jaGVja2VkIGNoYXJhY3RlciwgaS5lLgorICAgICAgICAv
LyBzdHJpbmdbY29tbW9uQ2hhcnNdLgorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGVuZCA+PSBiZWdpbiArIDIpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHVuY2hlY2tlZENoYXIgPSBtX291dC5sb2FkOFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hh
cmFjdGVyczhbY29tbW9uQ2hhcnNdKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxDaGFyYWN0
ZXJDYXNlPiBjaGFyYWN0ZXJDYXNlczsKKyAgICAgICAgQ2hhcmFjdGVyQ2FzZSBjdXJyZW50Q2Fz
ZShjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChjb21tb25DaGFycyksIGJlZ2luLCBiZWdpbiArIDEp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsraSkgewor
ICAgICAgICAgICAgTENoYXIgY3VycmVudENoYXIgPSBjYXNlc1tpXS5zdHJpbmctPmF0KGNvbW1v
bkNoYXJzKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhciAhPSBjdXJyZW50Q2FzZS5jaGFy
YWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZS5lbmQgPSBpOworICAgICAgICAg
ICAgICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50Q2FzZSk7CisgICAgICAgICAgICAg
ICAgY3VycmVudENhc2UgPSBDaGFyYWN0ZXJDYXNlKGN1cnJlbnRDaGFyLCBpLCBpICsgMSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZS5lbmQgPSBpICsg
MTsKKyAgICAgICAgfQorICAgICAgICBjaGFyYWN0ZXJDYXNlcy5hcHBlbmQoY3VycmVudENhc2Up
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBjaGFyYWN0ZXJCbG9ja3M7
CisgICAgICAgIGZvciAoQ2hhcmFjdGVyQ2FzZSYgbXlDYXNlIDogY2hhcmFjdGVyQ2FzZXMpCisg
ICAgICAgICAgICBjaGFyYWN0ZXJCbG9ja3MuYXBwZW5kKEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaFN0cmluZyBjYXNlIGZvciAiLCBteUNhc2UuY2hhcmFjdGVyLCAiIGF0IGlu
ZGV4ICIsIGNvbW1vbkNoYXJzKSkpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENh
c2U+IHN3aXRjaENhc2VzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcmFj
dGVyQ2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjaGFyYWN0ZXJDYXNlc1tpIC0gMV0uY2hh
cmFjdGVyIDwgY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHN3aXRj
aENhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKSwgY2hhcmFjdGVyQmxvY2tzW2ldLCBXZWln
aHQoKSkpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKHVuY2hl
Y2tlZENoYXIsIHN3aXRjaENhc2VzLCBmYWxsVGhyb3VnaCwgV2VpZ2h0KCkpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKKyAgICAg
ICAgY2hhcmFjdGVyQmxvY2tzLmFwcGVuZChsYXN0TmV4dCk7IC8vIE1ha2VzIGl0IGNvbnZlbmll
bnQgdG8gc2V0IG5leHRCbG9jay4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNo
YXJhY3RlckNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGFyYWN0ZXJCbG9ja3NbaV0sIGNoYXJhY3RlckJsb2Nrc1tpICsgMV0pOworICAgICAgICAgICAg
c3dpdGNoU3RyaW5nUmVjdXJzZSgKKyAgICAgICAgICAgICAgICBkYXRhLCBidWZmZXIsIGxlbmd0
aCwgY2FzZXMsIGNvbW1vbkNoYXJzICsgMSwKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDYXNl
c1tpXS5iZWdpbiwgY2hhcmFjdGVyQ2FzZXNbaV0uZW5kLCBtaW5MZW5ndGgsIGFsbExlbmd0aHNF
cXVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCBtX291dC5tX25leHRCbG9jayA9PSBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3dpdGNoU3RyaW5nU2xvdyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG91Z2h0IHRvIGJlIGFibGUgdG8gdXNlIGNvbXB1
dGVkIGdvdG9zIGhlcmUuIFdlIHdvdWxkIHNhdmUgdGhlIGxhYmVscyBvZiB0aGUKKyAgICAgICAg
Ly8gYmxvY2tzIHdlIHdhbnQgdG8ganVtcCB0bywgYW5kIHRoZW4gcmVxdWVzdCB0aGVpciBhZGRy
ZXNzZXMgYWZ0ZXIgY29tcGlsYXRpb24gY29tcGxldGVzLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY5CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgYnJhbmNoT2Zmc2V0ID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50MzIsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQpLAor
ICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpLCBzdHJpbmcpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0
YWJsZSA9IGNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFi
bGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Cisg
ICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxpbnQzMl90PiBhbHJlYWR5SGFuZGxlZDsgLy8gVGhl
c2UgbWF5IGJlIG5lZ2F0aXZlLCBvciB6ZXJvLCBvciBwcm9iYWJseSBvdGhlciBzdHVmZiwgdG9v
LiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBIYXNoU2V0J3MgY29ybmVyIGNhc2VzIGFuZCB3
ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aHJvdWdocHV0IGhlcmUuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBmYWN0IHRoYXQgd2UncmUgdXNpbmcgdGhlIGJ5dGVjb2RlJ3Mgc3dp
dGNoIHRhYmxlIG1lYW5zIHRoYXQgdGhlCisgICAgICAgICAgICAvLyBmb2xsb3dpbmcgREZHIElS
IHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIGludmFsaWQuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gT3JpZ2luYWwgY29kZToKKyAgICAgICAgICAgIC8vICAgICBzd2l0Y2ggKHYpIHsK
KyAgICAgICAgICAgIC8vICAgICBjYXNlICJmb28iOgorICAgICAgICAgICAgLy8gICAgIGNhc2Ug
ImJhciI6CisgICAgICAgICAgICAvLyAgICAgICAgIHRoaW5ncygpOworICAgICAgICAgICAgLy8g
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Ly8gICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gTmV3IGNvZGU6CisgICAgICAgICAgICAvLyAgICAgc3dpdGNoICh2KSB7
CisgICAgICAgICAgICAvLyAgICAgY2FzZSAiZm9vIjoKKyAgICAgICAgICAgIC8vICAgICAgICAg
aW5zdHJ1bWVudEZvbygpOworICAgICAgICAgICAgLy8gICAgICAgICBnb3RvIF90aGluZ3M7Cisg
ICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKKyAgICAgICAgICAgIC8vICAgICAgICAgaW5z
dHJ1bWVudEJhcigpOworICAgICAgICAgICAgLy8gICAgIF90aGluZ3M6CisgICAgICAgICAgICAv
LyAgICAgICAgIHRoaW5ncygpOworICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIC8vICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTHVja2ls
eSwgd2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueSBzdWNoIHRyYW5zZm9ybWF0aW9uLiBCdXQgaXQn
cyBraW5kIG9mIHNpbGx5IHRoYXQKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaXNzdWUuCisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
NjM1CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgPSBk
YXRhLT5jYXNlc1tpXTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPQorICAgICAgICAgICAgICAgIHRhYmxlLm9mZnNldFRhYmxl
LmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgaXRlciAhPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghYWxyZWFkeUhhbmRsZWQuaW5zZXJ0KGl0ZXItPnZh
bHVlLmJyYW5jaE9mZnNldCkuc2Vjb25kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgKKyAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCksCisgICAgICAgICAgICAgICAg
bG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jayksIFdlaWdodChteUNhc2UudGFyZ2V0LmNvdW50
KSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlv
bigKKyAgICAgICAgICAgIGJyYW5jaE9mZnNldCwgY2FzZXMsIGxvd0Jsb2NrKGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKSwKKyAgICAgICAgICAgIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5jb3Vu
dCkpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciBhdCB0aGUgcG9pbnQg
b2YgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIGtub3cgd2hhdCB0aGUgcmVzdWx0IHR5cGUgaXMu
CisgICAgLy8gWW91IGNhbiBlbWl0IHdoYXRldmVyIGNvZGUgeW91IGxpa2UgYXQgdGhhdCBwb2lu
dC4gRXhwZWN0cyB5b3UgdG8gdGVybWluYXRlIHRoZSBiYXNpYyBibG9jay4KKyAgICAvLyBXaGVu
IGJ1aWxkVHlwZU9mKCkgcmV0dXJucywgaXQgd2lsbCBoYXZlIHRlcm1pbmF0ZWQgYWxsIGJhc2lj
IGJsb2NrcyB0aGF0IGl0IGNyZWF0ZWQuIFNvLCBpZgorICAgIC8vIHlvdSBhcmVuJ3QgdXNpbmcg
dGhpcyBhcyB0aGUgdGVybWluYXRvciBvZiBhIGhpZ2gtbGV2ZWwgYmxvY2ssIHlvdSBzaG91bGQg
Y3JlYXRlIHlvdXIgb3duCisgICAgLy8gY29udGluYXRpb24gYW5kIHNldCBpdCBhcyB0aGUgbmV4
dEJsb2NrIChtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKSkgYmVmb3Jl
CisgICAgLy8gY2FsbGluZyB0aGlzLiBGb3IgZXhhbXBsZToKKyAgICAvLworICAgIC8vIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXkgY29udGludWF0
aW9uIikpOworICAgIC8vIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgLy8gYnVpbGRUeXBlT2YoCisgICAgLy8gICAg
IGNoaWxkLCB2YWx1ZSwKKyAgICAvLyAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUpIHsKKyAgICAv
LyAgICAgICAgICBkbyB0aGluZ3M7CisgICAgLy8gICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgIC8vICAgICB9KTsKKyAgICAvLyBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
YnVpbGRUeXBlT2YoRWRnZSBjaGlsZCwgTFZhbHVlIHZhbHVlLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBicmFuY2hpbmcgc3RydWN0dXJlOgor
ICAgICAgICAvLworICAgICAgICAvLyBpZiAoaXMgY2VsbCkgeworICAgICAgICAvLyAgICAgaWYg
KGlzIG9iamVjdCkgeworICAgICAgICAvLyAgICAgICAgIGlmIChpcyBmdW5jdGlvbikgeworICAg
ICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIC8vICAgICAgICAg
fSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwIGFuZCBkb2Vzbid0IG1hc3F1ZXJhZGUg
YXMgdW5kZWZpbmVkKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBvYmplY3QKKyAg
ICAgICAgLy8gICAgICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4g
c2xvd1BhdGgoKTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9IGVsc2Ug
aWYgKGlzIHN0cmluZykgeworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzdHJpbmcKKyAgICAg
ICAgLy8gICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN5bWJvbAorICAg
ICAgICAvLyAgICAgfQorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bWJlcikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bGwpIHsK
KyAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBi
b29sZWFuKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gYm9vbGVhbgorICAgICAgICAvLyB9IGVs
c2UgeworICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5lZAorICAgICAgICAvLyB9CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYnVpbGRUeXBlT2YgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBvYmplY3RD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBvYmplY3QgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgZnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJidWlsZFR5cGVPZiBmdW5jdGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RG
dW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBmdW5j
dGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayByZWFsbHlPYmplY3RDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiByZWFsbHkgb2JqZWN0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWls
ZFR5cGVPZiBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHVucmVhY2hhYmxlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiB1bnJlYWNoYWJsZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm90T2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygbm90IG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzdHJpbmdD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc3ltYm9sQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
YnVpbGRUeXBlT2Ygc3ltYm9sIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBudW1iZXJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJidWlsZFR5cGVPZiBudW1iZXIgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90TnVt
YmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bWJlciBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3ROdWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGJvb2xl
YW4gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgdW5kZWZpbmVkIGNhc2UiKSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgb2JqZWN0Q2Fz
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGls
ZCkpLCB1bnN1cmUob2JqZWN0Q2FzZSksIHVuc3VyZShub3RPYmplY3RDYXNlKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBmdW5jdGlvbkNhc2UpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5U
eXBlKGNoaWxkKSAmIFNwZWNPYmplY3QpLAorICAgICAgICAgICAgdW5zdXJlKGZ1bmN0aW9uQ2Fz
ZSksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGZ1bmN0aW9uQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgZnVuY3RvcihU
eXBlb2ZUeXBlOjpGdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RGdW5jdGlvbkNhc2UsIHJlYWxseU9iamVjdENhc2UpOworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkg
JiAoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQ
YXRoKSwgdXN1YWxseShyZWFsbHlPYmplY3RDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhyZWFsbHlPYmplY3RDYXNlLCBzbG93UGF0aCk7CisgICAgICAgIGZ1bmN0b3Io
VHlwZW9mVHlwZTo6T2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dQYXRoLCB1bnJlYWNoYWJsZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsYXp5U2xvd1Bh
dGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7Cisg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAzPiBjYXNlczsKKyAgICAgICAgY2FzZXMuYXBwZW5k
KFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZU
eXBlOjpVbmRlZmluZWQpKSwgdW5kZWZpbmVkQ2FzZSkpOworICAgICAgICBjYXNlcy5hcHBlbmQo
U3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5
cGU6Ok9iamVjdCkpLCByZWFsbHlPYmplY3RDYXNlKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlw
ZTo6RnVuY3Rpb24pKSwgZnVuY3Rpb25DYXNlKSk7CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3Ry
dWN0aW9uKG1fb3V0LmNhc3RUb0ludDMyKHJlc3VsdCksIGNhc2VzLCB1bnJlYWNoYWJsZSwgV2Vp
Z2h0KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5yZWFjaGFibGUsIG5v
dE9iamVjdENhc2UpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obm90T2JqZWN0Q2FzZSwgc3RyaW5nQ2FzZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGNo
aWxkKSAmIChTcGVjQ2VsbCAtIFNwZWNPYmplY3QpKSwKKyAgICAgICAgICAgIHVuc3VyZShzdHJp
bmdDYXNlKSwgdW5zdXJlKHN5bWJvbENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHN0cmluZ0Nhc2UsIHN5bWJvbENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6OlN0cmluZyk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzeW1ib2xDYXNl
LCBub3RDZWxsQ2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3ltYm9sKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBudW1iZXJDYXNlKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUsIHByb3Zl
blR5cGUoY2hpbGQpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgIHVuc3VyZShudW1iZXJDYXNl
KSwgdW5zdXJlKG5vdE51bWJlckNhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG51bWJlckNhc2UsIG5vdE51bWJlckNhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6Ok51bWJlcik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdW1iZXJD
YXNlLCBub3ROdWxsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBpc051bGw7CisgICAgICAgIGlmIChw
cm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPdGhlcikKKyAgICAgICAgICAgIGlzTnVsbCA9IG1fb3V0
LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBpc051bGwgPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgIG1fb3V0
LmJyYW5jaChpc051bGwsIHVuc3VyZShyZWFsbHlPYmplY3RDYXNlKSwgdW5zdXJlKG5vdE51bGxD
YXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdWxsQ2FzZSwgYm9v
bGVhbkNhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0Jvb2xlYW4o
dmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgfihTcGVjQ2VsbCB8IFNwZWNGdWxsTnVtYmVyKSks
CisgICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1bnN1cmUodW5kZWZpbmVkQ2FzZSkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm9vbGVhbkNhc2UsIHVuZGVmaW5l
ZENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkJvb2xlYW4pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2FzZSwgbGFzdE5leHQpOworICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCk7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSwgZG91YmxlIGxvdywgZG91YmxlIGhp
Z2gsIGJvb2wgaXNTaWduZWQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgZ3Jl
YXRFbm91Z2ggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50MzIgZ3JlYXRFbm91
Z2giKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJhbmdlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJkb3VibGVUb0ludDMyIHdpdGhpblJhbmdlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9JbnQzMiBzbG93UGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChk
b3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUobG93KSksCisgICAgICAgICAgICB1bnN1cmUo
Z3JlYXRFbm91Z2gpLCB1bnN1cmUoc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZ3JlYXRFbm91Z2gsIHdpdGhpblJhbmdl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1Ro
YW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERvdWJsZShoaWdoKSksCisgICAgICAg
ICAgICB1bnN1cmUod2l0aGluUmFuZ2UpLCB1bnN1cmUoc2xvd1BhdGgpKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBzbG93UGF0aCk7CisgICAgICAgIExW
YWx1ZSBmYXN0UmVzdWx0OworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgICAgICBmYXN0
UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9VSW50KGRvdWJsZVZhbHVlKTsK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGZhc3RSZXN1bHQpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihtX291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24odG9JbnQz
MiksIGRvdWJsZVZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cyk7CisgICAgfQor
ICAgIAorICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChPdXRwdXQ6Omhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzZW5zaWJsZURvdWJsZVRvSW50MzIoZG91YmxlVmFsdWUpOworICAgICAgICAK
KyAgICAgICAgZG91YmxlIGxpbWl0ID0gcG93KDIsIDMxKSAtIDE7CisgICAgICAgIHJldHVybiBk
b3VibGVUb0ludDMyKGRvdWJsZVZhbHVlLCAtbGltaXQsIGxpbWl0KTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIHNlbnNpYmxlRG91YmxlVG9JbnQzMihMVmFsdWUgZG91YmxlVmFsdWUpCisgICAg
eworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
c2Vuc2libGUgZG91YmxlVG9JbnQzMiBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic2Vuc2libGUgZG91YmxlVG9J
bnQzMiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9
IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChmYXN0UmVzdWx0VmFsdWUsIG1fb3V0
LmNvbnN0SW50MzIoMHg4MDAwMDAwMCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwg
dXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBt
X291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24odG9JbnQzMiksIGRvdWJsZVZh
bHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1
cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIGNvZGUgZ2VuZXJh
dG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUgdXNpbmcgb3VyCisgICAgLy8gb3du
IE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xvdyBwYXRocyB0aGF0IGludm9s
dmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAorICAgIC8vIHRvIHBheSB0aGUgcHJp
Y2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBn
ZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKKyAgICAvLyBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhh
bmQsIGEgbGF6eSBzbG93IHBhdGggYWx3YXlzIGluY3VycyB0aGUgY29zdCBvZiB0d28gYWRkaXRp
b25hbCBqdW1wcy4KKyAgICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBh
bGxvY2F0aW9uIHN0YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZlciBMTFZNIGRpZCwgc28geW91Cisg
ICAgLy8gaGF2ZSB0byB1c2UgYSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgdG8gdHJ5IHRvIHVz
ZSBzb21lIHVudXNlZCByZWdpc3RlcnMgYW5kIHlvdSBtYXkgaGF2ZQorICAgIC8vIHRvIHNwaWxs
IHRvIHRvcCBvZiBzdGFjayBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFi
bGUuCisgICAgLy8KKyAgICAvLyBMYXp5IHNsb3cgcGF0aHMgaW52b2x2ZSB0aHJlZSBkaWZmZXJl
bnQgc3RhZ2VzIG9mIGV4ZWN1dGlvbi4gRWFjaCBzdGFnZSBoYXMgdW5pcXVlCisgICAgLy8gY2Fw
YWJpbGl0aWVzIGFuZCBrbm93bGVkZ2UuIFRoZSBzdGFnZXMgYXJlOgorICAgIC8vCisgICAgLy8g
MSkgREZHLT5MTFZNIGxvd2VyaW5nLCBpLmUuIGNvZGUgdGhhdCBydW5zIGluIHRoaXMgcGhhc2Uu
IExvd2VyaW5nIGlzIHRoZSBsYXN0IHRpbWUgeW91IHdpbGwKKyAgICAvLyAgICBoYXZlIGFjY2Vz
cyB0byBMVmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBMVmFsdWUgdGhhdCBuZWVkcyB0byBiZSBmZWQg
YXMgaW5wdXQgdG8gYSBsYXp5IHNsb3cKKyAgICAvLyAgICBwYXRoLCB0aGVuIHlvdSBtdXN0IHBh
c3MgaXQgYXMgYW4gYXJndW1lbnQgaGVyZSAoYXMgb25lIG9mIHRoZSB2YXJhcmdzIGFyZ3VtZW50
cyBhZnRlciB0aGUKKyAgICAvLyAgICBmdW5jdG9yKS4gQnV0LCBsb3dlcmluZyBkb2Vzbid0IGtu
b3cgd2hpY2ggcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhvc2UgTFZhbHVlcy4gSGVuY2UK
KyAgICAvLyAgICB5b3UgcGFzcyBhIGxhbWJkYSB0byBsYXp5U2xvd1BhdGgoKSBhbmQgdGhhdCBs
YW1iZGEgd2lsbCBydW4gZHVyaW5nIHN0YWdlICgyKToKKyAgICAvLworICAgIC8vIDIpIEZUTENv
bXBpbGUuY3BwJ3MgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzLiBUaGlzIGNvZGUgaXMgdGhl
IG9ubHkgc3RhZ2UgYXQgd2hpY2ggd2Uga25vdworICAgIC8vICAgIHRoZSBtYXBwaW5nIGZyb20g
YXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRoZSByZWdpc3RlcnMg
dGhhdCBMTFZNCisgICAgLy8gICAgc2VsZWN0ZWQgZm9yIHRob3NlIGFyZ3VtZW50cy4gWW91IGRv
bid0IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGNvZGUgaGVyZSwgc2luY2UgdGhlbgor
ICAgIC8vICAgIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0dWFsbHkgYmUgbGF6aWx5IGdlbmVy
YXRlZC4gSW5zdGVhZCwgeW91IHdhbnQgdG8gc2F2ZSB0aGUKKyAgICAvLyAgICByZWdpc3RlcnMg
YmVpbmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVmZXIgY29kZSBnZW5lcmF0aW9uIHRv
IHN0YWdlICgzKSBieSBjcmVhdGluZworICAgIC8vICAgIGFuZCByZXR1cm5pbmcgYSBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcjoKKyAgICAvLworICAgIC8vIDMpIExhenlTbG93UGF0aCdzIGdlbmVy
YXRlKCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNwb25zZSB0byB0aGUgbGF6eSBzbG93
IHBhdGgKKyAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBmaXJzdCB0aW1lLiBJdCB3aWxsIGNh
bGwgdGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFnZSAoMikuCisgICAgLy8KKyAgICAv
LyBOb3RlIHRoYXQgZWFjaCB0aW1lIHlvdSBpbnZva2Ugc3RhZ2UgKDEpLCBzdGFnZSAoMikgbWF5
IGJlIGludm9rZWQgemVybywgb25lLCBvciBtYW55IHRpbWVzLgorICAgIC8vIFN0YWdlICgyKSB3
aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFnZSAoMSkuIEJ1dCwgTExWTSBtYXkg
a2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKKyAgICAvLyBjYXNlIHN0YWdlICgyKSB3b24ndCBydW4u
IExMVk0gbWF5IGR1cGxpY2F0ZSB0aGUgY29kZSAoZm9yIGV4YW1wbGUgdmlhIGp1bXAgdGhyZWFk
aW5nKSwKKyAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMgdG8geW91ciBzdGFnZSAoMikgbGFt
YmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9yIG9uY2UgZm9yIGVhY2gKKyAgICAv
LyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8gdGltZXMgaWYgdGhlIHNsb3cgcGF0
aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUgZm9yCisgICAgLy8gd2hlbmV2ZXIg
eW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNtLgorICAgIC8vCisgICAgLy8gQSB0
eXBpY2FsIHVzZSBvZiBsYXp5U2xvd1BhdGgoKSB3aWxsIGxvb2sgbGlrZSB0aGUgZXhhbXBsZSBi
ZWxvdywgd2hpY2gganVzdCBjcmVhdGVzIGEgc2xvdworICAgIC8vIHBhdGggdGhhdCBhZGRzIHNv
bWUgdmFsdWUgdG8gdGhlIGlucHV0IGFuZCByZXR1cm5zIGl0LgorICAgIC8vCisgICAgLy8gLy8g
U3RhZ2UgKDEpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0IGNoYW5jZSB0byBmaWd1cmUgb3V0
IHdoaWNoIExWYWx1ZXMgdG8gdXNlIGFzIGlucHV0cy4KKyAgICAvLyAvLyBOb3RpY2UgaG93IHdl
IHBhc3MgImlucHV0IiBhcyBhbiBhcmd1bWVudCB0byBsYXp5U2xvd1BhdGgoKS4KKyAgICAvLyBM
VmFsdWUgaW5wdXQgPSAuLi47CisgICAgLy8gaW50IGFkZGVuZCA9IC4uLjsKKyAgICAvLyBMVmFs
dWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAorICAgIC8vICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CisgICAgLy8gICAgICAgICAvLyBTdGFnZSAoMikgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3Qg
Y2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcmVnaXN0ZXJzIGFyZSB1c2VkCisgICAgLy8gICAg
ICAgICAvLyBmb3Igd2hpY2ggdmFsdWVzLiBMb2NhdGlvbiB6ZXJvIGlzIGFsd2F5cyB0aGUgcmV0
dXJuIHZhbHVlLiBZb3UgY2FuIGlnbm9yZSBpdCBpZgorICAgIC8vICAgICAgICAgLy8geW91IGRv
bid0IHdhbnQgdG8gcmV0dXJuIGFueXRoaW5nLiBMb2NhdGlvbiAxIGlzIHRoZSByZWdpc3RlciBm
b3IgdGhlIGZpcnN0CisgICAgLy8gICAgICAgICAvLyBhcmd1bWVudCB0byB0aGUgbGF6eVNsb3dQ
YXRoKCksIGkuZS4gImlucHV0Ii4gTm90ZSB0aGF0IHRoZSBMb2NhdGlvbiBvYmplY3QgY291bGQK
KyAgICAvLyAgICAgICAgIC8vIGFsc28gaG9sZCBhbiBGUFIsIGlmIHlvdSBhcmUgcGFzc2luZyBh
IGRvdWJsZS4KKyAgICAvLyAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCk7CisgICAgLy8gICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CisgICAgLy8gICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVh
dGVHZW5lcmF0b3IoCisgICAgLy8gICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
TGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAvLyAgICAgICAg
ICAgICAgICAgLy8gU3RhZ2UgKDMpIGlzIGhlcmUuIFRoaXMgaXMgd2hlbiB5b3UgZ2VuZXJhdGUg
Y29kZS4gWW91IGhhdmUgYWNjZXNzIHRvIHRoZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyBy
ZWdpc3RlcnMgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMikgYmVjYXVzZSB0aGlzIGxhbWJkYSBj
bG9zZXMgb3ZlciB0aG9zZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZXMgKG91
dHB1dEdQUiBhbmQgaW5wdXRHUFIpLiBZb3UgYWxzbyBoYXZlIGFjY2VzcyB0byB3aGF0ZXZlciBl
eHRyYQorICAgIC8vICAgICAgICAgICAgICAgICAvLyBkYXRhIHlvdSBjb2xsZWN0ZWQgaW4gc3Rh
Z2UgKDEpLCBzdWNoIGFzIHRoZSBhZGRlbmQgaW4gdGhpcyBjYXNlLgorICAgIC8vICAgICAgICAg
ICAgICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGFkZGVuZCksIGlucHV0R1BSLCBvdXRwdXRH
UFIpOworICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgaGF2ZSB0byBlbmQgYnkganVtcGlu
ZyB0byBkb25lLiBUaGVyZSBpcyBub3RoaW5nIHRvIGZhbGwgdGhyb3VnaCB0by4KKyAgICAvLyAg
ICAgICAgICAgICAgICAgLy8gWW91IGNhbiBhbHNvIGp1bXAgdG8gdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyIChzZWUgTGF6eVNsb3dQYXRoLmggZm9yIG1vcmUKKyAgICAvLyAgICAgICAgICAgICAgICAg
Ly8gaW5mbykuIE5vdGUgdGhhdCBjdXJyZW50bHkgeW91IGNhbm5vdCBPU1IgZXhpdC4KKyAgICAv
LyAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgLy8gICAgICAgICAgICAgfSk7CisgICAgLy8gICAgIH0sCisgICAgLy8gICAgIGlucHV0KTsK
KyAgICAvLworICAgIC8vIFlvdSBjYW4gYmFzaWNhbGx5IHBhc3MgYXMgbWFueSBpbnB1dHMgYXMg
eW91IGxpa2UsIGVpdGhlciB1c2luZyB0aGlzIHZhcmFyZ3MgZm9ybSwgb3IgYnkKKyAgICAvLyBw
YXNzaW5nIGEgVmVjdG9yIG9mIExWYWx1ZXMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaWYg
eW91ciBzbG93IHBhdGggaXMgb25seSBkb2luZyBhIGNhbGwsIHlvdSBjYW4gdXNlIHRoZSBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcigpCisgICAgLy8gaGVscGVyLiBGb3IgZXhhbXBsZToKKyAgICAv
LworICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKKyAgICAvLyBMVmFsdWUgb3V0cHV0ID0gbGF6
eVNsb3dQYXRoKAorICAgIC8vICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgLy8gICAgICAg
ICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgLy8gICAgICAgICAgICAgb3Bl
cmF0aW9uRG9UaGluZ3MsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpKTsKKyAgICAvLyAgICAgfSwgaW5wdXQpOworICAgIC8vCisgICAgLy8gRmluYWxs
eSwgbm90ZSB0aGF0IGFsbCBvZiB0aGUgbGFtYmRhcyAtIGJvdGggdGhlIHN0YWdlICgyKSBsYW1i
ZGEgYW5kIHRoZSBzdGFnZSAoMykgbGFtYmRhIC0KKyAgICAvLyBydW4gYWZ0ZXIgdGhlIGZ1bmN0
aW9uIHRoYXQgY3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNlLCB5b3Ugc2hvdWxkIG5vdCB1c2Ug
YnktcmVmZXJlbmNlCisgICAgLy8gY2FwdHVyZSAoaS5lLiBbJl0pIGluIGFueSBvZiB0aGVzZSBs
YW1iZGFzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBsYXp5
U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFyZ3VtZW50cy4uLiB9KTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBsYXp5U2xvd1Bh
dGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJBcmd1
bWVudHMpCisgICAgeworICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBt
X291dC5wYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIGZvciAoTFZhbHVlIGFyZyA6IHVz
ZXJBcmd1bWVudHMpCisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGFyZywgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKworICAgICAgICBSZWZQdHI8UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhyZXN1bHQpOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Cisg
ICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworCisgICAgICAgIHJlc3VsdC0+c2V0
R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8
TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIzOjpWYWx1
ZVJlcCYgcmVwIDogcGFyYW1zKQorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5k
KExvY2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gZnVuY3Rvcihsb2NhdGlvbnMpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxl
SnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNlcHRpb25UYXJnZXQ+IGV4Y2VwdGlv
blRhcmdldCA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVF
eGl0Q3JlYXRpb24ocGFyYW1zKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwYXJ0
IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY29uY3JldGUgT1NS
RXhpdCBoZXJlLgorICAgICAgICAgICAgICAgIC8vIERvaW5nIHNvIHNob3VsZCBhdXRvbWFnaWNh
bGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4aXQgdGh1bmtzLgorCisgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRo
cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2
ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRvckp1bXAgPSBqaXQuanVtcCgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc28gbG9uZyBhcyB3ZSdy
ZSBoZXJlLCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBvdXIgbGF0ZSBwYXRoCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBydW5zIGJlZm9yZSBvciBhZnRlciBhbnkgb3RoZXIgbGF0ZSBwYXRo
cyB0aGF0IHdlIG1pZ2h0IGRlcGVuZCBvbiwgbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KKworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZNKiB2bSA9ICZzdGF0ZS0+Z3JhcGgubV92bTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgbGlua2VkUGF0Y2hhYmxlSnVtcCA9
IENvZGVMb2NhdGlvbkp1bXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsaW5rZWREb25lID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGRvbmUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPExhenlT
bG93UGF0aD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2Vk
UGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxpbmtCdWZmZXIpLCB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxTaXRlSW5k
ZXgsIGdlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRl
eF0gPSBXVEZNb3ZlKGxhenlTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoa2luZCwg
bG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgbV9vcmlnaW4pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3Bl
Y3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAg
ICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlkQWxy
ZWFkeVRlcm1pbmF0ZSgpCisgICAgeworICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBFeGl0S2luZCBleGl0S2luZCA9
IEJhZFR5cGUpCisgICAgeworICAgICAgICBhcHBlbmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hW
YWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBleGl0S2luZCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIEV4aXRLaW5kIGV4aXRLaW5kKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGhpZ2hWYWx1
ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNT
RVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOworICAgICAgICBhcHBl
bmRPU1JFeGl0KGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENvbmRp
dGlvbiwgbV9vcmlnaW4pOworICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlcihoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dJbnQzMihF
ZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRT
cGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRn
ZS0+YXNKU1ZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgeworICAg
ICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmludDMyWmVybzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBt
X291dC5jb25zdEludDMyKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRnZSwgdmFsdWUudmFsdWUoKSk7Cisg
ICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmljdElu
dDUyVG9JbnQzMihlZGdlLCBpbnQ1MlRvU3RyaWN0SW50NTIodmFsdWUudmFsdWUoKSkpOworICAg
ICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRS
ZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBp
c05vdEludDMyKGJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5i
b3hJbnQzMihib3hlZFJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0lu
dDMyKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBt
X291dC5pbnQzMlplcm87CisgICAgfQorICAgIAorICAgIGVudW0gSW50NTJLaW5kIHsgU3RyaWN0
SW50NTIsIEludDUyIH07CisgICAgTFZhbHVlIGxvd0ludDUyKEVkZ2UgZWRnZSwgSW50NTJLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51
c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpOworICAgICAgICAKKyAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBj
YXNlIEludDUyOgorICAgICAgICAgICAgdmFsdWUgPSBtX2ludDUyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhbHVlID0g
bV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50NTIo
dmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnQ1MlRvU3Ry
aWN0SW50NTIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhcHJvdmVuVHlwZShlZGdlKSk7
CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5p
bnQ2NFplcm87CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dJbnQ1MihFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwgSW50NTIpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93U3RyaWN0SW50NTIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIFN0cmljdEludDUyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBi
ZXR0ZXJVc2VTdHJpY3RJbnQ1MihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFp
c1ZhbGlkKG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpKTsKKyAgICB9CisgICAgYm9vbCBiZXR0ZXJV
c2VTdHJpY3RJbnQ1MihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYmV0dGVyVXNl
U3RyaWN0SW50NTIoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludDUyS2luZCBiZXN0SW50NTJLaW5kKFQgbm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihub2RlKSA/IFN0cmljdEludDUyIDogSW50NTI7Cisg
ICAgfQorICAgIEludDUyS2luZCBvcHBvc2l0ZShJbnQ1MktpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIEludDUyOgorICAgICAgICAgICAgcmV0
dXJuIFN0cmljdEludDUyOworICAgICAgICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAg
cmV0dXJuIEludDUyOworICAgICAgICB9CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuIEludDUyOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93V2hpY2hldmVySW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQmIGtpbmQp
CisgICAgeworICAgICAgICBraW5kID0gYmVzdEludDUyS2luZChlZGdlKTsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIGtpbmQpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Q2Vs
bChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJh
bmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBERkc6OmlzQ2VsbChlZGdlLnVz
ZUtpbmQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gSlNDb25zdGFu
dCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOworICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZShVbmNvdW50YWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIodmFs
dWUuYXNDZWxsKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0g
dmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENl
bGwodW5jaGVja2VkVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRWYWx1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
ICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNv
dW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93T2JqZWN0KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSwgbW9kZSk7CisgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93
U3RyaW5nKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGlj
T3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gU3RyaW5nSWRlbnRVc2UpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSwgbW9kZSk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93
U3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IFN0cmluZ0lkZW50VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dT
dHJpbmcoZWRnZSwgbW9kZSk7CisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9h
ZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBzcGVjdWxhdGVT
dHJpbmdJZGVudChlZGdlLCBzdHJpbmcsIHN0cmluZ0ltcGwpOworICAgICAgICByZXR1cm4gc3Ry
aW5nSW1wbDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG93U3ltYm9sKEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpOworCisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOworICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
ZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFs
dWUgbG93Tm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VL
aW5kKCkgPT0gT2JqZWN0VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBs
b3dDZWxsKGVkZ2UsIG1vZGUpOworICAgICAgICBzcGVjdWxhdGVOb25OdWxsT2JqZWN0KGVkZ2Us
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCht
b2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBCb29sZWFuVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQm9vbGVhblVzZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEJvb2wodmFsdWUuYXNCb29sZWFuKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9i
b29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZhbHVl
LnZhbHVlKCk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBq
c1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xl
YW4odW5ib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94Qm9v
bGVhbih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2Up
ICYgU3BlY0Jvb2xlYW4pKTsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxv
d0RvdWJsZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIExvd2Vy
ZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUo
KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFwcm92ZW5UeXBlKGVkZ2Up
KTsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmRvdWJsZVplcm87CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dKU1ZhbHVlKEVkZ2UgZWRn
ZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0
aW9uKQorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIWlzRG91YmxlKGVkZ2UudXNl
S2luZCgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtp
bmQoKSAhPSBJbnQ1MlJlcFVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOworCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFs
dWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAor
ICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50
MzIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94
Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVmFsdWUgbm90IGRlZmlu
ZWQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dTdG9y
YWdlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7Cisg
ICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgbm9WYWx1ZSgpLCBlZGdlLCBTcGVj
SW50MzIsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChtX291dC5zaWduRXh0MzJUbzY0KHJl
c3VsdCksIHZhbHVlKSk7CisgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50
NTJUb0RvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuaW50
VG9Eb3VibGUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0pT
VmFsdWUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNJbnQzMiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNJbnQzMiBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBpc0RvdWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNEb3VibGUgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpY3RJbnQ1MlRv
SlNWYWx1ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDI+IHJlc3VsdHM7CisgICAgICAgICAgICAKKyAgICAgICAgTFZhbHVlIGludDMy
VmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LmVxdWFsKG1fb3V0LnNpZ25FeHQzMlRvNjQoaW50MzJWYWx1ZSks
IHZhbHVlKSwKKyAgICAgICAgICAgIHVuc3VyZShpc0ludDMyKSwgdW5zdXJlKGlzRG91YmxlKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzSW50MzIsIGlzRG91YmxlKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihib3hJbnQzMihpbnQzMlZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpc0RvdWJsZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihib3hEb3VibGUobV9vdXQuaW50VG9Eb3VibGUodmFsdWUpKSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgcmVzdWx0cyk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSW50
NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnNobCh2YWx1ZSwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7CisgICAgfQorICAg
IAorICAgIExWYWx1ZSBpbnQ1MlRvU3RyaWN0SW50NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
aW50NTJTaGlmdEFtb3VudCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNJbnQzMihMVmFs
dWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAg
ICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNJbnQzMikp
CisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmVP
ckVxdWFsKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIExWYWx1ZSBpc05v
dEludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
CisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
flNwZWNJbnQzMikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4g
bV9vdXQuYmVsb3coanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgTFZhbHVl
IHVuYm94SW50MzIoTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQu
Y2FzdFRvSW50MzIoanNWYWx1ZSk7CisgICAgfQorICAgIExWYWx1ZSBib3hJbnQzMihMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKG1fb3V0Lnplcm9FeHQodmFs
dWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgCisgICAgTFZh
bHVlIGlzQ2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUsIFNwZWNDZWxsIHwgU3BlY01pc2MpKQorICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVO
dW1iZXIpOworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RDZWxsT3JNaXNjKExWYWx1ZSBqc1ZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAo
TFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgfihTcGVjQ2VsbCB8IFNwZWNNaXNj
KSkpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQudGVz
dE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgdW5ib3hEb3VibGUoTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
bV9vdXQuYml0Q2FzdChtX291dC5hZGQoanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKSwgbV9vdXQu
ZG91YmxlVHlwZSk7CisgICAgfQorICAgIExWYWx1ZSBib3hEb3VibGUoTFZhbHVlIGRvdWJsZVZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnN1YihtX291dC5iaXRDYXN0KGRvdWJs
ZVZhbHVlLCBtX291dC5pbnQ2NCksIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIAorICAg
IExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVl
KQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0ludDUy
IHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0ludDUyIHVuYm94aW5nIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgaXNOb3RJbnQzMjsKKyAg
ICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikp
CisgICAgICAgICAgICBpc05vdEludDMyID0gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBl
bHNlIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0ludDMyKSkK
KyAgICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlzTm90SW50MzIoYm94ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91YmxlQ2FzZSksIHVu
c3VyZShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0ludDUyID0gbV9vdXQuYW5jaG9yKAorICAgICAg
ICAgICAgbV9vdXQuc2lnbkV4dDMyVG82NCh1bmJveEludDMyKGJveGVkVmFsdWUpKSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1Miks
IGJveGVkVmFsdWUpOworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFs
dWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUs
CisgICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJlc3VsdCwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKKyAgICAgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21C
bG9jayBkb3VibGVUb0ludDUyID0gbV9vdXQuYW5jaG9yKHBvc3NpYmxlUmVzdWx0KTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAg
IHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIGludFRvSW50NTIsIGRvdWJsZVRvSW50NTIp
OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZG91YmxlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2Us
IExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSBwb3NzaWJsZVJlc3VsdCA9IG1f
b3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkNvbnZlcnREb3VibGVUb0ludDUyKSwgdmFsdWUpOworICAgICAgICBGVExfVFlQRV9DSEVD
S19XSVRIX0VYSVRfS0lORChJbnQ1Mk92ZXJmbG93LAorICAgICAgICAgICAgZG91YmxlVmFsdWUo
dmFsdWUpLCBlZGdlLCBTcGVjSW50NTJBc0RvdWJsZSwKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Om5vdEludDUyKSkpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVzdWx0OworICAgIH0KKworICAgIExW
YWx1ZSBjb252ZXJ0RG91YmxlVG9JbnQzMihMVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8pCisgICAgeworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQu
ZG91YmxlVG9JbnQodmFsdWUpOworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlQ29udmVydGVk
VG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyVmFsdWUpOworICAgICAgICBMVmFs
dWUgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlciA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQodmFsdWUsIGludGVnZXJWYWx1ZUNvbnZlcnRlZFRvRG91YmxlKTsKKyAgICAgICAg
c3BlY3VsYXRlKE92ZXJmbG93LCBGb3JtYXR0ZWRWYWx1ZShEYXRhRm9ybWF0RG91YmxlLCB2YWx1
ZSksIG1fbm9kZSwgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlcik7CisKKyAgICAgICAgaWYg
KHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayB2YWx1
ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgb24g
emVybyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGludGVnZXJWYWx1ZSksIHVuc3Vy
ZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh2YWx1ZUlzWmVybywgY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUJpdGNhc3RUb0ludDY0ID0gbV9vdXQu
Yml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQpOworICAgICAgICAgICAgTFZhbHVlIHNpZ25CaXRT
ZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVCaXRjYXN0VG9JbnQ2NCwgbV9vdXQuY29uc3RJbnQ2
NCgwKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIEZvcm1hdHRlZFZh
bHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2RlLCBzaWduQml0U2V0KTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bnRlZ2VyVmFsdWU7CisgICAgfQorCisgICAgTFZhbHVlIGlzTnVtYmVyKExWYWx1ZSBqc1ZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAo
TFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIGlzTm90Q2VsbE9yTWlzYyhq
c1ZhbHVlKTsKKyAgICB9CisgICAgTFZhbHVlIGlzTm90TnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZh
bHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBpc0NlbGxPck1pc2MoanNWYWx1
ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdENlbGwoTFZhbHVlIGpzVmFsdWUsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0NlbGwpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoanNWYWx1
ZSwgbV90YWdNYXNrKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzQ2VsbChMVmFsdWUganNW
YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvNjQo
anNWYWx1ZSwgbV90YWdNYXNrKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90TWlzYyhM
VmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7Cisg
ICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY01pc2Mp
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3Zl
KHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wgfCBU
YWdCaXRVbmRlZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTWlzYyhMVmFsdWUg
dmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAg
IGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjTWlzYykpCisgICAg
ICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQubG9naWNhbE5vdChp
c05vdE1pc2ModmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90Qm9vbGVhbihM
VmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsK
KyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjQm9v
bGVhbikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQu
dGVzdE5vblplcm82NCgKKyAgICAgICAgICAgIG1fb3V0LmJpdFhvcihqc1ZhbHVlLCBtX291dC5j
b25zdEludDY0KFZhbHVlRmFsc2UpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQofjEp
KTsKKyAgICB9CisgICAgTFZhbHVlIGlzQm9vbGVhbihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92
ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIHJldHVy
biBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzTm90Qm9vbGVhbihq
c1ZhbHVlKSk7CisgICAgfQorICAgIExWYWx1ZSB1bmJveEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUp
CisgICAgeworICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFyYW50ZWVz
IHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVnZXIKKyAgICAgICAgLy8gdmFsdWUg
aXMganVzdCAwIG9yIDEuIEJ1dCBmb3Igbm93IHdlIGRvIGl0IHRoZSBkdW1iIHdheS4KKyAgICAg
ICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NChtX291dC5iaXRBbmQoanNWYWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NCgxKSkpOworICAgIH0KKyAgICBMVmFsdWUgYm94Qm9vbGVhbihMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgdmFsdWUs
IG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVlKSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNl
KSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdE90aGVyKExWYWx1ZSB2YWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1
ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdEludDY0KH5UYWdCaXRVbmRlZmluZWQp
KSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7CisgICAgfQorICAg
IExWYWx1ZSBpc090aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNG
dWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVl
KHR5cGUsIFNwZWNPdGhlcikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICBy
ZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICBtX291dC5iaXRBbmQodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChWYWx1ZU51bGwpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzUHJvdmVuVmFsdWUo
U3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSwgU3BlY3VsYXRlZFR5cGUgd2FudGVkVHlwZSkKKyAg
ICB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB+d2FudGVkVHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB3
YW50ZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS25vd25JbnQz
MlVzZToKKyAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBLbm93blBy
aW1pdGl2ZVVzZToKKyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgIGNhc2UgSW50
NTJSZXBVc2U6CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJVc2U6Cisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhlZGdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
YWNoaW5lSW50VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlTWFjaGluZUludChlZGdlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZ1
bmN0aW9uVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24oZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZpbmFsT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlRmluYWxPYmplY3Qo
ZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50
KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2Jq
ZWN0KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJp
bmdPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChl
ZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVk
Z2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToK
KyAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoZWRnZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5lSW50VXNlOgorICAgICAgICAgICAg
c3BlY3VsYXRlRG91YmxlUmVwTWFjaGluZUludChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVk
Z2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgor
ICAgICAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5nVmFyKGVkZ2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU5vdENl
bGwoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPdGhlclVzZToKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2MoZWRnZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJVbnN1cHBvcnRlZCBzcGVjdWxhdGlvbiB1c2Uga2luZCIpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBzcGVjdWxhdGUoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbG93SW50MzIoZWRnZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICBsb3dDZWxsKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNl
bGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9uIikp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
LCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51YXRp
b24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBqc1ZhbHVl
VG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbikpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNPYmplY3QoTFZhbHVlIGNlbGwsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIFNwZWNPYmplY3QpKQor
ICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3ZlT3JF
cXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlND
ZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE9iamVjdFR5
cGUpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNOb3RPYmplY3QoTFZhbHVlIGNlbGwsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUg
cHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjT2JqZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5iZWxvdygKKyAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvVHlwZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE9iamVjdFR5cGUpKTsKKyAg
ICB9CisKKyAgICBMVmFsdWUgaXNOb3RTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0g
aXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjU3RyaW5nKSkKKyAgICAgICAgICAg
IHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgpKSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBpc1N0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4g
PSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY1N0cmluZykpCisgICAgICAgICAg
ICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAg
ICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOworICAg
IH0KKworICAgIExWYWx1ZSBpc05vdFN5bWJvbChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xTdHJ1Y3R1cmUtPmlkKCkpKTsKKyAg
ICB9CisKKyAgICBMVmFsdWUgaXNBcnJheVR5cGUoTFZhbHVlIGNlbGwsIEFycmF5TW9kZSBhcnJh
eU1vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5n
VHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5n
VHlwZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5
Q2xhc3MoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKKyAgICAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5leHBlY3RlZCBvcmlnaW5h
bCBhcnJheSIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQoaW5kZXhpbmdUeXBl
LCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBhcnJheU1vZGUuc2hhcGVN
YXNrKCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Ok5vbkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxOb25BcnJheToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJp
dEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIoSXNBcnJheSB8IEluZGV4aW5nU2hh
cGVNYXNrKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoYXJyYXlNb2Rl
LnNoYXBlTWFzaygpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwgbV9vdXQuY29uc3RJ
bnQzMihJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBhcnJh
eSBjbGFzcyIpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVu
dHNUeXBlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTY29wZWRBcmd1bWVudHNUeXBlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5l
cXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
dHlwZUZvclR5cGVkQXJyYXlUeXBlKGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpKSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc0Z1bmN0aW9uKExWYWx1ZSBjZWxsLCBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZh
bHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCBTcGVjRnVuY3Rpb24p
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIGlzVHlwZShjZWxs
LCBKU0Z1bmN0aW9uVHlwZSk7CisgICAgfQorICAgIExWYWx1ZSBpc05vdEZ1bmN0aW9uKExWYWx1
ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAg
ICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCB+U3Bl
Y0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBp
c05vdFR5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IExWYWx1ZSBpc0V4b3RpY0ZvclR5cGVvZihMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKCEodHlwZSAmIFNwZWNPYmplY3RP
dGhlcikpCisgICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBy
ZXR1cm4gbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdl
dENhbGxEYXRhKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc1R5cGUoTFZhbHVlIGNlbGws
IEpTVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9U
eXBlKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodHlwZSkpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzVHlwZShjZWxsLCB0eXBlKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZ1
bmN0aW9uKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNGdW5jdGlvbiwgaXNOb3RGdW5jdGlv
bihjZWxsKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24oZWRnZSwgbG93Q2VsbChlZGdl
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHBy
aW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIgcHJpbWl0aXZlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBjb250aW51YXRp
b24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goaXNOb3RDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNhc2UpLCB1bnN1cmUoY2VsbENhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oY2VsbENhc2UsIHByaW1pdGl2ZUNhc2UpOworICAgICAgICAKKyAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCAoflNwZWNDZWxs
KSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRl
RmluYWxPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjRmlu
YWxPYmplY3QsIGlzTm90VHlwZShjZWxsLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7
CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1N0
cmluZyB8IH5TcGVjQ2VsbCwgaXNOb3RTdHJpbmcoY2VsbCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBMVmFsdWUgc3RyaW5nLCBMVmFsdWUgc3RyaW5nSW1w
bCkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZykpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHN0cmluZyks
IGVkZ2Uubm9kZSgpLCBtX291dC5pc051bGwoc3RyaW5nSW1wbCkpOworICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwgZWRnZS5ub2Rl
KCksCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzQXRvbWlj
KCkpKSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmdJZGVu
dCB8IH5TcGVjU3RyaW5nKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJ
ZGVudChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dTdHJpbmdJZGVudChlZGdlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNT
dHJpbmdPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICAgICAg
bV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNT
dHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3BlY3VsYXRlIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBzdHJpbmcgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGxvd0NlbGwoZWRnZSksIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJp
bmdTdHJ1Y3R1cmUtPmlkKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1
bnN1cmUobm90U3RyaW5nKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKKyAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRnZSwgc3RydWN0dXJlSUQpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIG1faW50
ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxsKEVkZ2UgZWRn
ZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRChlZGdlLCBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRChFZGdlIGVkZ2UsIExWYWx1ZSBzdHJ1Y3R1cmVJRCkKKyAgICB7CisgICAgICAg
IFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KKyAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYWJzdHJhY3RTdHJ1Y3R1cmUoZWRnZSku
aXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBO
b3RTdHJpbmdPYmplY3QsIG5vVmFsdWUoKSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOwor
ICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNTeW1ib2wgfCB+U3BlY0NlbGwsIGlzTm90U3ltYm9sKGNlbGwpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVjdWxh
dGVTeW1ib2woZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxh
dGVOb25OdWxsT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBG
VExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsIGlzTm90
T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBzcGVjdWxhdGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIGVk
Z2Uubm9kZSgpLAorICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAg
ICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0Zs
YWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBpc05vdE51bWJlcih2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVJlYWxOdW1iZXIoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhlcmUgYmVjYXVzZSBsb3dEb3VibGUo
KSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4KKyAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2
YWx1ZSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGludCBjYXNlIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0
ZVJlYWxOdW1iZXIgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZh
bHVlKSwKKyAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGludENhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygK
KyAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNC
eXRlY29kZVJlYWxOdW1iZXIsCisgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5U
eXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91YmxlKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBS
ZWFsKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFuIGVhcmx5IHJldHVybiBoZXJl
IGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxvdCBvZiBjb250cm9sIGZsb3cuCisg
ICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShl
ZGdlKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBkb3VibGVWYWx1ZSh2
YWx1ZSksIGVkZ2UsIFNwZWNEb3VibGVSZWFsLAorICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
cGVjdWxhdGVEb3VibGVSZXBNYWNoaW5lSW50KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoZWRnZSwgbG93RG91Ymxl
KGVkZ2UpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY1N0cmluZ1ZhcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUg
Tm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJp
bmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlz
IHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNl
LCBjb250aW51YXRpb24pOworICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCB2YWx1
ZSwgbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRl
ci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKyAgICAgICAgdHlwZUNoZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIH5T
cGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRl
T3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICB0eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY090aGVy
LCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTWlz
YyhFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBl
Q2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjTWlzYywgaXNO
b3RNaXNjKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ3Jh
cGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZENlbGxTdGF0ZShM
VmFsdWUgYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQzMihi
YXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOworICAgIH0KKworICAgIHZvaWQgZW1pdFN0
b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIElu
IGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCisgICAgICAgIC8vIHdo
ZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBj
b2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gd2FzdGluZyBMTFZNJ3Mg
dGltZSBvcHRpbWl6aW5nIGl0LgorICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQ
YXRoOjpjcmVhdGVHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxh
enlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5s
b2NrKGJhc2VHUFIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSBzYXZlZCB0aGVzZSwgc28gd2hlbiB3ZSBtYWtlIGEgc2xvdyBw
YXRoIGNhbGwsIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNh
dmUgdGhlbSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhj
bHVkZShSZWdpc3RlclNldChzY3JhdGNoMSwgc2NyYXRjaDIpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0o
KS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRj
aDIpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRUb0Zs
dXNoID0gaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHko
KSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoMSwgc2Ny
YXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMsIGppdCwgcGFyYW1zLmxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5leGNlcHRpb25KdW1wcywgb3BlcmF0aW9u
Rmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIEludmFsaWRHUFJSZWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNl
cnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbChMVHlw
ZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlwZSwg
ZnVuY3Rpb24sIGFyZ3MuLi4pOworICAgICAgICBjYWxsQ2hlY2soKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9
IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7Cisg
ICAgICAgIG1fb3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgIHRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KCkKKyAgICB7CisgICAgICAg
IGNhbGxQcmVmbGlnaHQoY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKTsKKyAgICB9
CisKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxJbmxpbmVkQ2Fs
bGVyCisgICAgICAgICAgICB8fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcgorICAgICAgICAgICAgfHwgbV9ub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhc2UgYXJpc2VzIHdo
ZW4geW91IGhhdmUgYSBzaXR1YXRpb24gbGlrZSB0aGlzOgorICAgICAgICAgICAgLy8gZm9vIG1h
a2VzIGEgY2FsbCB0byBiYXIsIGJhciBpcyBpbmxpbmVkIGluIGZvby4gYmFyIG1ha2VzIGEgY2Fs
bAorICAgICAgICAgICAgLy8gdG8gYmF6IGFuZCBiYXogaXMgaW5saW5lZCBpbiBiYXIuIEFuZCB0
aGVuIGJheiBtYWtlcyBhIHRhaWwtY2FsbCB0byBqYXosCisgICAgICAgICAgICAvLyBhbmQgamF6
IGlzIGlubGluZWQgaW4gYmF6LiBXZSB3YW50IHRoZSBjYWxsZnJhbWUgZm9yIGpheiB0byBhcHBl
YXIgdG8gCisgICAgICAgICAgICAvLyBoYXZlIGNhbGxlciBiZSBiYXIuCisgICAgICAgICAgICBj
b2RlT3JpZ2luID0gKmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGlu
Z1RhaWxDYWxscygpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2FsbENoZWNrKCkKKyAgICB7CisgICAgICAgIGlmIChPcHRp
b25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZv
aWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiksIG1fY2FsbEZy
YW1lKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAgICBMVmFs
dWUgaGFkRXhjZXB0aW9uID0gbV9vdXQubm90WmVybzY0KGV4Y2VwdGlvbik7CisKKyAgICAgICAg
Q29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOworICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9u
SGFuZGxlcjsKKyAgICAgICAgaWYgKG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5l
RnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcikp
IHsKKyAgICAgICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgIGJvb2wgaXNF
eGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAg
ICAgICAgICAgICAgRXhjZXB0aW9uQ2hlY2ssIG5vVmFsdWUoKSwgbnVsbHB0ciwgaGFkRXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgIG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0
Y2hPcmlnaW4sIGV4aXRPSyksIGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkV4Y2VwdGlvbiBjaGVjayBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaGFkRXhjZXB0aW9uLCByYXJlbHkobV9o
YW5kbGVFeGNlcHRpb25zKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgIH0KKworICAgIFJlZlB0cjxQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlPiBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2lu
dFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsK
KyAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIGJvb2wgd2ls
bENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFt
ZShtX29yaWdpbi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKKyAg
ICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZShtX2Z0bFN0YXRlKTsKKworICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgUGF0Y2hwb2ludCBleGNlcHRpb24gT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZh
aWxhYmlsaXR5TWFwKCksICJcbiIpOworICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292
ZXJpZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxh
YmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBleGl0T0sgPSB0cnVlOworICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmln
aW4sIGV4aXRPSyk7CisKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9y
ID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgpLCBudWxscHRyKTsKKworICAgICAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW50byB0aGUgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
IHdoZXJlIHdlIHdpbGwgZmluZCB0aGUgZXhpdCBhcmd1bWVudHMKKyAgICAgICAgLy8gd2UgYXJl
IGFib3V0IHRvIGFwcGVuZC4gV2UgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIHRoZSBjaGlsZHJl
biB3ZSd2ZSBhbHJlYWR5IGFkZGVkLCBhbmQKKyAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0
eSBvZiBhIHJlc3VsdCB2YWx1ZSBpZiB0aGUgcGF0Y2hwb2ludCBpcyBub3Qgdm9pZC4KKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmICh2
YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICBvZmZzZXQrKzsKKworICAgICAgICAv
LyBVc2UgTGF0ZUNvbGRBbnkgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNrbWFwIGFyZ3VtZW50cyBp
bnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2hwb2ludCdzCisgICAgICAgIC8vIHJlc3VsdCBhbmQgd2l0
aCBhbnkgbGF0ZS1jbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICB2YWx1ZS0+YXBwZW5kVmVj
dG9yV2l0aFJlcCgKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRv
ciwgb3BDYXRjaE9yaWdpbiwgbm9WYWx1ZSgpKSwKKyAgICAgICAgICAgIFZhbHVlUmVwOjpMYXRl
Q29sZEFueSk7CisKKyAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNy
ZWF0ZSgKKyAgICAgICAgICAgIG1fZnRsU3RhdGUsIGV4aXREZXNjcmlwdG9yLCBvcmlnaW4sIG9m
ZnNldCwgKmV4Y2VwdGlvbkhhbmRsZXIpOworICAgIH0KKworICAgIExCYXNpY0Jsb2NrIGxvd0Js
b2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9j
a3MuZ2V0KGJsb2NrKTsKKyAgICB9CisKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NS
RXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3Jp
cHRvcnMuYWxsb2MoCisgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0
dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24s
IAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBm
YWxzZSkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zl
cmllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFi
bGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7
CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgb3JpZ2lu
LmV4aXRPSyk7CisgICAgICAgIAorICAgICAgICBpZiAoZG9PU1JFeGl0RnV6emluZygpICYmICFp
c0V4Y2VwdGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpDaGVj
a3MgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKG1fb3V0LmFic29s
dXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKSwKKyAgICAgICAgICAgICAgICBtX291
dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobnVt
YmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5hYnNvbHV0ZSgmZ19udW1iZXJPZk9TUkV4aXRGdXp6Q2hl
Y2tzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bnNpZ25lZCBhdE9yQWZ0ZXIg
PSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpBdE9yQWZ0ZXIoKSkgeworICAgICAgICAgICAgICAg
IGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICAgICAgZmFpbENv
bmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKG51bWJlck9m
RnV6ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdE9yQWZ0ZXIpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodW5zaWduZWQgYXQgPSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpB
dCgpKSB7CisgICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiA9IG1fb3V0LmJpdE9yKAorICAg
ICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICBtX291
dC5lcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0LmNvbnN0SW50MzIoYXQpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291
dC5ib29sZWFuRmFsc2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYmxlc3NTcGVj
dWxhdGlvbigKKyAgICAgICAgICAgIG1fb3V0LnNwZWN1bGF0ZShmYWlsQ29uZGl0aW9uKSwga2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKKyAgICB9CisKKyAgICB2b2lkIGJsZXNz
U3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQorICAgIHsK
KyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhp
dERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBvcmln
aW4uZm9yRXhpdCwgbG93VmFsdWUpKTsKKworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxT
dGF0ZTsKKyAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgKKyAgICAg
ICAgICAgICAgICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4sIGppdCwgcGFyYW1zLCAwKTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KKworICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGJ1aWxkRXhp
dEFyZ3VtZW50cygKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBD
b2RlT3JpZ2luIGV4aXRPcmlnaW4sIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICB1
bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKKyAg
ICB7CisgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgYnVpbGRF
eGl0QXJndW1lbnRzKAorICAgICAgICAgICAgZXhpdERlc2NyaXB0b3IsIGV4aXRPcmlnaW4sIHJl
c3VsdCwgbG93VmFsdWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxkRXhp
dEFyZ3VtZW50cygKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBD
b2RlT3JpZ2luIGV4aXRPcmlnaW4sIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKKyAgICB7CisgICAgICAgIGlmICghIWxvd1Zh
bHVlKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5h
dmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLnBydW5lQnlMaXZlbmVz
cyhtX2dyYXBoLCBleGl0T3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSos
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxp
dHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3Vs
ZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHkubm9kZSgpOworICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX21hdGVy
aWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBh
dmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7
CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAgICAoIShhdmFpbGFiaWxpdHkuaXNEZWFkKCkg
JiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhp
dE9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKKyAgICAg
ICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlvbnNJbmRleEJ5T2Zmc2V0
KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOworICAgICAgICAgICAg
ZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAubV9oZWFw
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsKKyAgICAg
ICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBt
YXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1
ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUpOworICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKKyAgICAg
ICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlvbnNJbmRleEJ5T2Zmc2V0
KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOworICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmRlc2Ny
aXB0b3IoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0RGVzY3JpcHRvci0+bV92YWx1
ZXMsICJcbiIpOworICAgICAgICAgICAgaWYgKCFleGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6
YXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWF0
ZXJpYWxpemF0aW9uczogXG4iKTsKKyAgICAgICAgICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0RGVzY3JpcHRvci0+bV9tYXRl
cmlhbGl6YXRpb25zKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICAi
LCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRpb24pLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
CisgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8
Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZh
aWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9
IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQo
KSkgeworICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0Zs
dXNoOgorICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0
eS5ub2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
dGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291
bGQgaGF2ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2Fu
IHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAg
ICAgICAvLyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsK
KworICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxs
OgorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAg
cmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
ZGVhZCgpOworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAg
ICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2Rl
KiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgLy8gTk9URTogSW4gRlRMLT5CMywgd2UgY2Fubm90IGdlbmVy
YXRlIGNvZGUgaGVyZSwgYmVjYXVzZSBtX291dHB1dCBpcyBwb3NpdGlvbmVkIGFmdGVyIHRoZQor
ICAgICAgICAvLyBzdGFja21hcCB2YWx1ZS4gTGlrZSBhbGwgdmFsdWVzLCB0aGUgc3RhY2ttYXAg
dmFsdWUgY2Fubm90IHVzZSBhIGNoaWxkIHRoYXQgaXMgZGVmaW5lZCBhZnRlcgorICAgICAgICAv
LyBpdC4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBpZiAobm9kZSkg
eworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEJv
dHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYXJpc2UgaW4gb2JqZWN0
IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhhdCBpdCB3b3VsZCwKKyAgICAg
ICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0byBiZSBjb25zZXJ2YXRpdmUu
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBJbnQ1
MkNvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBBdmFpbGFibGVSZWNvdmVyeSByZWNvdmVyeSA9IG1fYXZhaWxh
YmxlUmVjb3Zlcmllc1tpXTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5ub2RlKCkgIT0gbm9k
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEV4aXRWYWx1ZSByZXN1
bHQgPSBFeGl0VmFsdWU6OnJlY292ZXJ5KAorICAgICAgICAgICAgICAgIHJlY292ZXJ5Lm9wY29k
ZSgpLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuc2l6ZSgpICsgMSwKKyAgICAgICAgICAg
ICAgICByZWNvdmVyeS5mb3JtYXQoKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHJl
Y292ZXJ5LmxlZnQoKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY292ZXJ5LnJp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUp
OworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFy
Z3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICAg
ICAgCisgICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1l
bnRzLCBEYXRhRm9ybWF0SW50NTIsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERh
dGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2
YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9y
bWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIHZh
bHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0RG91YmxlLCB2YWx1ZS52YWx1ZSgp
KTsKKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkNhbm5v
dCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjpkZWFkKCk7CisgICAgfQorCisgICAgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChT
dGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBEYXRhRm9ybWF0IGZvcm1hdCwgTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9IEV4aXRWYWx1ZTo6ZXhp
dEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvclRhaWxDYWxsKFN0YWNrbWFwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CisK
KyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
KyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50
OgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6Y29uc3RhbnQobm9kZS0+YXNKU1ZhbHVl
KCkpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5v
ZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhp
dEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2YWx1ZS52YWx1ZSgpKTsKKworICAg
ICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0
YUZvcm1hdEpTLCBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKSk7CisKKyAgICAgICAgdmFsdWUgPSBt
X2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCBi
b3hCb29sZWFuKHZhbHVlLnZhbHVlKCkpKTsKKworICAgICAgICAvLyBEb3VibGVzIGFuZCBJbnQ1
MiBoYXZlIGJlZW4gY29udmVydGVkIGJ5IFZhbHVlUmVwKCkKKyAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwg
bm9kZSkuZGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzS2lsbChFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBpZiAoZWRnZS5kb2VzTm90S2lsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAorICAgICAgICBOb2RlKiBu
b2RlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIERh
dGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLmFw
cGVuZChBdmFpbGFibGVSZWNvdmVyeShub2RlLCBvcGNvZGUsIGxlZnQsIHJpZ2h0LCBmb3JtYXQp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRBdmFpbGFibGVSZWNvdmVyeSgKKyAgICAgICAg
RWRnZSBlZGdlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3Zl
cnkoZWRnZS5ub2RlKCksIG9wY29kZSwgbGVmdCwgcmlnaHQsIGZvcm1hdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9o
aWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihOb2RlKiBub2RlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBtX2ludDUyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0cmljdElu
dDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RyaWN0SW50
NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7
CisgICAgfQorICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlLCBJbnQ1
MktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNl
IEludDUyOgorICAgICAgICAgICAgc2V0SW50NTIobm9kZSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyaWN0SW50NTI6CisgICAgICAg
ICAgICBzZXRTdHJpY3RJbnQ1Mihub2RlLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJD
b3JydXB0IGludDUyIGtpbmQiKTsKKyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVlKE5vZGUqIG5v
ZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5zZXQobm9k
ZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9p
ZCBzZXRCb29sZWFuKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTm9k
ZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRJbnQzMihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbnQzMiht
X25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRTdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdHJpY3RJbnQ1
MihtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihMVmFsdWUgdmFsdWUs
IEludDUyS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc2V0SW50NTIobV9ub2RlLCB2YWx1ZSwg
a2luZCk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShMVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEJv
b2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihtX25vZGUsIHZh
bHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91
YmxlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERvdWJsZShtX25vZGUsIHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IExvd2VyZWROb2RlVmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHZhbHVl
LmJsb2NrKCksIG1faGlnaEJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShK
U0NlbGwqIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVu
Y2VzLmFkZExhemlseSh0YXJnZXQpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkU3RydWN0dXJl
KExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB0YWJsZUluZGV4ID0gbV9vdXQu
bG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIExWYWx1
ZSB0YWJsZUJhc2UgPSBtX291dC5sb2FkUHRyKAorICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUo
dm0oKS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCkpKTsKKyAgICAgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLnN0cnVj
dHVyZVRhYmxlLCB0YWJsZUJhc2UsIG1fb3V0Lnplcm9FeHRQdHIodGFibGVJbmRleCkpOworICAg
ICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsKKyAgICB9CisKKyAgICBMVmFsdWUg
d2Vha1BvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgYWRkV2Vha1JlZmVy
ZW5jZShwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKHBvaW50ZXIp
OworICAgIH0KKworICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlSUQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKHN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgfQorICAgIAor
ICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIFR5
cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBt
X2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsKKyAgICB9CisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CisgICAgfQor
ICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKKyAg
ICB9CisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAgIH0KKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0K
KyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwor
ICAgIH0KKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0KKyAgICBU
eXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgVGFnT2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOworICAgIH0KKyAgICBBYnN0cmFjdFZhbHVl
IGFic3RyYWN0VmFsdWUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3RyYWN0
VmFsdWUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcm92
ZW5UeXBlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShu
b2RlKS5tX3R5cGU7CisgICAgfQorICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3ZlblR5cGUoZWRnZS5ub2RlKCkpOworICAg
IH0KKyAgICAKKyAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3ZhbHVlOworICAgIH0KKyAgICBKU1Zh
bHVlIHByb3ZlblZhbHVlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm92ZW5W
YWx1ZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUgYWJzdHJhY3RTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
YnN0cmFjdFZhbHVlKG5vZGUpLm1fc3RydWN0dXJlOworICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0dXJlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhYnN0cmFjdFN0cnVjdHVyZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorI2lmIEVO
QUJMRShNQVNNX1BST0JFKQorICAgIHZvaWQgcHJvYmUoc3RkOjpmdW5jdGlvbjx2b2lkIChDQ2Fs
bEhlbHBlcnM6OlByb2JlQ29udGV4dCopPiBwcm9iZUZ1bmMpCisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0ocHJvYmVGdW5jKTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgY3Jhc2goKQor
ICAgIHsKKyAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmluZGV4LCBtX25vZGUtPmluZGV4KCkp
OworICAgIH0KKyAgICB2b2lkIGNyYXNoKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgdW5zaWduZWQg
bm9kZUluZGV4KQorICAgIHsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9vdXQuY2Fs
bChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ0bFVucmVhY2hhYmxlKSk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShibG9ja0luZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJ
bmRleCk7CisjZWxzZQorICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQudm9p
ZFR5cGUsCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihmdGxVbnJlYWNoYWJsZSksCisg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSksIG1fb3V0LmNvbnN0SW50
MzIoYmxvY2tJbmRleCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKG5vZGVJbmRleCkp
OworI2VuZGlmCisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgfQorCisgICAgQXZh
aWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KKyAgICAKKyAgICBWTSYgdm0oKSB7IHJldHVybiBt
X2dyYXBoLm1fdm07IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3Jh
cGgubV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBTdGF0ZSYg
bV9mdGxTdGF0ZTsKKyAgICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5IG1faGVhcHM7CisgICAgT3V0
cHV0IG1fb3V0OworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIAorICAgIExCYXNpY0Jsb2Nr
IG1fcHJvbG9ndWU7CisgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOworICAgIEhh
c2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOworICAgIAorICAg
IExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBMVmFsdWUgbV9jYXB0dXJlZDsKKyAgICBMVmFsdWUg
bV90YWdUeXBlTnVtYmVyOworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAgSGFzaE1h
cDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5v
ZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0cmljdEludDUyVmFsdWVzOworICAgIEhhc2hNYXA8
Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50NTJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIGJp
dCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBoYXZpbmcgdG8gZG8gQ1NFIG9uIGxv
YWRpbmcgb2YgYXJndW1lbnRzLgorICAgIC8vIEl0J3MgbmljZSB0byBoYXZlIHRoZXNlIG9wdGlt
aXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBndWFyYW50ZWUgdGhlbSBhIGJpdCBi
ZXR0ZXIuCisgICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBMTFZNIGNvbXBpbGUgdGltZS4KKyAg
ICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXM7CisgICAgCisg
ICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CisgICAgCisgICAgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAKKyAgICBW
ZWN0b3I8QXZhaWxhYmxlUmVjb3ZlcnksIDM+IG1fYXZhaWxhYmxlUmVjb3ZlcmllczsKKyAgICAK
KyAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEFic3RyYWN0SW50ZXJwcmV0
ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CisgICAgREZHOjpCYXNpY0Js
b2NrKiBtX2hpZ2hCbG9jazsKKyAgICBERkc6OkJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsK
KyAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKKworICAgIE5vZGVPcmlnaW4gbV9vcmln
aW47CisgICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CisgICAgTm9kZSogbV9ub2RlOworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0
YXRlKQoreworICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRlKTsKKyAgICBsb3dlcmlu
Zy5sb3dlcigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTExvd2VyREZHVG9MTFZN
LmgiCisjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0IzLmgiCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
IApAQCAtMTA1LDcgKzEwNSw3IEBAIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQg
ZnRsVW4KIH0KICNlbmRpZgogCi0vLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkg
aGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0aW5nCisvLyBVc2luZyB0
aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIEIz
LCBieSBjcmVhdGluZwogLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUg
RlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQoZXhpdEtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCiAgICAgICAgIEZv
cm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAg
ICAgICBcCkBAIC0xMTksMTAgKzExOSwxMCBAQCBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRp
YyB2b2lkIGZ0bFVuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgXAogICAgIEZUTF9UWVBFX0NIRUNL
X1dJVEhfRVhJVF9LSU5EKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgZmFpbENvbmRpdGlvbikKIAotY2xhc3MgTG93ZXJERkdUb0xMVk0gewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKExvd2VyREZHVG9MTFZNKTsKK2NsYXNzIExvd2VyREZHVG9CMyB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG93ZXJERkdUb0IzKTsKIHB1YmxpYzoKLSAgICBM
b3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCisgICAgTG93ZXJERkdUb0IzKFN0YXRlJiBzdGF0
ZSkKICAgICAgICAgOiBtX2dyYXBoKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1fZnRsU3RhdGUo
c3RhdGUpCiAgICAgICAgICwgbV9vdXQoc3RhdGUpCkBAIC0zNTksNyArMzU5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIC8vIEFsbCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBu
ZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGtlZXAgdGhlCiAgICAgICAgIC8vIGdl
bmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dyYW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVj
dCB0aGUgcGVyZm9ybWFuY2UKLSAgICAgICAgLy8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5j
ZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVyIHRoaW5ncykgYnV0IGl0IHdpbGwKKyAgICAgICAg
Ly8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgQjMgdG8gcmVvcmRlciB0
aGluZ3MpIGJ1dCBpdCB3aWxsCiAgICAgICAgIC8vIG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJl
YWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAg
ICAgICAgIApAQCAtMTc2NCw4ICsxNzY0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGls
ZUFyaXRoUG93KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBsbHZtLnBv
d2kgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4K
LSAgICAgICAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBsb29wIGlu
IERGRyB0b28uCiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSkKICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xOTIyLDggKzE5MjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFz
aG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmICghc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyAiMCAtIHgiIGlzIHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGluIGJvdGgg
QjMgYW5kIExMVk0uIFRoaXMgZ2V0cwotICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQgdG8gdGhl
IHJpZ2h0IHRoaW5nLgogICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9vdXQu
c3BlY3VsYXRlU3ViKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwogICAgICAgICAgICAgICAgIGJs
ZXNzU3BlY3VsYXRpb24oY2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3Jp
Z2luKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVjazsKQEAgLTQyMTcsNyArNDIxMyw5
IEBAIHByaXZhdGU6CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCiAgICAgICAgIGlmIChkYXRhLmNhc2VzLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1
bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAgICAg
ICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJv
IGlucHV0cy4gTExWTSBkaWRuJ3QgbGlrZSB0aGF0LgorICAgICAgICAgICAgLy8gSXQncyBub3Qg
Y2xlYXIgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgyCiAgICAgICAgICAg
ICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC01ODQyLDcgKzU4NDAsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBkZWZhdWx0
SGFzSW5zdGFuY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNl
IFN5bWJvbC5oYXNJbnN0YW5jZSBpcyBkZWZhdWx0IikpOwogICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNl
IGNvbnRpbnVhdGlvbiIpKTsKIAotICAgICAgICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9u
J3Qgd29ycnkgYWJvdXQgY2xlYW5pbmcgdGhpcyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3
ZSBoYXZlIHByb3ZlbiB0aGUgaGFzSW5zdGFuY2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIExMVk0g
c2hvdWxkIGZpeCBpdCBmb3IgdXMuCisgICAgICAgIC8vIFVubGlrZSBpbiB0aGUgREZHLCB3ZSBk
b24ndCB3b3JyeSBhYm91dCBjbGVhbmluZyB0aGlzIGNvZGUgdXAgZm9yIHRoZSBjYXNlIHdoZXJl
IHdlIGhhdmUgcHJvdmVuIHRoZSBoYXNJbnN0YW5jZVZhbHVlIGlzIGEgY29uc3RhbnQgYXMgQjMg
c2hvdWxkIGZpeCBpdCBmb3IgdXMuCiAKICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmNoaWxkMigp
Lm5vZGUoKS0+aXNDZWxsQ29uc3RhbnQoKSB8fCBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9
PSBtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+YXNDZWxsKCkpOwogCkBAIC04NDM5LDIzICs4NDM3
LDIzIEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGlu
ZyBhIGNvZGUgZ2VuZXJhdG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUgdXNpbmcg
b3VyCiAgICAgLy8gb3duIE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xvdyBw
YXRocyB0aGF0IGludm9sdmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAotICAgIC8v
IHRvIHBheSB0aGUgcHJpY2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRo
IHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKKyAgICAvLyB0byBwYXkgdGhl
IHByaWNlIG9mIEIzIG9wdGltaXppbmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2lsbCBvbmx5IGJl
IGdlbmVyYXRlZCBpZiBpdCBhY3R1YWxseQogICAgIC8vIGV4ZWN1dGVzLiBPbiB0aGUgb3RoZXIg
aGFuZCwgYSBsYXp5IHNsb3cgcGF0aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9mIHR3byBhZGRp
dGlvbmFsIGp1bXBzLgotICAgIC8vIEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdzIHJlZ2lzdGVy
IGFsbG9jYXRpb24gc3RhdGUgaXMgc2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlkLCBzbyB5b3UK
KyAgICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0
YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZlciBCMyBkaWQsIHNvIHlvdQogICAgIC8vIGhhdmUgdG8g
dXNlIGEgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHRvIHRyeSB0byB1c2Ugc29tZSB1bnVzZWQg
cmVnaXN0ZXJzIGFuZCB5b3UgbWF5IGhhdmUKICAgICAvLyB0byBzcGlsbCB0byB0b3Agb2Ygc3Rh
Y2sgaWYgdGhlcmUgYXJlbid0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlLgogICAgIC8vCiAg
ICAgLy8gTGF6eSBzbG93IHBhdGhzIGludm9sdmUgdGhyZWUgZGlmZmVyZW50IHN0YWdlcyBvZiBl
eGVjdXRpb24uIEVhY2ggc3RhZ2UgaGFzIHVuaXF1ZQogICAgIC8vIGNhcGFiaWxpdGllcyBhbmQg
a25vd2xlZGdlLiBUaGUgc3RhZ2VzIGFyZToKICAgICAvLwotICAgIC8vIDEpIERGRy0+TExWTSBs
b3dlcmluZywgaS5lLiBjb2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0
aGUgbGFzdCB0aW1lIHlvdSB3aWxsCisgICAgLy8gMSkgREZHLT5CMyBsb3dlcmluZywgaS5lLiBj
b2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0aGUgbGFzdCB0aW1lIHlv
dSB3aWxsCiAgICAgLy8gICAgaGF2ZSBhY2Nlc3MgdG8gTFZhbHVlcy4gSWYgdGhlcmUgaXMgYW4g
TFZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgZmVkIGFzIGlucHV0IHRvIGEgbGF6eSBzbG93CiAgICAg
Ly8gICAgcGF0aCwgdGhlbiB5b3UgbXVzdCBwYXNzIGl0IGFzIGFuIGFyZ3VtZW50IGhlcmUgKGFz
IG9uZSBvZiB0aGUgdmFyYXJncyBhcmd1bWVudHMgYWZ0ZXIgdGhlCiAgICAgLy8gICAgZnVuY3Rv
cikuIEJ1dCwgbG93ZXJpbmcgZG9lc24ndCBrbm93IHdoaWNoIHJlZ2lzdGVycyB3aWxsIGJlIHVz
ZWQgZm9yIHRob3NlIExWYWx1ZXMuIEhlbmNlCiAgICAgLy8gICAgeW91IHBhc3MgYSBsYW1iZGEg
dG8gbGF6eVNsb3dQYXRoKCkgYW5kIHRoYXQgbGFtYmRhIHdpbGwgcnVuIGR1cmluZyBzdGFnZSAo
Mik6CiAgICAgLy8KICAgICAvLyAyKSBGVExDb21waWxlLmNwcCdzIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcy4gVGhpcyBjb2RlIGlzIHRoZSBvbmx5IHN0YWdlIGF0IHdoaWNoIHdlIGtub3cK
LSAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRo
b2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgTExWTQorICAgIC8vICAgIHRoZSBtYXBw
aW5nIGZyb20gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRoZSBy
ZWdpc3RlcnMgdGhhdCBCMwogICAgIC8vICAgIHNlbGVjdGVkIGZvciB0aG9zZSBhcmd1bWVudHMu
IFlvdSBkb24ndCBhY3R1YWxseSB3YW50IHRvIGdlbmVyYXRlIGFueSBjb2RlIGhlcmUsIHNpbmNl
IHRoZW4KICAgICAvLyAgICB0aGUgc2xvdyBwYXRoIHdvdWxkbid0IGFjdHVhbGx5IGJlIGxhemls
eSBnZW5lcmF0ZWQuIEluc3RlYWQsIHlvdSB3YW50IHRvIHNhdmUgdGhlCiAgICAgLy8gICAgcmVn
aXN0ZXJzIGJlaW5nIHVzZWQgZm9yIHRoZSBhcmd1bWVudHMgYW5kIGRlZmVyIGNvZGUgZ2VuZXJh
dGlvbiB0byBzdGFnZSAoMykgYnkgY3JlYXRpbmcKQEAgLTg0NjUsOCArODQ2Myw4IEBAIHByaXZh
dGU6CiAgICAgLy8gICAgZXhlY3V0aW5nIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgd2lsbCBjYWxs
IHRoZSBnZW5lcmF0b3IgeW91IGNyZWF0ZWQgaW4gc3RhZ2UgKDIpLgogICAgIC8vCiAgICAgLy8g
Tm90ZSB0aGF0IGVhY2ggdGltZSB5b3UgaW52b2tlIHN0YWdlICgxKSwgc3RhZ2UgKDIpIG1heSBi
ZSBpbnZva2VkIHplcm8sIG9uZSwgb3IgbWFueSB0aW1lcy4KLSAgICAvLyBTdGFnZSAoMikgd2ls
bCB1c3VhbGx5IGJlIGludm9rZWQgb25jZSBmb3Igc3RhZ2UgKDEpLiBCdXQsIExMVk0gbWF5IGtp
bGwgdGhlIGNvZGUsIGluIHdoaWNoCi0gICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3QgcnVuLiBM
TFZNIG1heSBkdXBsaWNhdGUgdGhlIGNvZGUgKGZvciBleGFtcGxlIHZpYSBqdW1wIHRocmVhZGlu
ZyksCisgICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZva2VkIG9uY2UgZm9yIHN0
YWdlICgxKS4gQnV0LCBCMyBtYXkga2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKKyAgICAvLyBjYXNl
IHN0YWdlICgyKSB3b24ndCBydW4uIEIzIG1heSBkdXBsaWNhdGUgdGhlIGNvZGUgKGZvciBleGFt
cGxlIHZpYSB0YWlsIGR1cGxpY2F0aW9uKSwKICAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMg
dG8geW91ciBzdGFnZSAoMikgbGFtYmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9y
IG9uY2UgZm9yIGVhY2gKICAgICAvLyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8g
dGltZXMgaWYgdGhlIHNsb3cgcGF0aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUg
Zm9yCiAgICAgLy8gd2hlbmV2ZXIgeW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNt
LgpAQCAtOTEzNCw3ICs5MTMyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgTFZhbHVlIHVuYm94
Qm9vbGVhbihMVmFsdWUganNWYWx1ZSkKICAgICB7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gdXNl
IGEgY2FzdCB0aGF0IGd1YXJhbnRlZXMgdGhhdCBMTFZNIGtub3dzIHRoYXQgZXZlbiB0aGUgaW50
ZWdlcgorICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFyYW50ZWVzIHRo
YXQgQjMga25vd3MgdGhhdCBldmVuIHRoZSBpbnRlZ2VyCiAgICAgICAgIC8vIHZhbHVlIGlzIGp1
c3QgMCBvciAxLiBCdXQgZm9yIG5vdyB3ZSBkbyBpdCB0aGUgZHVtYiB3YXkuCiAgICAgICAgIHJl
dHVybiBtX291dC5ub3RaZXJvNjQobV9vdXQuYml0QW5kKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50
NjQoMSkpKTsKICAgICB9CkBAIC05NzE1LDcgKzk3MTMsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qg
b2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZlciBmaXJlLiBBbmQKICAgICAgICAgLy8gd2hlbiBpdCBk
b2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNp
bmcgb3VyIEpJVCByYXRoZXIgdGhhbgotICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9w
dGltaXppbmcgaXQuCisgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQu
CiAgICAgICAgIGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIo
KTsKQEAgLTEwNDI1LDkgKzEwNDIzLDkgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCi0gICAgLy8gVGhpcyBpcyBhIGJp
dCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBoYXZpbmcgdG8gZG8gQ1NFIG9uIGxv
YWRpbmcgb2YgYXJndW1lbnRzLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBCMyBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMu
CiAgICAgLy8gSXQncyBuaWNlIHRvIGhhdmUgdGhlc2Ugb3B0aW1pemF0aW9ucyBvbiBvdXIgZW5k
IGJlY2F1c2Ugd2UgY2FuIGd1YXJhbnRlZSB0aGVtIGEgYml0IGJldHRlci4KLSAgICAvLyBQcm9i
YWJseSBhbHNvIHNhdmVzIExMVk0gY29tcGlsZSB0aW1lLgorICAgIC8vIFByb2JhYmx5IGFsc28g
c2F2ZXMgQjMgY29tcGlsZSB0aW1lLgogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9sb2Fk
ZWRBcmd1bWVudFZhbHVlczsKICAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhp
czsKQEAgLTEwNDQ5LDkgKzEwNDQ3LDkgQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLXZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0YXRlKQordm9pZCBsb3dlckRG
R1RvQjMoU3RhdGUmIHN0YXRlKQogewotICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRl
KTsKKyAgICBMb3dlckRGR1RvQjMgbG93ZXJpbmcoc3RhdGUpOwogICAgIGxvd2VyaW5nLmxvd2Vy
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuaAkocmV2aXNpb24gMTk2NzMxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmg6MTk2NzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMTG93ZXJE
RkdUb0xMVk1faAorI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9oCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIGxvd2VyREZHVG9MTFZNKFN0
YXRlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMTG93ZXJERkdUb0xMVk1faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRlRM
TG93ZXJERkdUb0xMVk1faAotI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9oCisjaWZuZGVmIEZU
TExvd2VyREZHVG9CM19oCisjZGVmaW5lIEZUTExvd2VyREZHVG9CM19oCiAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIApAQCAtMzMsMTEgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOwordm9pZCBsb3dlckRGR1Rv
QjMoU3RhdGUmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCiAKLSNlbmRpZiAvLyBGVExMb3dlckRGR1RvTExWTV9oCisjZW5kaWYgLy8g
RlRMTG93ZXJERkdUb0IzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xM
Vk0uaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKLSNp
bmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKLSNpbmNsdWRl
ICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgotI2luY2x1ZGUgIkRGR0RvbWluYXRv
cnMuaCIKLSNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0RnV6
ei5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExBdmFpbGFibGVSZWNvdmVyeS5oIgotI2lu
Y2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdldC5oIgotI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklU
Q29kZS5oIgotI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKLSNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0LmgiCi0jaW5jbHVkZSAi
RlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgot
I2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCi0jaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9y
LmgiCi0jaW5jbHVkZSAiSklUQml0QW5kR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUQml0T3JH
ZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRYb3JHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJK
SVREaXZHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJK
SVRTdWJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNH
ZW5lcmF0b3JGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCi0j
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgi
Ci0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgotI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgIldhdGNoZG9nLmgiCi0jaW5jbHVkZSA8
YXRvbWljPgotI2lmICFPUyhXSU5ET1dTKQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLSNp
bmNsdWRlIDx1bm9yZGVyZWRfc2V0PgotI2luY2x1ZGUgPHd0Zi9Cb3guaD4KLSNpbmNsdWRlIDx3
dGYvUHJvY2Vzc0lELmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEIzOwotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQotbmFtZXNwYWNlIHsKLQot
c3RkOjphdG9taWM8aW50PiBjb21waWxlQ291bnRlcjsKLQotI2lmIEFTU0VSVF9ESVNBQkxFRAot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgpCi17Ci0g
ICAgQ1JBU0goKTsKLX0KLSNlbHNlCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lk
IGZ0bFVucmVhY2hhYmxlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKLXsKLSAgICBkYXRhTG9nKCJDcmFzaGluZyBp
biB0aG91Z2h0LXRvLWJlLXVucmVhY2hhYmxlIEZUTC1nZW5lcmF0ZWQgY29kZSBmb3IgIiwgcG9p
bnRlckR1bXAoY29kZUJsb2NrKSwgIiBhdCBiYXNpYyBibG9jayAjIiwgYmxvY2tJbmRleCk7Ci0g
ICAgaWYgKG5vZGVJbmRleCAhPSBVSU5UX01BWCkKLSAgICAgICAgZGF0YUxvZygiLCBub2RlIEAi
LCBub2RlSW5kZXgpOwotICAgIGRhdGFMb2coIi5cbiIpOwotICAgIENSQVNIKCk7Ci19Ci0jZW5k
aWYKLQotLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVj
ZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwotLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRl
YWQgY29kZS4KLSNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQoZXhpdEtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikg
ZG8geyBcCi0gICAgICAgIEZvcm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUp
OyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAo
aGlnaFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFNwZWN1
bGF0ZWRUeXBlIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7
ICBcCi0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hW
YWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gpKSBcCi0gICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHR5cGVDaGVjayhfZnRjX2xvd1ZhbHVlLCBfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bh
c3NlZFRocm91Z2gsIChmYWlsQ29uZGl0aW9uKSwgZXhpdEtpbmQpOyBcCi0gICAgfSB3aGlsZSAo
ZmFsc2UpCi0KLSNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBcCi0gICAgRlRMX1RZUEVfQ0hFQ0tfV0lU
SF9FWElUX0tJTkQoQmFkVHlwZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uKQotCi1jbGFzcyBMb3dlckRGR1RvTExWTSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTG93ZXJERkdUb0xMVk0pOwotcHVibGljOgotICAgIExvd2VyREZHVG9M
TFZNKFN0YXRlJiBzdGF0ZSkKLSAgICAgICAgOiBtX2dyYXBoKHN0YXRlLmdyYXBoKQotICAgICAg
ICAsIG1fZnRsU3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vdXQoc3RhdGUpCi0gICAgICAgICwg
bV9wcm9jKCpzdGF0ZS5wcm9jKQotICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCi0gICAg
ICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgbG93ZXIoKQotICAgIHsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7Ci0gICAgICAgIAotICAgICAgICBDU3RyaW5nIG5hbWU7Ci0gICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIG5hbWUgPSB0b0NTdHJp
bmcoCi0gICAgICAgICAgICAgICAgImpzQm9keV8iLCArK2NvbXBpbGVDb3VudGVyLCAiXyIsIGNv
ZGVCbG9jaygpLT5pbmZlcnJlZE5hbWUoKSwKLSAgICAgICAgICAgICAgICAiXyIsIGNvZGVCbG9j
aygpLT5oYXNoKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5hbWUgPSAianNCb2R5
IjsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOwotCi0gICAg
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9n
KCJGdW5jdGlvbiByZWFkeSwgYmVnaW5uaW5nIGxvd2VyaW5nLlxuIik7Ci0KLSAgICAgICAgbV9v
dXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKLQotICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJl
cXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCi0gICAgICAgIG1fb3V0
LnNldEZyZXF1ZW5jeSgxKTsKLSAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlByb2xvZ3VlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzdGFja092
ZXJmbG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdGFjayBvdmVyZmxvdyIpKTsKLSAgICAg
ICAgbV9oYW5kbGVFeGNlcHRpb25zID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYW5kbGUgRXhj
ZXB0aW9ucyIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrQXJndW1lbnRz
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVjayBhcmd1bWVudHMiKSk7Ci0KLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KG1f
aGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7Ci0gICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9o
aWdoQmxvY2ssIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9y
IGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXphdGlv
biBjb2RlLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBzdGFja092ZXJmbG93KTsKLSAgICAgICAgbV9v
dXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIG1fcHJvbG9ndWUpOwotICAgICAgICBjcmVh
dGVQaGlWYXJpYWJsZXMoKTsKLQotICAgICAgICBzaXplX3Qgc2l6ZU9mQ2FwdHVyZWQgPSBzaXpl
b2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKLSAgICAgICAgQjM6OlNs
b3RCYXNlVmFsdWUqIGNhcHR1cmVkQmFzZSA9IG1fb3V0LmxvY2tlZFN0YWNrU2xvdChzaXplT2ZD
YXB0dXJlZCk7Ci0gICAgICAgIG1fY2FwdHVyZWQgPSBtX291dC5hZGQoY2FwdHVyZWRCYXNlLCBt
X291dC5jb25zdEludFB0cihzaXplT2ZDYXB0dXJlZCkpOwotICAgICAgICBzdGF0ZS0+Y2FwdHVy
ZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZS0+c2xvdCgpOwotCi0gICAgICAgIGF1dG8gcHJlT3JkZXIg
PSBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKTsKLQotICAgICAgICAvLyBXZSBzaG91bGQgbm90
IGNyZWF0ZSBhbnkgYWxsb2NhJ3MgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2UgdGhleSB3aWxsIGNl
YXNlIHRvCi0gICAgICAgIC8vIGJlIG1lbTJyZWcgY2FuZGlkYXRlcy4KLSAgICAgICAgCi0gICAg
ICAgIG1fY2FsbEZyYW1lID0gbV9vdXQuZnJhbWVQb2ludGVyKCk7Ci0gICAgICAgIG1fdGFnVHlw
ZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7Ci0gICAgICAgIG1fdGFn
TWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgQjMga25vd3MgdGhhdCB3ZSByZWFsbHkgY2FyZSBhYm91dCB0aGUgbWFzayByZWdpc3Rl
cnMuIFRoaXMgZm9yY2VzIHRoZQotICAgICAgICAvLyBjb25zdGFudHMgdG8gYmUgbWF0ZXJpYWxp
emVkIGluIHJlZ2lzdGVycy4KLSAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudChtX3RhZ1R5
cGVOdW1iZXItPmtleSgpKTsKLSAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudChtX3RhZ01h
c2stPmtleSgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0
SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVzc0ZvcihKU1N0YWNrOjpDb2RlQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGRpZE92ZXJmbG93U3Rh
Y2soKSwgcmFyZWx5KHN0YWNrT3ZlcmZsb3cpLCB1c3VhbGx5KGNoZWNrQXJndW1lbnRzKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzdGFja092ZXJmbG93LCBtX2hhbmRsZUV4
Y2VwdGlvbnMpOwotICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpLCBtX2NhbGxGcmFtZSwgbV9v
dXQuY29uc3RJbnRQdHIoY29kZUJsb2NrKCkpKTsKLSAgICAgICAgbV9vdXQucGF0Y2hwb2ludChW
b2lkKS0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSB0ZXJtaW5hbCwgc28gd2UgY2FuIGNsb2JiZXIgZXZlcnl0aGluZy4gVGhhdCdzIHdoeSB3
ZSBkb24ndCBjbGFpbSB0bwotICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgc2NyYXRjaC4KLSAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0aW9ucywgY2hlY2tBcmd1bWVudHMp
OwotICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZXhjZXB0aW9uSGFuZGxlciA9IHN0
YXRlLT5leGNlcHRpb25IYW5kbGVyOwotICAgICAgICBtX291dC5wYXRjaHBvaW50KFZvaWQpLT5z
ZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXAgPSBqaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKCpleGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0FyZ3VtZW50cywgbG93QmxvY2sobV9ncmFwaC5i
bG9jaygwKSkpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07
Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9
IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBp
dCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFsbG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCi0gICAg
ICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVz
IHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgotICAgICAgICAgICAgICAgIC8vIHBs
YWNlIG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vzbid0IGhhdmUgYW55IGVmZmVjdHMg
YmVmb3JlIGl0LiBUaGlzCi0gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGhvbGQgdHJ1ZS4KLSAg
ICAgICAgICAgICAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBo
Lm1fYXJndW1lbnRGb3JtYXRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUp
LCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZENl
bGw6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1Zh
bHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX291dC5qdW1wKGxv
d0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoREZHOjpC
YXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKQotICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJs
b2NrKTsKLQotICAgICAgICAvLyBXZSBjcmVhdGUgYWxsIFBoaSdzIHVwIGZyb250LCBidXQgd2Ug
bWF5IHRoZW4gZGVjaWRlIG5vdCB0byBjb21waWxlIHRoZSBiYXNpYyBibG9jawotICAgICAgICAv
LyB0aGF0IHdvdWxkIGhhdmUgY29udGFpbmVkIG9uZSBvZiB0aGVtLiBTbyB0aGlzIGNyZWF0ZXMg
b3JwaGFucywgd2hpY2ggdHJpZ2dlcnMgQjMKLSAgICAgICAgLy8gdmFsaWRhdGlvbiBmYWlsdXJl
cy4gQ2FsbGluZyB0aGlzIGZpeGVzIHRoZSBpc3N1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
Tm90ZSB0aGF0IHlvdSBzaG91bGQgYXZvaWQgdGhlIHRlbXB0YXRpb24gdG8gbWFrZSB0aGlzIGNh
bGwgY29uZGl0aW9uYWwgdXBvbgotICAgICAgICAvLyB2YWxpZGF0aW9uIGJlaW5nIGVuYWJsZWQu
IEIzIG1ha2VzIG5vIGd1YXJhbnRlZXMgb2YgYW55IGtpbmQgb2YgY29ycmVjdG5lc3Mgd2hlbgot
ICAgICAgICAvLyBkZWFsaW5nIHdpdGggSVIgdGhhdCB3b3VsZCBoYXZlIGZhaWxlZCB2YWxpZGF0
aW9uLiBGb3IgZXhhbXBsZSwgaXQgd291bGQgYmUgdmFsaWQgdG8KLSAgICAgICAgLy8gd3JpdGUg
YSBCMyBwaGFzZSB0aGF0IHNvIGFnZ3Jlc3NpdmVseSBhc3N1bWVzIHRoZSBsYWNrIG9mIG9ycGhh
bnMgdGhhdCBpdCB3b3VsZCBjcmFzaAotICAgICAgICAvLyBpZiBhbnkgb3JwaGFucyB3ZXJlIGFy
b3VuZC4gV2UgbWlnaHQgZXZlbiBoYXZlIHN1Y2ggcGhhc2VzIGFscmVhZHkuCi0gICAgICAgIG1f
cHJvYy5kZWxldGVPcnBoYW5zKCk7Ci0KLSAgICAgICAgLy8gV2UgcHV0IHRoZSBibG9ja3MgaW50
byB0aGUgQjMgcHJvY2VkdXJlIGluIGEgc3VwZXIgd2VpcmQgb3JkZXIuIE5vdyB3ZSByZW9yZGVy
IHRoZW0uCi0gICAgICAgIG1fb3V0LmFwcGx5QmxvY2tPcmRlcigpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICAKLSAgICB2b2lkIGNyZWF0ZVBoaVZhcmlhYmxlcygpCi0gICAgewotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IERG
Rzo6UGhpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBM
VHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVS
ZXN1bHRNYXNrKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgotICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuZG91YmxlVHlwZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6Ci0gICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQzMjsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50NTI6Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQ2NDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IG1fb3V0LmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgotICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50NjQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiQmFkIFBoaSBub2RlIHJlc3VsdCB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUs
IG1fcHJvYy5hZGQ8VmFsdWU+KEIzOjpQaGksIHR5cGUsIE9yaWdpbihub2RlKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJsb2NrKERG
Rzo6QmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyBibG9jayAiLCAqYmxvY2ss
ICJcbiIpOwotICAgICAgICAKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBibG9jazsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBibG9ja3MgY3JlYXRlZCB3aGlsZSBsb3dl
cmluZyBjb2RlIGluIHRoZSBoaWdoIGJsb2NrIGhhdmUgdGhlIGZyZXF1ZW5jeSBvZgotICAgICAg
ICAvLyB0aGUgaGlnaCBibG9jay4gVGhpcyBpcyBhcHByb3ByaWF0ZSBiZWNhdXNlIEIzIGRvZXNu
J3QgbmVlZCBwcmVjaXNlIGZyZXF1ZW5jaWVzLiBJdCBqdXN0IG5lZWRzCi0gICAgICAgIC8vIHNv
bWV0aGluZyByb3VnaGx5IGFwcHJveGltYXRlIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlciBhbGxv
Y2F0aW9uLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3kobV9oaWdoQmxvY2stPmV4ZWN1dGlv
bkNvdW50KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9j
a3MuZ2V0KG1faGlnaEJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9
IDA7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IG1faGlnaEJsb2Nr
LT5pbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0
QmxvY2tJbmRleCkgewotICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5ibG9j
ayhuZXh0QmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2NrKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fbmV4dExvd0Jsb2NrID0g
bV9uZXh0SGlnaEJsb2NrID8gbV9ibG9ja3MuZ2V0KG1fbmV4dEhpZ2hCbG9jaykgOiAwOwotICAg
ICAgICAKLSAgICAgICAgLy8gQWxsIG9mIHRoaXMgZWZmb3J0IHRvIGZpbmQgdGhlIG5leHQgYmxv
Y2sgZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8ga2VlcCB0aGUKLSAgICAgICAgLy8gZ2VuZXJhdGVk
IElSIGluIHJvdWdobHkgcHJvZ3JhbSBvcmRlci4gVGhpcyBvdWdodCBub3QgYWZmZWN0IHRoZSBw
ZXJmb3JtYW5jZQotICAgICAgICAvLyBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgKHNpbmNlIHdlIGV4
cGVjdCBMTFZNIHRvIHJlb3JkZXIgdGhpbmdzKSBidXQgaXQgd2lsbAotICAgICAgICAvLyBtYWtl
IElSIGR1bXBzIGVhc2llciB0byByZWFkLgotICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9j
aywgbV9uZXh0TG93QmxvY2spOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENy
YXNoZXMoKSkKLSAgICAgICAgICAgIG1fb3V0LnRyYXAoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbV9oaWdoQmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBi
ZWNhdXNlIENGQSBkaWRuJ3QgcmVhY2guXG4iKTsKLSAgICAgICAgICAgIGNyYXNoKG1faGlnaEJs
b2NrLT5pbmRleCwgVUlOVF9NQVgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhtX2hp
Z2hCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBtX3N0YXRlLnJlc2V0KCk7Ci0gICAgICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAobV9ub2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsr
bV9ub2RlSW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghY29tcGlsZU5vZGUobV9ub2RlSW5kZXgp
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBz
YWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpCi0gICAgewotICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZy5c
biIpOwotICAgICAgICBjcmFzaCgpOwotCi0gICAgICAgIC8vIEludmFsaWRhdGUgZG9taW5hdGVk
IGJsb2Nrcy4gVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgd2Ugd291bGQgZXhwZWN0Ci0gICAg
ICAgIC8vIHRoZW0gdG8gYmUgaW52YWxpZGF0ZWQgYWxyZWFkeS4gQnV0IHlvdSBjYW4gaGF2ZSB0
aGUgQ0ZBIGJlY29tZSBtb3JlCi0gICAgICAgIC8vIHByZWNpc2Ugb3ZlciB0aW1lIGJlY2F1c2Ug
dGhlIHN0cnVjdHVyZXMgb2Ygb2JqZWN0cyBjaGFuZ2Ugb24gdGhlIG1haW4KLSAgICAgICAgLy8g
dGhyZWFkLiBGYWlsaW5nIHRvIGRvIHRoaXMgd291bGQgcmVzdWx0IGluIHdlaXJkIGNyYXNoZXMg
ZHVlIHRvIGEgdmFsdWUKLSAgICAgICAgLy8gYmVpbmcgdXNlZCBidXQgbm90IGRlZmluZWQuIFJh
Y2UgY29uZGl0aW9ucyBGVFchCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgREZHOjpC
YXNpY0Jsb2NrKiB0YXJnZXQgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAg
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkg
ewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkJsb2NrICIsICp0YXJnZXQsICIgd2lsbCBiYWlsIGFs
c28uXG4iKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgY29tcGlsZU5vZGUo
dW5zaWduZWQgbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQo
KSkgewotICAgICAgICAgICAgc2FmZWx5SW52YWxpZGF0ZUFmdGVyVGVybWluYXRpb24oKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9u
b2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fb3JpZ2luID0gbV9u
b2RlLT5vcmlnaW47Ci0gICAgICAgIG1fb3V0LnNldE9yaWdpbihtX25vZGUpOwotICAgICAgICAK
LSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRh
dGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxuIik7Ci0gICAgICAgIAotICAgICAgICBtX2F2
YWlsYWJsZVJlY292ZXJpZXMucmVzaXplKDApOwotICAgICAgICAKLSAgICAgICAgbV9pbnRlcnBy
ZXRlci5zdGFydEV4ZWN1dGluZygpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUt
Pm9wKCkpIHsKLSAgICAgICAgY2FzZSBERkc6OlVwc2lsb246Ci0gICAgICAgICAgICBjb21waWxl
VXBzaWxvbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpQaGk6Ci0g
ICAgICAgICAgICBjb21waWxlUGhpKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG91YmxlQ29u
c3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxlRG91YmxlQ29uc3RhbnQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxl
SW50NTJDb25zdGFudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG91Ymxl
UmVwOgotICAgICAgICAgICAgY29tcGlsZURvdWJsZVJlcCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgICAgIGNvbXBpbGVEb3VibGVB
c0ludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERkc6OlZhbHVlUmVw
OgotICAgICAgICAgICAgY29tcGlsZVZhbHVlUmVwKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnQ1MlJlcDoKLSAgICAgICAgICAgIGNvbXBpbGVJbnQ1MlJlcCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAgICAg
Y29tcGlsZVZhbHVlVG9JbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Qm9vbGVhblRvTnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZUJvb2xlYW5Ub051bWJlcigpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6Ci0g
ICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdldFN0YWNrOgotICAgICAgICAgICAgY29tcGlsZUdldFN0YWNr
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRTdGFjaygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
REZHOjpDaGVjazoKLSAgICAgICAgICAgIGNvbXBpbGVOb09wKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUb1RoaXM6Ci0gICAgICAgICAgICBjb21waWxlVG9UaGlzKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNv
bXBpbGVWYWx1ZUFkZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyQ2F0
OgotICAgICAgICAgICAgY29tcGlsZVN0ckNhdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBj
b21waWxlQXJpdGhBZGRPclN1YigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJpdGhDbHozMjoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aENsejMyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0
aE11bCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAg
ICAgICAgICBjb21waWxlQXJpdGhEaXYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoTW9kKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoK
LSAgICAgICAgICAgIGNvbXBpbGVBcml0aE1pbk9yTWF4KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aEFicygpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhTaW46Ci0gICAgICAgICAgICBj
b21waWxlQXJpdGhTaW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRo
Q29zOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoQ29zKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcml0aFBvdzoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhSYW5kb206Ci0gICAgICAgICAg
ICBjb21waWxlQXJpdGhSYW5kb20oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFyaXRoUm91bmQ6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhSb3VuZCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgY29tcGlsZUFy
aXRoU3FydCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhMb2c6Ci0g
ICAgICAgICAgICBjb21waWxlQXJpdGhMb2coKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFyaXRoRlJvdW5kOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoRlJvdW5kKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAg
IGNvbXBpbGVBcml0aE5lZ2F0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
REZHOjpCaXRBbmQ6Ci0gICAgICAgICAgICBjb21waWxlQml0QW5kKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBERkc6OkJpdE9yOgotICAgICAgICAgICAgY29tcGlsZUJpdE9y
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERkc6OkJpdFhvcjoKLSAgICAg
ICAgICAgIGNvbXBpbGVCaXRYb3IoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEJpdFJTaGlmdDoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRSU2hpZnQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRM
U2hpZnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0g
ICAgICAgICAgICBjb21waWxlQml0VVJTaGlmdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBjb21waWxlVUludDMyVG9OdW1i
ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDaGVja0NlbGw6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tDZWxsKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja05vdEVtcHR5OgotICAgICAg
ICAgICAgY29tcGlsZUNoZWNrTm90RW1wdHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENoZWNrQmFkQ2VsbDoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVja0JhZENlbGwoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrSWRlbnQ6Ci0gICAgICAgICAg
ICBjb21waWxlQ2hlY2tJZGVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0RXhlY3V0YWJsZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAg
ICAgICAgY29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRTdHJ1Y3R1
cmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAg
IGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5SWQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluOgotICAgICAgICAgICAgY29tcGlsZUluKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5SWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dEdl
dHRlckJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0U2V0dGVyQnlJZDoKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRBY2Nlc3NvckJ5SWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1
dEdldHRlclNldHRlckJ5SWQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0R2V0dGVyU2V0dGVyQnlJ
ZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6Ci0g
ICAgICAgIGNhc2UgUHV0U2V0dGVyQnlWYWw6Ci0gICAgICAgICAgICBjb21waWxlUHV0QWNjZXNz
b3JCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnV0dGVyZmx5UmVhZE9ubHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnN0YW50U3RvcmFnZVBvaW50ZXI6Ci0gICAgICAgICAgICBjb21waWxlQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0FycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrQXJyYXkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldEFycmF5TGVu
Z3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOgot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrSW5Cb3VuZHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAg
ICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgICAg
ICBjb21waWxlQXJyYXlQdXNoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheVBvcDoKLSAgICAgICAgICAgIGNvbXBpbGVBcnJheVBvcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgICAgIGNvbXBpbGVD
cmVhdGVBY3RpdmF0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdG
dW5jdGlvbjoKLSAgICAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgotICAgICAgICBjYXNlIE5l
d0dlbmVyYXRvckZ1bmN0aW9uOgotICAgICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgICAgICBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBj
b21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlQ3JlYXRl
Q2xvbmVkQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdP
YmplY3Q6Ci0gICAgICAgICAgICBjb21waWxlTmV3T2JqZWN0KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVOZXdBcnJheSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAg
ICAgICAgICBjb21waWxlTmV3QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgICAgICBjb21waWxlTmV3QXJyYXlX
aXRoU2l6ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3VHlwZWRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVOZXdUeXBlZEFycmF5KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9T
dHJpbmc6Ci0gICAgICAgIGNhc2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgotICAgICAgICAgICAg
Y29tcGlsZVRvU3RyaW5nT3JDYWxsU3RyaW5nQ29uc3RydWN0b3IoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOgotICAgICAgICAgICAgY29tcGlsZVRvUHJp
bWl0aXZlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAg
ICAgICAgICAgIGNvbXBpbGVNYWtlUm9wZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJBdCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAg
ICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5n
RnJvbUNoYXJDb2RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0R2V0dGVyOgotICAgICAgICAgICAgY29tcGlsZUdldEdldHRlcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0U2V0dGVyOgotICAgICAgICAgICAgY29tcGlsZUdldFNl
dHRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNl
dDoKLSAgICAgICAgICAgIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKLSAgICAgICAgICAgIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2V0R2xv
YmFsTGV4aWNhbFZhcmlhYmxlOgotICAgICAgICAgICAgY29tcGlsZUdldEdsb2JhbFZhcmlhYmxl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJpYWJsZToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRHbG9iYWxWYXJpYWJsZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTm90aWZ5V3JpdGU6Ci0gICAgICAgICAgICBjb21waWxlTm90aWZ5
V3JpdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldENhbGxlZToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRDYWxsZWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEFyZ3VtZW50Q291bnQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0QXJndW1lbnRD
b3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0U2NvcGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNraXBTY29wZToKLSAgICAgICAgICAgIGNvbXBpbGVTa2lwU2NvcGUoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0Q2xvc3VyZVZhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgotICAgICAgICAgICAg
Y29tcGlsZUdldEZyb21Bcmd1bWVudHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFB1dFRvQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZVB1dFRvQXJndW1lbnRzKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAg
ICBjb21waWxlQ29tcGFyZUVxKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlTGVzcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3NFcToKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlTGVzc0VxKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlR3JlYXRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlR3JlYXRlckVx
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAg
ICAgICAgY29tcGlsZUxvZ2ljYWxOb3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENhbGw6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgotICAgICAgICBj
YXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRhaWxDYWxsOgotICAgICAgICAgICAgY29t
cGlsZVRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKLSAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgotICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICAg
ICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdz
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAg
ICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgREZHOjpKdW1wOgotICAgICAgICAgICAgY29tcGlsZUp1bXAoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6QnJhbmNoOgotICAgICAgICAgICAgY29t
cGlsZUJyYW5jaCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpTd2l0
Y2g6Ci0gICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBERkc6OlJldHVybjoKLSAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgICAg
IGNvbXBpbGVGb3JjZU9TUkV4aXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFRocm93OgotICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6Ci0gICAgICAgICAgICBj
b21waWxlVGhyb3coKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludmFsaWRh
dGlvblBvaW50OgotICAgICAgICAgICAgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKLSAgICAgICAgICAgIGNv
bXBpbGVJc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSXNC
b29sZWFuOgotICAgICAgICAgICAgY29tcGlsZUlzQm9vbGVhbigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICBjb21waWxlSXNOdW1iZXIo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICAg
ICAgY29tcGlsZUlzU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
c09iamVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVJc09iamVjdCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSXNPYmplY3RPck51bGw6Ci0gICAgICAgICAgICBjb21waWxlSXNP
YmplY3RPck51bGwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzRnVuY3Rp
b246Ci0gICAgICAgICAgICBjb21waWxlSXNGdW5jdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgY29tcGlsZVR5cGVPZigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tUeXBlSW5mb0ZsYWdzOgotICAgICAg
ICAgICAgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT3ZlcnJpZGVzSGFzSW5zdGFuY2U6Ci0gICAgICAgICAgICBjb21waWxlT3Zl
cnJpZGVzSGFzSW5zdGFuY2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgICAgIGNvbXBp
bGVJbnN0YW5jZU9mQ3VzdG9tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b3VudEV4ZWN1dGlvbjoKLSAgICAgICAgICAgIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgICAgICAgICAg
Y29tcGlsZVN0b3JlQmFycmllcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5
OgotICAgICAgICAgICAgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1l
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3Ro
OgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxl
R2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKLSAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgICAg
ICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgICAgIGNv
bXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a1dhdGNoZG9nVGltZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlS
ZXN0OgotICAgICAgICAgICAgY29tcGlsZUNvcHlSZXN0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldFJlc3RM
ZW5ndGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgotICAgICAgICBjYXNlIExvb3BIaW50OgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAg
IGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBFeGl0T0s6Ci0gICAgICAgIGNhc2UgUGhh
bnRvbU5ld09iamVjdDoKLSAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246Ci0gICAgICAg
IGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBQdXRIaW50
OgotICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgotICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9k
ZS0+aXNUZXJtaW5hbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgc2FmZWx5SW52YWxp
ZGF0ZUFmdGVyVGVybWluYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShtX25v
ZGUpOwotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVV
cHNpbG9uKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB1cHNpbG9uVmFsdWUgPSBudWxscHRyOwot
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50MzJV
c2U6Ci0gICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKLSAgICAgICAgICAgIHVwc2lsb25WYWx1
ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0gICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQ1
MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6Ci0gICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgotICAgICAgICAgICAgdXBz
aWxvblZhbHVlID0gbG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgot
ICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICB1
cHNpbG9uVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBWYWx1ZUZyb21CbG9jayB1cHNpbG9uID0gbV9vdXQuYW5jaG9yKHVwc2lsb25WYWx1
ZSk7Ci0gICAgICAgIExWYWx1ZSBwaGlOb2RlID0gbV9waGlzLmdldChtX25vZGUtPnBoaSgpKTsK
LSAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwaGlOb2RlLCB1cHNpbG9uKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUGhpKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBwaGkg
PSBtX3BoaXMuZ2V0KG1fbm9kZSk7Ci0gICAgICAgIG1fb3V0Lm1fYmxvY2stPmFwcGVuZChwaGkp
OwotCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsK
LSAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgotICAgICAgICAgICAgc2V0RG91YmxlKHBo
aSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6Ci0g
ICAgICAgICAgICBzZXRJbnQzMihwaGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTm9kZVJlc3VsdEludDUyOgotICAgICAgICAgICAgc2V0SW50NTIocGhpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgotICAgICAgICAgICAg
c2V0Qm9vbGVhbihwaGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJl
c3VsdEpTOgotICAgICAgICAgICAgc2V0SlNWYWx1ZShwaGkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVEb3VibGVDb25zdGFudCgpCi0gICAgewotICAgICAgICBz
ZXREb3VibGUobV9vdXQuY29uc3REb3VibGUobV9ub2RlLT5hc051bWJlcigpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUludDUyQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgaW50
NjRfdCB2YWx1ZSA9IG1fbm9kZS0+YXNNYWNoaW5lSW50KCk7Ci0gICAgICAgIAotICAgICAgICBz
ZXRJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91
bnQpKTsKLSAgICAgICAgc2V0U3RyaWN0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgUmVhbE51bWJl
clVzZTogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkRvdWJsZVJlcCBSZWFsTnVtYmVyVXNlIGludCBjYXNlIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1
ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwg
cmFyZWx5KGludENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVy
LAotICAgICAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkgJiB+U3BlY0Z1bGxEb3VibGUpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2
YWx1ZSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91
YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgotICAgICAg
ICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgYm9vbCBzaG91bGRDb252ZXJ0Tm9uTnVt
YmVyID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hp
bmcgaW50IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVUZXN0aW5nID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBkb3VibGUgY2Fz
ZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5lZCBjYXNlIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVl
VG9Eb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGRvdWJs
ZVRlc3RpbmcpLCB1bnN1cmUoaW50Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGRvdWJsZVRlc3Rp
bmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0RvdWJs
ZSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5pbnRUb0RvdWJsZSh1bmJv
eEludDMyKHZhbHVlKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVUZXN0aW5nLCBk
b3VibGVDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVtYmVyID0gaXNOdW1iZXIo
dmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKHZhbHVlSXNOdW1iZXIsIHVzdWFsbHkoZG91YmxlQ2FzZSksIHJhcmVseShub25Eb3Vi
bGVDYXNlKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vbkRv
dWJsZUNhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgdW5ib3hlZERvdWJsZSA9IG1f
b3V0LmFuY2hvcih1bmJveERvdWJsZSh2YWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxkQ29udmVydE5vbk51bWJlcikg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIHVuZGVmaW5lZCBjYXNlIikp
OwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3ROdWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgbnVsbCBjYXNlIikpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJq
c1ZhbHVlVG9Eb3VibGUgY29udmVydGluZyBudWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
anNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVhbiB0cnVlIGNhc2UiKSk7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnQgYm9vbGVhbiB0cnVlIGNhc2UiKSk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5GYWxzZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gZmFsc2Ug
Y2FzZSIpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2Us
IHVuZGVmaW5lZENhc2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzVW5kZWZpbmVk
ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsK
LSAgICAgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc1VuZGVmaW5lZCwgdW5zdXJlKHVu
ZGVmaW5lZENhc2UpLCB1bnN1cmUodGVzdE51bGxDYXNlKSk7Ci0KLSAgICAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyh1bmRlZmluZWRDYXNlLCB0ZXN0TnVsbENhc2UpOwotICAgICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFVuZGVmaW5lZCA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odGVzdE51bGxDYXNlLCBu
dWxsQ2FzZSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNOdWxsID0gbV9vdXQuZXF1
YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKHZhbHVlSXNOdWxsLCB1bnN1cmUobnVsbENhc2UpLCB1bnN1cmUodGVzdEJv
b2xlYW5UcnVlQ2FzZSkpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obnVsbENh
c2UsIHRlc3RCb29sZWFuVHJ1ZUNhc2UpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGNvbnZlcnRlZE51bGwgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwotICAg
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHRlc3RCb29sZWFuVHJ1ZUNhc2UsIGNvbnZlcnRCb29sZWFuVHJ1ZUNh
c2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzQm9vbGVhblRydWUgPSBtX291dC5l
cXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVRydWUpKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2godmFsdWVJc0Jvb2xlYW5UcnVlLCB1bnN1cmUoY29udmVydEJvb2xlYW5U
cnVlQ2FzZSksIHVuc3VyZShjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSkpOwotCi0gICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xl
YW5GYWxzZUNhc2UpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFRy
dWUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMSkpOwotICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UgPSBtX291dC5ub3RFcXVhbCh2YWx1
ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxs
LCB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb252ZXJ0ZWRGYWxzZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgwKSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAg
ICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5i
b3hlZERvdWJsZSwgY29udmVydGVkVW5kZWZpbmVkLCBjb252ZXJ0ZWROdWxsLCBjb252ZXJ0ZWRU
cnVlLCBjb252ZXJ0ZWRGYWxzZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBt
X25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIsIG1fb3V0LmJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotCi0gICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUoc3RyaWN0SW50NTJUb0Rv
dWJsZShsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0ludDMyKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1v
ZGUoKSkpOwotICAgICAgICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgY29tcGlsZVZhbHVlUmVwKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2Rl
LT5jaGlsZDEoKSwgflNwZWNEb3VibGVJbXB1cmVOYU4pKSB7Ci0gICAgICAgICAgICAgICAgdmFs
dWUgPSBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFs
KHZhbHVlLCB2YWx1ZSksIHZhbHVlLCBtX291dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEpTVmFsdWUoYm94RG91YmxlKHZh
bHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHN0cmljdElu
dDUyVG9KU1ZhbHVlKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUludDUyUmVwKCkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LnNpZ25FeHQz
MlRvNjQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Ci0gICAgICAgICAgICBz
ZXRTdHJpY3RJbnQ1MigKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVG9TdHJpY3RJbnQ1MigKLSAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5lSW50VXNlOgotICAg
ICAgICAgICAgc2V0U3RyaWN0SW50NTIoCi0gICAgICAgICAgICAgICAgZG91YmxlVG9TdHJpY3RJ
bnQ1MigKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RU
b0ludDMyKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKLSAgICAgICAg
ICAgIHNldEludDMyKGRvdWJsZVRvSW50MzIobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE51bWJlclVz
ZToKLSAgICAgICAgY2FzZSBOb3RDZWxsVXNlOiB7Ci0gICAgICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwot
ICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW50
MzIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldCht
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBzZXRJbnQzMihudW1iZXJPck5vdENlbGxUb0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCksIHZhbHVlLnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UnbGwgYmFzaWNhbGx5
IGp1c3QgZ2V0IGhlcmUgZm9yIGNvbnN0YW50cy4gQnV0IGl0J3MgZ29vZCB0byBoYXZlIHRoaXMK
LSAgICAgICAgICAgIC8vIGNhdGNoLWFsbCBzaW5jZSB3ZSBvZnRlbiBhZGQgbmV3IHJlcHJlc2Vu
dGF0aW9ucyBpbnRvIHRoZSBtaXguCi0gICAgICAgICAgICBzZXRJbnQzMigKLSAgICAgICAgICAg
ICAgICBudW1iZXJPck5vdENlbGxUb0ludDMyKAotICAgICAgICAgICAgICAgICAgICBtX25vZGUt
PmNoaWxkMSgpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJvb2xlYW5Ub051bWJl
cigpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZTogewotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQu
emVyb0V4dChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5pbnQzMikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0
ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xJbnQzMiB8IFNwZWNC
b29sZWFuKSkgewotICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChtX291dC5j
YXN0VG9JbnQzMih2YWx1ZSksIG1fb3V0LmludDMyT25lKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBib29sZWFuQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGVhblRvTnVtYmVyIGJv
b2xlYW4gY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGVhblRvTnVtYmVyIGNvbnRpbnVhdGlvbiIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Qm9vbGVhblJlc3VsdCA9
IG1fb3V0LmFuY2hvcih2YWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oYm9vbGVhbkNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBib29sZWFuUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJpdE9yKAotICAg
ICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQodW5ib3hCb29sZWFuKHZhbHVlKSwgbV9vdXQuaW50
NjQpLCBtX3RhZ1R5cGVOdW1iZXIpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgYm9vbGVhblJlc3VsdCwgbm90Qm9vbGVhblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgp
Ci0gICAgewotICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPigKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NS
RW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExv
Y2FsKCkudG9Mb2NhbCgpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRTdGFj
aygpCi0gICAgewotICAgICAgICAvLyBHZXRMb2NhbHMgYXJpc2Ugb25seSBmb3IgY2FwdHVyZWQg
dmFyaWFibGVzIGFuZCBhcmd1bWVudHMuIEZvciBhcmd1bWVudHMsIHdlIG1pZ2h0IGhhdmUKLSAg
ICAgICAgLy8gYWxyZWFkeSBsb2FkZWQgaXQuCi0gICAgICAgIGlmIChMVmFsdWUgdmFsdWUgPSBt
X2xvYWRlZEFyZ3VtZW50VmFsdWVzLmdldChtX25vZGUpKSB7Ci0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsK
LSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQoZGF0YS0+bG9jYWwpOwotICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSk7Ci0gICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBkYXRhLT5mb3JtYXQgIT0gRmx1c2hlZERvdWJsZSk7IC8vIFRoaXMganVz
dCBoYXBwZW5zIHRvIG5vdCBhcmlzZSBmb3IgR2V0U3RhY2tzLCByaWdodCBub3cuIEl0IHdvdWxk
IGJlIHRyaXZpYWwgdG8gc3VwcG9ydC4KLSAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSkKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQz
MihwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9j
YWwpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dFN0YWNrKCkKLSAgICB7Ci0g
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIHN3aXRjaCAoZGF0YS0+Zm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZs
dXNoZWRJbnQzMjogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjogewotICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogewotICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
Ci0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZUxvY2FsKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGZsdXNoIGZvcm1hdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTm9PcCgpCi0gICAgewotICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHNwZWN1bGF0ZSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVRvVGhpcygpCi0gICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9UaGlzIGlzIGNlbGwgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvVGhpcyBzbG93IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9UaGlzIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShz
bG93Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2go
aXNUeXBlKHZhbHVlLCBGaW5hbE9iamVjdFR5cGUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShzbG93Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwot
ICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzOwotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAg
dm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBtX2NhbGxGcmFt
ZSwgdmFsdWUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKCkKLSAgICB7Ci0gICAg
ICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVEFkZEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVBZGQp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJDYXQoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDMpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAg
ICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiks
Ci0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDMoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQyKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAg
ICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aEFkZE9yU3ViKCkKLSAgICB7
Ci0gICAgICAgIGJvb2wgaXNTdWIgPSAgbV9ub2RlLT5vcCgpID09IEFyaXRoU3ViOwotICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJV
c2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigp
KTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhN
b2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW50MzIoaXNTdWIgPyBtX291dC5zdWIobGVm
dCwgcmlnaHQpIDogbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENoZWNrVmFsdWUqIHJlc3VsdCA9Ci0g
ICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVjdWxhdGVTdWIobGVmdCwgcmlnaHQpIDog
bV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3Vs
YXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0g
ICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAg
ICBpZiAoIWFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0lu
dDUyKQotICAgICAgICAgICAgICAgICYmICFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
LmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpIHsKLSAgICAgICAgICAgICAgICBJbnQ1MktpbmQga2lu
ZDsKLSAgICAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9k
ZS0+Y2hpbGQxKCksIGtpbmQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAgICAgICAgICAgIHNldEludDUyKGlz
U3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCByaWdodCksIGtp
bmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBD
aGVja1ZhbHVlKiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3Vs
YXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBDMSA9IGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBDMiA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKTsKLQotICAgICAgICAgICAgc2V0RG91YmxlKGlzU3ViID8gbV9vdXQuZG91YmxlU3ViKEMx
LCBDMikgOiBtX291dC5kb3VibGVBZGQoQzEsIEMyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgaWYgKCFp
c1N1YikgewotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUU3ViR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1
ZVN1Yik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUFyaXRoQ2x6MzIoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG9wZXJhbmQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuY3RsejMyKG9wZXJhbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhNdWwoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMy
VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0KLSAgICAgICAg
ICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX291dC5tdWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tWYWx1ZSogc3BlY3VsYXRpb24gPSBtX291dC5z
cGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRp
b24oc3BlY3VsYXRpb24sIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIHNsb3cgY2FzZSIpKTsKLSAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoTXVsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihy
ZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0
LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
SW50NTJSZXBVc2U6IHsKLSAgICAgICAgICAgIEludDUyS2luZCBraW5kOwotICAgICAgICAgICAg
TFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsK
LSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9w
cG9zaXRlKGtpbmQpKTsKLQotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQu
c3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
cmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0KLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE11bCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQocmVzdWx0KSwgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50NjRaZXJv
KSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewot
ICAgICAgICAgICAgc2V0RG91YmxlKAotICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU11bChs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKLSAgICAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVE11bEdlbmVyYXRvcj4ob3Bl
cmF0aW9uVmFsdWVNdWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGNvbXBpbGVBcml0aERpdigpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Ymlu
YXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExW
YWx1ZSBudW1lcmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IExWYWx1ZSBkZW5vbWluYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB6ZXJvTnVtZXJhdG9yID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aERpdiB6ZXJvIG51bWVyYXRvciIpKTsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBudW1lcmF0b3JDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoRGl2IG51bWVyYXRvciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzMyKG51bWVy
YXRvciksCi0gICAgICAgICAgICAgICAgICAgIHJhcmVseSh6ZXJvTnVtZXJhdG9yKSwgdXN1YWxs
eShudW1lcmF0b3JDb250aW51YXRpb24pKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh6ZXJvTnVtZXJhdG9yLCBudW1lcmF0b3JD
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgICAgICBOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4oZGVub21p
bmF0b3IsIG1fb3V0LmludDMyWmVybykpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChu
dW1lcmF0b3JDb250aW51YXRpb24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5h
cml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bnNhZmVEZW5vbWlu
YXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgdW5zYWZlIGRlbm9taW5hdG9y
IikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAg
ICAgTFZhbHVlIGFkanVzdGVkRGVub21pbmF0b3IgPSBtX291dC5hZGQoZGVub21pbmF0b3IsIG1f
b3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGFkanVzdGVkRGVub21pbmF0b3IsIG1fb3V0LmludDMyT25l
KSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkodW5z
YWZlRGVub21pbmF0b3IpKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQzMigtMjE0NzQ4
MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwobnVtZXJh
dG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kaXYobnVtZXJh
dG9yLCBkZW5vbWluYXRvcik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAg
ICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChtX291dC5tdWwocmVzdWx0LCBkZW5vbWluYXRvciksIG51bWVyYXRvcikp
OwotICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5jaGlsbERpdihudW1lcmF0b3IsIGRlbm9t
aW5hdG9yKSk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5kb3VibGVEaXYoCi0gICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBlbWl0Qmlu
YXJ5U25pcHBldDxKSVREaXZHZW5lcmF0b3IsIE5lZWRTY3JhdGNoRlBSPihvcGVyYXRpb25WYWx1
ZURpdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVBcml0aE1vZCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBu
dW1lcmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1
ZSBkZW5vbWluYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgICAg
ICBMVmFsdWUgcmVtYWluZGVyOwotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3co
bV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bnNh
ZmVEZW5vbWluYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgdW5zYWZlIGRl
bm9taW5hdG9yIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgY29udGludWF0aW9uIikpOwotCi0gICAg
ICAgICAgICAgICAgTFZhbHVlIGFkanVzdGVkRGVub21pbmF0b3IgPSBtX291dC5hZGQoZGVub21p
bmF0b3IsIG1fb3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFkanVzdGVkRGVub21pbmF0b3IsIG1fb3V0
LmludDMyT25lKSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkodW5zYWZlRGVub21pbmF0b3IpKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQz
MigtMjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1
YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5t
b2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0g
cmVzdWx0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0g
bV9vdXQuY2hpbGxNb2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci0KLSAgICAgICAgICAgIGlm
IChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5lZ2F0aXZlTnVtZXJhdG9yID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE1vZCBuZWdhdGl2ZSBudW1lcmF0b3IiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbnVtZXJhdG9yQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJBcml0aE1vZCBudW1lcmF0b3IgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihudW1lcmF0
b3IsIG1fb3V0LmludDMyWmVybyksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShuZWdhdGl2
ZU51bWVyYXRvciksIHVuc3VyZShudW1lcmF0b3JDb250aW51YXRpb24pKTsKLQotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuZWdhdGl2
ZU51bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvMzIocmVtYWlu
ZGVyKSk7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKG51bWVyYXRvckNvbnRpbnVhdGlv
bik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhudW1lcmF0b3JDb250aW51YXRp
b24sIGlubmVyTGFzdE5leHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXRJbnQz
MihyZW1haW5kZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewotICAgICAgICAgICAgc2V0RG91YmxlKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU1vZChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aE1pbk9yTWF4KCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZXRJbnQzMigKLSAg
ICAgICAgICAgICAgICBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBBcml0aE1pbgotICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhh
bihsZWZ0LCByaWdodCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogbV9vdXQubGVzc1RoYW4o
cmlnaHQsIGxlZnQpLAotICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJs
ZVJlcFVzZTogewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdExlc3NU
aGFuID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1pbi9Bcml0aE1heCBub3QgbGVzcyB0
aGFuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aE1pbi9Bcml0aE1heCBjb250aW51YXRpb24iKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGxlZnQp
KTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX25vZGUtPm9w
KCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAgICAgICAgPyBtX291dC5kb3VibGVMZXNzVGhh
bihsZWZ0LCByaWdodCkKLSAgICAgICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVHcmVhdGVy
VGhhbihsZWZ0LCByaWdodCksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShub3RMZXNzVGhhbikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdExlc3NUaGFuLCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LnNlbGVjdCgK
LSAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAg
ICAgICAgPyBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpCi0gICAg
ICAgICAgICAgICAgICAgIDogbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0
KSwKLSAgICAgICAgICAgICAgICByaWdodCwgbV9vdXQuY29uc3REb3VibGUoUE5hTikpKSk7Ci0g
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAg
ICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVBcml0aEFicygpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgICAgICBMVmFs
dWUgbWFzayA9IG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5iaXRYb3IobWFzaywgbV9vdXQuYWRkKG1hc2ss
IHZhbHVlKSk7Ci0KLSAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+
YXJpdGhNb2RlKCkpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0SW50MzIoMSA8PCAzMSkpKTsK
LQotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAg
ICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHZvaWQgY29tcGlsZUFyaXRoU2luKCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU2luKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aENvcygp
IHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUNvcyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkp
KTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhQb3coKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IGludmVzdGlnYXRlIGxsdm0ucG93aSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgcGVyZm9y
bWFuY2UgY2hhcmFjdGVyaXN0aWNzLgotICAgICAgICAvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8g
aGF2ZSB0aGUgaW5saW5lIGxvb3AgaW4gREZHIHRvby4KLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQyKCkudXNlS2luZCgpID09IEludDMyVXNlKQotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0
LmRvdWJsZVBvd2kobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50
ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoUG93IHRlc3QgaW50ZWdlciBleHBvbmVudCBpcyBzbWFsbC4iKSk7Ci0gICAgICAgICAgICBM
QmFzaWNCbG9jayBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhQb3cgcG93KGRvdWJsZSwgKGludClkb3VibGUpLiIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhQb3cgcG93KGRvdWJsZSwgZG91YmxlKS4iKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBuYW5FeGNlcHRpb25FeHBvbmVudElzSW5maW5pdHkgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkFyaXRoUG93IE5hTiBFeGNlcHRpb24sIGNoZWNrIGV4cG9uZW50IGlzIGluZmluaXR5
LiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlvbkJhc2VJc09uZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgY2hlY2sgYmFzZSBp
cyBvbmUuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgcG93QmxvY2sgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoUG93IHJlZ3VsYXIgcG93IikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoUG93IE5hTiBFeGNlcHRpb24sIHJlc3VsdCBpcyBOYU4uIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyRXhwb25lbnQgPSBt
X291dC5kb3VibGVUb0ludChleHBvbmVudCk7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4
cG9uZW50Q29udmVydGVkVG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyRXhwb25l
bnQpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50SXNJbnRlZ2VyID0gbV9vdXQuZG91Ymxl
RXF1YWwoZXhwb25lbnQsIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChleHBvbmVudElzSW50ZWdlciwgdW5zdXJlKGludGVnZXJFeHBv
bmVudElzU21hbGxCbG9jayksIHVuc3VyZShkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpKTsK
LQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRl
Z2VyRXhwb25lbnRJc1NtYWxsQmxvY2ssIGludGVnZXJFeHBvbmVudFBvd0Jsb2NrKTsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbnRlZ2VyRXhwb25lbnRCZWxvdzEwMDAgPSBtX291dC5iZWxvdyhpbnRl
Z2VyRXhwb25lbnQsIG1fb3V0LmNvbnN0SW50MzIoMTAwMCkpOwotICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGludGVnZXJFeHBvbmVudEJlbG93MTAwMCwgdXN1YWxseShpbnRlZ2VyRXhwb25lbnRQ
b3dCbG9jayksIHJhcmVseShkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50UG93QmxvY2ssIGRvdWJsZUV4cG9u
ZW50UG93QmxvY2tFbnRyeSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb3dEb3VibGVJ
bnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93aShiYXNlLCBpbnRlZ2VyRXhw
b25lbnQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgLy8gSWYgeSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5LCBuYW5FeGNlcHRpb25FeHBv
bmVudElzSW5maW5pdHkpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50SXNOYU47Ci0gICAg
ICAgICAgICBpZiAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSAmIFNwZWNEb3VibGVOYU4p
Ci0gICAgICAgICAgICAgICAgZXhwb25lbnRJc05hTiA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQoZXhwb25lbnQsIGV4cG9uZW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBleHBvbmVudElzTmFOID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGV4cG9uZW50SXNOYU4sIHJhcmVseShuYW5FeGNlcHRpb25SZXN1bHRJc05h
TiksIHVzdWFsbHkobmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KSk7Ci0KLSAgICAgICAg
ICAgIC8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzICtpbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBO
YU4uCi0gICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAtaW5maW5pdHksIHRo
ZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhjZXB0aW9u
RXhwb25lbnRJc0luZmluaXR5LCBuYW5FeGNlcHRpb25CYXNlSXNPbmUpOwotICAgICAgICAgICAg
TFZhbHVlIGFic29sdXRlRXhwb25lbnQgPSBtX291dC5kb3VibGVBYnMoZXhwb25lbnQpOwotICAg
ICAgICAgICAgTFZhbHVlIGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5ID0gbV9vdXQuZG91Ymxl
RXF1YWwoYWJzb2x1dGVFeHBvbmVudCwgbV9vdXQuY29uc3REb3VibGUoc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goYWJz
b2x1dGVFeHBvbmVudElzSW5maW5pdHksIHJhcmVseShuYW5FeGNlcHRpb25CYXNlSXNPbmUpLCB1
c3VhbGx5KHBvd0Jsb2NrKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2Vw
dGlvbkJhc2VJc09uZSwgcG93QmxvY2spOwotICAgICAgICAgICAgTFZhbHVlIGFic29sdXRlQmFz
ZSA9IG1fb3V0LmRvdWJsZUFicyhiYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUJh
c2VJc09uZSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlQmFzZSwgbV9vdXQuY29uc3REb3Vi
bGUoMSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFic29sdXRlQmFzZUlzT25lLCB1bnN1
cmUobmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1bnN1cmUocG93QmxvY2spKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocG93QmxvY2ssIG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOKTsK
LSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5kb3VibGVQb3coYmFzZSwgZXhwb25lbnQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhjZXB0aW9uUmVz
dWx0SXNOYU4sIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwdXJl
TmFuID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKLSAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhp
KG1fb3V0LmRvdWJsZVR5cGUsIHBvd0RvdWJsZUludFJlc3VsdCwgcG93UmVzdWx0LCBwdXJlTmFu
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFJhbmRvbSgpCi0g
ICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotCi0gICAgICAgIC8vIElubGlu
ZWQgV2Vha1JhbmRvbTo6YWR2YW5jZSgpLgotICAgICAgICAvLyB1aW50NjRfdCB4ID0gbV9sb3c7
Ci0gICAgICAgIHZvaWQqIGxvd0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihn
bG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6OndlYWtSYW5kb21PZmZzZXQoKSArIFdlYWtS
YW5kb206Omxvd09mZnNldCgpOwotICAgICAgICBMVmFsdWUgbG93ID0gbV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKGxvd0FkZHJlc3MpKTsKLSAgICAgICAgLy8gdWludDY0X3QgeSA9IG1faGln
aDsKLSAgICAgICAgdm9pZCogaGlnaEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6OndlYWtSYW5kb21PZmZzZXQoKSArIFdl
YWtSYW5kb206OmhpZ2hPZmZzZXQoKTsKLSAgICAgICAgTFZhbHVlIGhpZ2ggPSBtX291dC5sb2Fk
NjQobV9vdXQuYWJzb2x1dGUoaGlnaEFkZHJlc3MpKTsKLSAgICAgICAgLy8gbV9sb3cgPSB5Owot
ICAgICAgICBtX291dC5zdG9yZTY0KGhpZ2gsIG1fb3V0LmFic29sdXRlKGxvd0FkZHJlc3MpKTsK
LQotICAgICAgICAvLyB4IF49IHggPDwgMjM7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTEgPSBtX291
dC5iaXRYb3IobV9vdXQuc2hsKGxvdywgbV9vdXQuY29uc3RJbnQ2NCgyMykpLCBsb3cpOwotCi0g
ICAgICAgIC8vIHggXj0geCA+PiAxNzsKLSAgICAgICAgTFZhbHVlIHBoYXNlMiA9IG1fb3V0LmJp
dFhvcihtX291dC5sU2hyKHBoYXNlMSwgbV9vdXQuY29uc3RJbnQ2NCgxNykpLCBwaGFzZTEpOwot
Ci0gICAgICAgIC8vIHggXj0geSBeICh5ID4+IDI2KTsKLSAgICAgICAgTFZhbHVlIHBoYXNlMyA9
IG1fb3V0LmJpdFhvcihtX291dC5iaXRYb3IoaGlnaCwgbV9vdXQubFNocihoaWdoLCBtX291dC5j
b25zdEludDY0KDI2KSkpLCBwaGFzZTIpOwotCi0gICAgICAgIC8vIG1faGlnaCA9IHg7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlNjQocGhhc2UzLCBtX291dC5hYnNvbHV0ZShoaWdoQWRkcmVzcykpOwot
Ci0gICAgICAgIC8vIHJldHVybiB4ICsgeTsKLSAgICAgICAgTFZhbHVlIHJhbmRvbTY0ID0gbV9v
dXQuYWRkKHBoYXNlMywgaGlnaCk7Ci0KLSAgICAgICAgLy8gRXh0cmFjdCByYW5kb20gNTNiaXQu
IFswLCA1M10gYml0IGlzIHNhZmUgaW50ZWdlciBudW1iZXIgcmFuZ2VzIGluIGRvdWJsZSByZXBy
ZXNlbnRhdGlvbi4KLSAgICAgICAgTFZhbHVlIHJhbmRvbTUzID0gbV9vdXQuYml0QW5kKHJhbmRv
bTY0LCBtX291dC5jb25zdEludDY0KCgxVUxMIDw8IDUzKSAtIDEpKTsKLQotICAgICAgICBMVmFs
dWUgZG91YmxlNTNJbnRlZ2VyID0gbV9vdXQuaW50VG9Eb3VibGUocmFuZG9tNTMpOwotCi0gICAg
ICAgIC8vIENvbnZlcnQgYCg1M2JpdCBkb3VibGUgaW50ZWdlciB2YWx1ZSkgLyAoMSA8PCA1Mylg
IHRvIGAoNTNiaXQgZG91YmxlIGludGVnZXIgdmFsdWUpICogKDEuMCAvICgxIDw8IDUzKSlgLgot
ICAgICAgICAvLyBJbiBsYXR0ZXIgY2FzZSwgYDEuMCAvICgxIDw8IDUzKWAgd2lsbCBiZWNvbWUg
YSBkb3VibGUgdmFsdWUgcmVwcmVzZW50ZWQgYXMgKG1hbnRpc3NhID0gMCAmIGV4cCA9IDk3MCwg
aXQgbWVhbnMgMWUtKDIqKjU0KSkuCi0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGUg
PSAxLjAgLyAoMVVMTCA8PCA1Myk7Ci0KLSAgICAgICAgLy8gTXVsdGlwbHlpbmcgMWUtKDIqKjU0
KSB3aXRoIHRoZSBkb3VibGUgaW50ZWdlciBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcgb2YgdGhl
IG1hbnRpc3NhIHBhcnQgb2YgdGhlIGRvdWJsZSBpbnRlZ2VyLgotICAgICAgICAvLyBJdCBqdXN0
IHJlZHVjZXMgdGhlIGV4cCBwYXJ0IG9mIHRoZSBnaXZlbiA1M2JpdCBkb3VibGUgaW50ZWdlci4K
LSAgICAgICAgLy8gKEV4Y2VwdCBmb3IgMC4wLiBUaGlzIGlzIHNwZWNpYWxseSBoYW5kbGVkIGFu
ZCBpbiB0aGlzIGNhc2UsIGV4cCBqdXN0IGJlY29tZXMgMC4pCi0gICAgICAgIC8vIE5vdyB3ZSBn
ZXQgNTNiaXQgcHJlY2lzaW9uIHJhbmRvbSBkb3VibGUgdmFsdWUgaW4gWzAsIDEpLgotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZG91YmxlTXVsKGRvdWJsZTUzSW50ZWdlciwgbV9vdXQu
Y29uc3REb3VibGUoc2NhbGUpKTsKLQotICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFJvdW5kKCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRo
Um91bmQgc2hvdWxkIHJvdW5kIGRvd24iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhSb3VuZCBjb250aW51YXRpb24iKSk7
Ci0KLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlQ2VpbCh2YWx1ZSk7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihp
bnRlZ2VyVmFsdWUpOwotCi0gICAgICAgIExWYWx1ZSByZWFsUGFydCA9IG1fb3V0LmRvdWJsZVN1
YihpbnRlZ2VyVmFsdWUsIHZhbHVlKTsKLQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZChyZWFsUGFydCwgbV9vdXQuY29uc3REb3VibGUoMC41
KSksIHVuc3VyZShyZWFsUGFydElzTW9yZVRoYW5IYWxmKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocmVhbFBh
cnRJc01vcmVUaGFuSGFsZiwgY29udGludWF0aW9uKTsKLSAgICAgICAgTFZhbHVlIGludGVnZXJW
YWx1ZVJvdW5kZWREb3duID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwgbV9vdXQuY29u
c3REb3VibGUoMSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSb3VuZGVk
RG93blJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWVSb3VuZGVkRG93bik7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBo
aShtX291dC5kb3VibGVUeXBlLCBpbnRlZ2VyVmFsdWVSZXN1bHQsIGludGVnZXJWYWx1ZVJvdW5k
ZWREb3duUmVzdWx0KTsKLQotICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhSb3VuZGluZ01vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBj
b252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHQsIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpOwotICAgICAgICAgICAgc2V0SW50MzIoaW50ZWdlclZh
bHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKSB7IHNldERvdWJsZShtX291dC5kb3Vi
bGVTcXJ0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9Ci0KLSAgICB2b2lkIGNvbXBp
bGVBcml0aExvZygpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUxvZyhsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSkpKTsgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFyaXRoRlJvdW5kKCkKLSAg
ICB7Ci0gICAgICAgIHNldERvdWJsZShtX291dC5mcm91bmQobG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFyaXRoTmVnYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1v
ZGUoKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9k
ZSgpKSkgewotICAgICAgICAgICAgICAgIC8vICIwIC0geCIgaXMgdGhlIGNhbm9uaWNhbCB3YXkg
b2Ygc2F5aW5nICIteCIgaW4gYm90aCBCMyBhbmQgTExWTS4gVGhpcyBnZXRzCi0gICAgICAgICAg
ICAgICAgLy8gbG93ZXJlZCB0byB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICAgICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBtX291dC5zcGVjdWxhdGVTdWIobV9vdXQuaW50MzJaZXJvLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihjaGVjaywgT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNo
ZWNrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3Zl
cmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQudGVzdElzWmVybzMyKHZhbHVlLCBtX291dC5jb25z
dEludDMyKDB4N2ZmZmZmZmYpKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubmVn
KHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZTogewotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpIHsKLSAgICAgICAgICAgICAgICBJbnQ1
MktpbmQga2luZDsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dXaGljaGV2ZXJJ
bnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0
KSk7Ci0gICAgICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0LCBraW5kKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBDaGVj
a1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVTdWIobV9vdXQuaW50NjRaZXJvLCB2YWx1
ZSk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgSW50NTJPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoTmVn
YXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAg
ICAgICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNl
dERvdWJsZShtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVCaXRBbmQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJ
VEJpdEFuZEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRBbmQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjb21waWxlQml0T3IoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0QmluYXJ5Qml0
T3BTbmlwcGV0PEpJVEJpdE9yR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdE9yKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMihtX291dC5iaXRPcihs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQml0WG9yKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1p
dEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRYb3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0
WG9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRYb3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCi0g
ICAgewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsK
LSAgICAgICAgICAgIGVtaXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
OjpTaWduZWRTaGlmdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
c2V0SW50MzIobV9vdXQuYVNocigKLSAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpLAotICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
LCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
Qml0TFNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRMZWZ0
U2hpZnRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0TFNoaWZ0KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMihtX291dC5zaGwoCi0gICAgICAgICAg
ICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdFVSU2hpZnQoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0
UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6VW5zaWduZWRTaGlmdCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQu
bFNocigKLSAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdElu
dDMyKDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIo
KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0KLSAgICAgICAgaWYgKGRvZXNPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewot
ICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgc2V0SW50MzIodmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBFeGl0S2luZCBleGl0S2lu
ZDsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0gICAgICAg
ICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0KLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9ub2Rl
LT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0
dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2FzZSIpKTsKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5
cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENh
c2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwotICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0g
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksIGpzVmFsdWVWYWx1ZSh2YWx1ZSksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1f
bm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZh
bHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIo
dmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgp
Ci0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRDZWxsLCBqc1Zh
bHVlVmFsdWUoY2VsbCksIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAotICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoY2VsbCwgd2Vha1BvaW50ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxs
KCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNoZWNrQmFkQ2VsbCgpCi0gICAg
ewotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2VsbCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxl
Q2hlY2tOb3RFbXB0eSgpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoVERaRmFpbHVyZSwgbm9W
YWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hlY2tJZGVudCgpCi0gICAgewotICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ub2RlLT51aWRPcGVyYW5kKCk7Ci0gICAg
ICAgIGlmICh1aWQtPmlzU3ltYm9sKCkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBzeW1ib2wgPSBs
b3dTeW1ib2wobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIoc3ltYm9sLCBtX2hlYXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkSWRlbnQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
bm90RXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZ0lkZW50KG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2Fk
UHRyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGUoQmFkSWRlbnQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubm90RXF1YWwoc3RyaW5nSW1w
bCwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9p
ZCBjb21waWxlR2V0RXhlY3V0YWJsZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKG1fbm9k
ZS0+Y2hpbGQxKCksIGNlbGwpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoY2Vs
bCwgbV9oZWFwcy5KU0Z1bmN0aW9uX2V4ZWN1dGFibGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlQXJyYXlpZnlUb1N0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9
ICEhbV9ub2RlLT5jaGlsZDIoKSA/IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpIDogMDsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHVuZXhwZWN0ZWRTdHJ1Y3R1cmUgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1Y3R1cmUgdW5leHBlY3RlZCBzdHJ1Y3R1cmUi
KSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJyYXlpZnlUb1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUt
PnN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJvcGVydHkpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFib3ZlT3JFcXVhbChwcm9wZXJ0eSwgbV9vdXQuY29uc3RJbnQzMihNSU5fU1BB
UlNFX0FSUkFZX0lOREVYKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52
b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyKSwgbV9jYWxsRnJh
bWUsIGNlbGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbkVuc3VyZURvdWJsZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgdm1DYWxs
KG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91
cyksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6Ci0gICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgY2VsbCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKG1fbm9kZS0+
c3RydWN0dXJlKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7Ci0g
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5l
eHQ7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICBB
U1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IG5ld1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0gICAgICAgIEFTU0VSVChv
bGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8o
KS50eXBlKCkpOwotCi0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJl
SUQobmV3U3RydWN0dXJlKSwKLSAgICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgQ2VsbFVzZTogewotICAgICAgICAgICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgLy8gVGhpcyBp
cyBwcmV0dHkgd2VpcmQsIHNpbmNlIHdlIGR1cGxpY2F0ZSB0aGUgc2xvdyBwYXRoIGJvdGggaGVy
ZSBhbmQgaW4gdGhlCi0gICAgICAgICAgICAvLyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgSUMuIFdl
IHNob3VsZCBpbnZlc3RpZ2F0ZSBtYWtpbmcgdGhpcyBsZXNzIGJhZC4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4MzAKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJHZXRCeUlkIHVudHlwZWQgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBl
ZCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgY29udGludWF0aW9uIikp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAg
ICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxD
YXNlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNo
b3IoZ2V0QnlJZCh2YWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQg
PSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMpLAotICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dy
YXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOwotICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVB1dEJ5SWQoKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1f
bm9kZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNlZSBhYm92ZTsgQ2VsbFVzZSBpcyBlYXNpZXIg
c28gd2UgZG8gb25seSB0aGF0IGZvciBub3cuCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShub2Rl
LT5jaGlsZDIoKSk7Ci0gICAgICAgIGF1dG8gdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0KLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7Ci0gICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKHZhbHVlKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGlz
IGlzIGEgUHV0QnlJZEZsdXNoLCB3ZSBtaWdodCB3YW50IHRvIGxhdGUtY2xvYmJlciB2b2xhdGls
ZSByZWdpc3RlcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI4NDgKLQotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKLQotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKLSAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+ZWNtYU1vZGUoKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0g
ICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0KLSAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJz
OjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhh
bmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKLQotICAgICAg
ICAgICAgICAgIC8vIEpTIHNldHRlciBjYWxsIElDcyBnZW5lcmF0ZWQgYnkgdGhlIFB1dEJ5SWQg
SUMgd2lsbCBuZWVkIHRoaXMuCi0gICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hl
ZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlJZEdlbmVyYXRvcj46OmNy
ZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNhbGxTaXRlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBHUFJJbmZvOjpwYXRj
aHBvaW50U2NyYXRjaFJlZ2lzdGVyLCBlY21hTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKLQotICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAg
ICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgZ2VuZXJhdG9y
LT5zbG93UGF0aEZ1bmN0aW9uKCksIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8o
KSksIHBhcmFtc1sxXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
MF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5yZXBvcnRTbG93UGF0aENhbGwoc2xvd1Bh
dGhCZWdpbiwgc2xvd1BhdGhDYWxsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PmZpbmFsaXplKGxpbmtCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQotICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZShs
b2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwotICAg
IH0KLQotICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KCkKLSAgICB7Ci0gICAg
ICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVJlYWRPbmx5KGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9p
bnRlcigpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmNvbnN0SW50UHRyKG1fbm9k
ZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7Ci0gICAgICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSBTdHJpbmcgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlIFN0cmluZyBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVz
dWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0
UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnRQdHIs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlUm9wZSksIG1fY2FsbEZyYW1lLCBjZWxs
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9h
ZFB0cihtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2RhdGEpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZShsb2FkVmVjdG9yV2l0aEJhcnJpZXIoY2VsbCkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0FycmF5KCkKLSAgICB7Ci0gICAg
ICAgIEVkZ2UgZWRnZSA9IG1fbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0g
bG93Q2VsbChlZGdlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgp
LmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG1fbm9kZSwgYWJzdHJhY3RWYWx1ZShlZGdlKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICBCYWRJbmRleGluZ1R5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAg
IG1fb3V0LmxvZ2ljYWxOb3QoaXNBcnJheVR5cGUoY2VsbCwgbV9ub2RlLT5hcnJheU1vZGUoKSkp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZVB0ciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
ICAgIAotCi0gICAgICAgIExCYXNpY0Jsb2NrIHNpbXBsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3RlbGVzcyB0eXBlZCBhcnJheSIpKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgd2FzdGVmdWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWZ1bCB0eXBlZCBhcnJheSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgbW9kZSA9IG1fb3V0LmxvYWQzMihiYXNlUHRyLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X21vZGUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RF
cXVhbChtb2RlLCBtX291dC5jb25zdEludDMyKFdhc3RlZnVsVHlwZWRBcnJheSkpLAotICAgICAg
ICAgICAgdW5zdXJlKHNpbXBsZUNhc2UpLCB1bnN1cmUod2FzdGVmdWxDYXNlKSk7Ci0KLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzaW1wbGVDYXNlLCB3YXN0
ZWZ1bENhc2UpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZU91dCA9IG1fb3V0LmFu
Y2hvcihtX291dC5jb25zdEludFB0cigwKSk7Ci0KLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdhc3RlZnVsQ2FzZSwgY29udGludWF0
aW9uKTsKLQotICAgICAgICBMVmFsdWUgdmVjdG9yUHRyID0gbG9hZFZlY3RvclJlYWRPbmx5KGJh
c2VQdHIpOwotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gbG9hZEJ1dHRlcmZseVJlYWRP
bmx5KGJhc2VQdHIpOwotICAgICAgICBMVmFsdWUgYXJyYXlCdWZmZXJQdHIgPSBtX291dC5sb2Fk
UHRyKGJ1dHRlcmZseVB0ciwgbV9oZWFwcy5CdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwotICAgICAg
ICBMVmFsdWUgZGF0YVB0ciA9IG1fb3V0LmxvYWRQdHIoYXJyYXlCdWZmZXJQdHIsIG1faGVhcHMu
QXJyYXlCdWZmZXJfZGF0YSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgd2FzdGVmdWxPdXQg
PSBtX291dC5hbmNob3IobV9vdXQuc3ViKHZlY3RvclB0ciwgZGF0YVB0cikpOwotCi0gICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50MzIo
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgc2ltcGxlT3V0LCB3YXN0ZWZ1bE91dCkpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgTFZhbHVlIHN0cmlu
ZyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAg
ICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xl
bmd0aCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZSgKLSAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG1fb3V0LmxvYWQ4WmVyb0V4dDMy
KGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7Ci0g
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzX3RvdGFsTGVuZ3RoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTb21lVHlwZWRBcnJheVZpZXcoKSkgewotICAgICAg
ICAgICAgICAgIHNldEludDMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25O
ZWdhdGl2ZShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X2xlbmd0aCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBh
cnJheSB0eXBlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlQ2hlY2tJbkJvdW5kcygpCi0gICAgewotICAgICAgICBzcGVjdWxh
dGUoCi0gICAgICAgICAgICBPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNo
aWxkMygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYg
aGVhcCA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/Ci0gICAg
ICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRl
eGVkQ29udGlndW91c1Byb3BlcnRpZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
X25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5sb2FkNjQoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBt
X25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGlzSG9sZSA9IG1fb3V0
LmlzWmVybzY0KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkuaXNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZSwgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZy
b21Ib2xlLCBub1ZhbHVlKCksIDAsIGlzSG9sZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgaW50L2NvbnRpZ3VvdXMgZmFzdCBjYXNlIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwg
aW50L2NvbnRpZ3VvdXMgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAg
ICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCi0gICAgICAgICAgICAgICAgcmFyZWx5
KHNsb3dDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBzbG93Q2Fz
ZSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkNjQo
YmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1
bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9v
dXQuaXNaZXJvNjQoZmFzdFJlc3VsdFZhbHVlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShj
b250aW51YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2
NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQpLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAg
IExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5k
ZXhlZERvdWJsZVByb3BlcnRpZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5sb2FkRG91YmxlKAotICAgICAgICAgICAgICAgICAgICBiYXNlSW5kZXgo
aGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4o
KSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVzdWx0LCByZXN1bHQpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEJ5VmFsIGRvdWJsZSBpbiBib3VuZHMiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBi
b3hQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgYm94aW5nIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGRvdWJsZSBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGRvdWJsZSBj
b250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAg
IGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KGluQm91bmRzKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIGJveFBhdGgpOwotICAgICAgICAgICAg
TFZhbHVlIGRvdWJsZVZhbHVlID0gbV9vdXQubG9hZERvdWJsZSgKLSAgICAgICAgICAgICAgICBi
YXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAgICAg
cmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShib3hQYXRoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJveFBhdGgsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYm94RG91YmxlKGRvdWJsZVZh
bHVlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25HZXRCeVZhbEFycmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OlVu
ZGVjaWRlZDogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgp
LCBtX25vZGUsIG1fb3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6RGlyZWN0QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwK
LSAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKAot
ICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7Ci0KLSAgICAgICAgICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsK
LSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNfdG90YWxMZW5ndGgpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRB
cmd1bWVudHNfdGFibGUpOwotICAgICAgICAgICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQu
bG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbWVkQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIG5hbWVkIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBvdmVyZmxvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEJ5VmFsIFNjb3BlZEFyZ3VtZW50cyBvdmVyZmxvdyBjYXNlIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTY29wZWRBcmd1bWVudHMgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGlu
ZGV4LCBuYW1lZExlbmd0aCksIHVuc3VyZShvdmVyZmxvd0Nhc2UpLCB1bnN1cmUobmFtZWRDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obmFtZWRDYXNlLCBvdmVyZmxvd0Nhc2UpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgc2NvcGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVk
QXJndW1lbnRzX3Njb3BlKTsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMgPSBtX291dC5s
b2FkUHRyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFz
ZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuc2NvcGVkQXJndW1lbnRzVGFibGVBcmd1
bWVudHMsIGFyZ3VtZW50cywgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAg
TFZhbHVlIHNjb3BlT2Zmc2V0ID0gbV9vdXQubG9hZDMyKGFkZHJlc3MpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHNjb3Bl
T2Zmc2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAg
ICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXMsIHNjb3Bl
LCBtX291dC56ZXJvRXh0UHRyKHNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOwot
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhvdmVyZmxvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcmZsb3dTdG9yYWdlLCBiYXNlLAot
ICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQuc3ViKGluZGV4LCBuYW1lZExl
bmd0aCkpKTsKLSAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1ZhbHVlID0gbV9vdXQubG9hZDY0
KGFkZHJlc3MpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEV4b3RpY09iamVjdE1vZGUsIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQob3ZlcmZsb3dWYWx1ZSkpOwotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iob3ZlcmZsb3dW
YWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIG5hbWVkUmVzdWx0
LCBvdmVyZmxvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbCksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJBdCgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2Rl
LT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5
cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyh0eXBlKSkgewotICAgICAgICAgICAgICAgIFR5
cGVkUG9pbnRlciBwb2ludGVyID0gVHlwZWRQb2ludGVyKAotICAgICAgICAgICAgICAgICAgICBt
X2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuc2hsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9F
eHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBpc1NpZ25lZCh0eXBlKSA/IG1fb3V0LmxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpIDogIG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGlzU2lnbmVkKHR5cGUpID8gbV9vdXQubG9hZDE2U2lnbkV4dDMyKHBvaW50ZXIp
IDogIG1fb3V0LmxvYWQxNlplcm9FeHQzMihwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkMzIocG9pbnRlcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXpl
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4ocmVzdWx0LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNw
ZWN1bGF0ZU1hY2hpbmVJbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RyaWN0
SW50NTIobV9vdXQuemVyb0V4dChyZXN1bHQsIG1fb3V0LmludDY0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91
YmxlKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQzMjoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZmxvYXRUb0RvdWJsZSht
X291dC5sb2FkRmxvYXQocG9pbnRlcikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX291dC5sb2FkRG91YmxlKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5cGVkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSB9Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCi0gICAgewotICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsaW1pdDsK
LSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkKLSAgICAgICAgICAgIGxpbWl0ID0gbV9vdXQuY29uc3RJbnQzMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOwotICAgICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwotICAgICAgICAgICAgbGltaXQgPSBtX291dC5zdWIo
bV9vdXQubG9hZDMyKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0Lmlu
dDMyT25lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKEV4b3RpY09i
amVjdE1vZGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsaW1pdCkp
OwotICAgICAgICAKLSAgICAgICAgVHlwZWRQb2ludGVyIGJhc2U7Ci0gICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgPD0gMSkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVh
ZHkgZXhpdGVkIGR1ZSB0byB0aGUgYm91bmRzIGNoZWNrLCBhYm92ZS4gSnVzdCB0ZWxsIHRoZQot
ICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVyIHRoYXQgYW55dGhpbmcgZG9taW5hdGVkIGJ5IHRo
aXMgaW5zdHJ1Y3Rpb24gaXMgbm90IHJlYWNoYWJsZSwgc28KLSAgICAgICAgICAgICAgICAvLyB0
aGF0IHdlIGRvbid0IHdhc3RlIHRpbWUgZ2VuZXJhdGluZyBzdWNoIGNvZGUuIFRoaXMgd2lsbCBh
bHNvIHBsYW50IHNvbWUKLSAgICAgICAgICAgICAgICAvLyBraW5kIG9mIGNyYXNoaW5nIGluc3Ry
dWN0aW9uIHNvIHRoYXQgaWYgYnkgc29tZSBmbHVrZSB0aGUgYm91bmRzIGNoZWNrIGRpZG4ndAot
ICAgICAgICAgICAgICAgIC8vIHdvcmssIHdlJ2xsIGNyYXNoIGluIGFuIGVhc3ktdG8tc2VlIHdh
eS4KLSAgICAgICAgICAgICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3Io
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQu
YmFzZUluZGV4KAotICAgICAgICAgICAgYmFzZS52YWx1ZSgpLCBtX291dC56ZXJvRXh0KGluZGV4
LCBtX291dC5pbnRQdHIpLCBTY2FsZUVpZ2h0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5s
b2FkNjQoVHlwZWRQb2ludGVyKG1faGVhcHMudmFyaWFibGVzLmF0QW55SW5kZXgoKSwgcG9pbnRl
cikpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUHV0QnlWYWwoKQotICAgIHsKLSAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7Ci0gICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOwotICAgICAg
ICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKLSAgICAgICAg
RWRnZSBjaGlsZDQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7Ci0gICAgICAgIEVk
Z2UgY2hpbGQ1ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJh
dGlvbjsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpKQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1v
ZGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdm1DYWxsKAot
ICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
KSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dK
U1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwoY2hpbGQx
KTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIoY2hpbGQyKTsKLSAgICAgICAgTFZh
bHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKGNoaWxkNCk7Ci0gICAgICAgIAotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG1fb3V0Lm1fYmxvY2ss
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpCi0gICAgICAgICAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGNoaWxkMywgU3BlY0ludDMyLCBpc05vdEludDMy
KHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVHlwZWRQb2ludGVy
IGVsZW1lbnRQb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBt
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAg
ICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCksIHByb3ZlblZhbHVlKGNoaWxkMikpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewot
ICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBlbGVtZW50UG9pbnRlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjb250aWd1b3VzUHV0QnlWYWxPdXRPZkJvdW5kcygK
LSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCi0gICAgICAg
ICAgICAgICAgICAgID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdAot
ICAgICAgICAgICAgICAgICAgICA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0b3JhZ2UsIGluZGV4LCB2YWx1
ZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBlbGVtZW50UG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoY2hp
bGQzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygK
LSAgICAgICAgICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBjaGlsZDMsIFNwZWNEb3Vi
bGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkKHZhbHVlLCB2YWx1ZSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFR5
cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllcywgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKGNoaWxk
MikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gUHV0QnlWYWxBbGlhcykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJs
ZSh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29udGln
dW91c1B1dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKQotICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QKLSAgICAgICAgICAgICAgICAgICAgOiBvcGVy
YXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAg
ICAgICAgICAgICBiYXNlLCBzdG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUs
IGVsZW1lbnRQb2ludGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KHR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgPSBUeXBlZFBvaW50
ZXIoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMsCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5zaGwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6ZSh0
eXBlKSkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgT3V0cHV0OjpTdG9y
ZVR5cGUgc3RvcmVUeXBlOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZVRvU3RvcmU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExWYWx1ZSBpbnRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjaGlsZDMudXNlS2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50NTJS
ZXBVc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZDMudXNlS2luZCgpID09IEludDMyVXNlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0gbG93SW50MzIoY2hpbGQzKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1
ZSA9IG1fb3V0LmNhc3RUb0ludDMyKGxvd1N0cmljdEludDUyKGNoaWxkMykpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGF0TGVhc3RaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBpbnQgY2xhbXAg
YXRMZWFzdFplcm8iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBpbnQgY2xhbXAg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gaW50VmFsdWVzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9y
KG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4oaW50
VmFsdWUsIG1fb3V0LmludDMyWmVybyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoYXRMZWFzdFplcm8pKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGF0TGVhc3RaZXJvLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ3JlYXRlclRoYW4oaW50VmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIoMjU1KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludFZhbHVlID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1
ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewotICAgICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgYXRMZWFzdFplcm8gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCBhdExlYXN0WmVybyIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB3aXRoaW5SYW5nZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIHdpdGhpblJhbmdlIikpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2ssIDM+IGludFZhbHVlczsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQoZG91YmxlVmFs
dWUsIG1fb3V0LmRvdWJsZVplcm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGF0TGVhc3RaZXJvKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhhdExlYXN0WmVybywgd2l0aGluUmFuZ2UpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1f
b3V0LmNvbnN0SW50MzIoMjU1KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3Jl
YXRlclRoYW4oZG91YmxlVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDI1NSkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKHdpdGhp
blJhbmdlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8od2l0aGluUmFuZ2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3Io
bV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0g
bV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1ZXMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBkb3VibGVU
b0ludDMyKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IGludFZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3Rv
cmUzMkFzODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6
OlN0b3JlMzJBczE2OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91
dHB1dDo6U3RvcmUzMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNpemUiKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAhaXNJbnQodHlwZSkgKi8gewotICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0MzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RvcmUgPSBtX291dC5kb3Vi
bGVUb0Zsb2F0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91
dHB1dDo6U3RvcmVGbG9hdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVUb1N0b3JlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUg
PSBPdXRwdXQ6OlN0b3JlRG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5cGVkIGFycmF5IHR5cGUiKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkgfHwgbV9ub2Rl
LT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3Jl
KHZhbHVlVG9TdG9yZSwgcG9pbnRlciwgc3RvcmVUeXBlKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNJbkJvdW5kcyA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgdHlwZWQgYXJyYXkgaW4gYm91bmRzIGNhc2UiKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiUHV0QnlWYWwgdHlwZWQgYXJyYXkgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsb3dJbnQzMihjaGls
ZDUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUoaXNJbkJvdW5kcykpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0luQm91bmRzLCBjb250
aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUs
IHBvaW50ZXIsIHN0b3JlVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoKQotICAgIHsKLSAgICAgICAgTFZhbHVl
IGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgYWNjZXNz
b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBhdXRvIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHZt
Q2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAotICAgICAgICAgICAgbV9vdXQub3Bl
cmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeUlkID8gb3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCA6IG9wZXJhdGlvblB1dFNldHRlckJ5SWQpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUs
IGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5h
Y2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBp
bGVQdXRHZXR0ZXJTZXR0ZXJCeUlkKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGdldHRlciA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBzZXR0ZXIgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHZtQ2FsbCgKLSAgICAg
ICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25zdEludFB0
cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBn
ZXR0ZXIsIHNldHRlcik7Ci0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5
VmFsKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIHN1YnNjcmlwdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBhY2Nlc3NvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAotICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeVZhbCA/IG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwpLAotICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIHN1YnNjcmlwdCwgbV9vdXQuY29uc3RJbnQzMihtX25v
ZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVBcnJheVB1c2goKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
LSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIE91dHB1dDo6U3RvcmVUeXBl
IHN0b3JlVHlwZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAg
ICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDIoKSwgU3Bl
Y0ludDMyLCBpc05vdEludDMyKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3RvcmU2NDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAgICAgIGRvdWJs
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDIoKSwgU3BlY0RvdWJsZVJlYWwsCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIHZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURvdWJsZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVh
cCYgaGVhcCA9IG1faGVhcHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KTsKLQotICAgICAgICAgICAgTFZhbHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgZmFzdFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5
UHVzaCBmYXN0IHBhdGgiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQdXNoIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQ
dXNoIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAg
ICAgICAgcHJldkxlbmd0aCwgbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3ZlY3Rvckxlbmd0aCkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3Vy
ZShmYXN0UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICBt
X291dC5zdG9yZSgKLSAgICAgICAgICAgICAgICB2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KGhlYXAs
IHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIocHJldkxlbmd0aCkpLCBzdG9yZVR5cGUpOwotICAg
ICAgICAgICAgTFZhbHVlIG5ld0xlbmd0aCA9IG1fb3V0LmFkZChwcmV2TGVuZ3RoLCBtX291dC5p
bnQzMk9uZSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKG5ld0xlbmd0aCwgc3RvcmFnZSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihib3hJbnQzMihuZXdM
ZW5ndGgpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UHVzaCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFycmF5UHVzaERvdWJsZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
b3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGJhc2UpKTsKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUFycmF5UG9wKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAg
ICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5mb3JBcnJheVR5cGUobV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBmYXN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQb3AgZmFzdCBj
YXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFycmF5UG9wIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQb3AgY29udGludWF0
aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcHJldkxlbmd0aCA9IG1f
b3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDM+IHJlc3VsdHM7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7Ci0gICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvMzIocHJldkxlbmd0aCksIHJhcmVs
eShjb250aW51YXRpb24pLCB1c3VhbGx5KGZhc3RDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIHNs
b3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBuZXdMZW5ndGggPSBtX291dC5zdWIocHJldkxl
bmd0aCwgbV9vdXQuaW50MzJPbmUpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihuZXdMZW5n
dGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAg
ICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBt
X291dC56ZXJvRXh0UHRyKG5ld0xlbmd0aCkpOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpIHsKLSAgICAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQubG9hZDY0KHBvaW50ZXIpOwotICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQobV9vdXQuaW50NjRaZXJvLCBwb2ludGVyKTsKLSAgICAgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3IocmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQocmVzdWx0KSwgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmxvYWREb3VibGUocG9p
bnRlcik7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5jb25zdEludDY0KGJp
dHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHBvaW50ZXIpOwotICAgICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hEb3VibGUocmVzdWx0KSkpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1
YWwocmVzdWx0LCByZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVh
dGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICAg
ICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVBvcEFuZFJlY292
ZXJMZW5ndGgpLCBtX2NhbGxGcmFtZSwgYmFzZSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oKQotICAgIHsKLSAg
ICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
U3ltYm9sVGFibGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0gICAgICAg
IEpTVmFsdWUgaW5pdGlhbGl6YXRpb25WYWx1ZSA9IG1fbm9kZS0+aW5pdGlhbGl6YXRpb25WYWx1
ZUZvckFjdGl2YXRpb24oKTsKLSAgICAgICAgQVNTRVJUKGluaXRpYWxpemF0aW9uVmFsdWUuaXNV
bmRlZmluZWQoKSB8fCBpbml0aWFsaXphdGlvblZhbHVlID09IGpzVERaVmFsdWUoKSk7Ci0gICAg
ICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAg
ICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0
LmludDY0LAotICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVB
Y3RpdmF0aW9uRGlyZWN0KSwgbV9jYWxsRnJhbWUsIHdlYWtQb2ludGVyKHN0cnVjdHVyZSksCi0g
ICAgICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxlKSwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKLSAgICAgICAgICAgIHNl
dEpTVmFsdWUoY2FsbFJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDcmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9uIGNv
bnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQ+
KAotICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHRhYmxl
KSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBXZSBkb24ndCBuZWVkIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3Qt
Y3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwgc28gdGhlCi0gICAgICAgIC8vIGFjdGl2YXRpb24gbXVz
dCBiZSB5b3VuZy4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1f
aGVhcHMuSlNTY29wZV9uZXh0KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIo
dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU3ltYm9sVGFibGVPYmplY3Rfc3ltYm9sVGFi
bGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLT5z
Y29wZVNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFs
dWUpKSwKLSAgICAgICAgICAgICAgICBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRW52aXJvbm1lbnRS
ZWNvcmRfdmFyaWFibGVzW2ldKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0g
bGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25W
YWx1ZSkpKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzY29wZSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
bm9kZS0+b3AoKSA9PSBOZXdGdW5jdGlvbiB8fCBtX25vZGUtPm9wKCkgPT0gTmV3QXJyb3dGdW5j
dGlvbiB8fCBtX25vZGUtPm9wKCkgPT0gTmV3R2VuZXJhdG9yRnVuY3Rpb24pOwotICAgICAgICBi
b29sIGlzR2VuZXJhdG9yRnVuY3Rpb24gPSBtX25vZGUtPm9wKCkgPT0gTmV3R2VuZXJhdG9yRnVu
Y3Rpb247Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpOwotICAgICAg
ICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpIHsK
LSAgICAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0KLSAgICAgICAgICAgICAgICBpc0dlbmVy
YXRvckZ1bmN0aW9uID8gdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgc2NvcGUsIHdlYWtQb2ludGVy
KGV4ZWN1dGFibGUpKSA6Ci0gICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgc2NvcGUsIHdl
YWtQb2ludGVyKGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbFJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0KLSAgICAgICAgICAgIGlzR2VuZXJhdG9yRnVuY3Rpb24gPyBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmdlbmVyYXRv
ckZ1bmN0aW9uU3RydWN0dXJlKCkgOgotICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5mdW5jdGlvblN0cnVjdHVyZSgpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik5ld0Z1bmN0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZmFzdE9i
amVjdCA9Ci0gICAgICAgICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gYWxsb2NhdGVPYmplY3Q8
SlNHZW5lcmF0b3JGdW5jdGlvbj4oc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCkgOgotICAgICAgICAgICAgYWxsb2NhdGVPYmplY3Q8SlNGdW5jdGlvbj4oc3RydWN0dXJlLCBt
X291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0
ZWQgdGhlIGZ1bmN0aW9uLCBzbyBpdAotICAgICAgICAvLyBtdXN0IGJlIHlvdW5nLgotICAgICAg
ICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Nj
b3BlKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZh
c3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKLSAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9u
X3JhcmVEYXRhKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotCi0gICAgICAgIFZlY3RvcjxMVmFsdWU+IHNsb3dQYXRoQXJndW1lbnRzOwotICAg
ICAgICBzbG93UGF0aEFyZ3VtZW50cy5hcHBlbmQoc2NvcGUpOwotICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3JGdW5jdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxs
b2NhdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0
ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAotICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBzbG93UGF0aEFyZ3VtZW50cyk7Ci0gICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBIG1vcmUgZWZmZWN0aXZlIHdheSBvZiBkZWFsaW5nIHdpdGggdGhlIGFyZ3VtZW50IGNv
dW50IGFuZCBjYWxsZWUgaXMgdG8gaGF2ZQotICAgICAgICAvLyB0aGVtIGJlIGV4cGxpY2l0IGFy
Z3VtZW50cyB0byB0aGlzIG5vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDIyMDcKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0KLSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCk7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5udW1QYXJhbWV0ZXJzKCkgLSAxOwotICAgICAgICAK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNy
ZWF0ZURpcmVjdEFyZ3VtZW50cyBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0QXJndW1lbnRz
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAg
ICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0OwotICAgICAgICBpZiAobGVuZ3RoLmlzS25v
d24pIHsKLSAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxEaXJlY3RBcmd1
bWVudHM+KAotICAgICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUo
c3RkOjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSkpLCBzdHJ1Y3R1cmUsCi0gICAgICAg
ICAgICAgICAgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgbV9v
dXQuc2hsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigzKSksCi0gICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
bWluQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgICAgICBzaXplLCBtX291dC5jb25zdEludDMyKERp
cmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3Q8
RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBzdHJ1Y3R1cmUsIG1fb3V0
LmludFB0clplcm8sIHNsb3dQYXRoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9v
dXQuc3RvcmUzMihsZW5ndGgudmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX2xlbmd0aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtaW5D
YXBhY2l0eSksIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX21pbkNhcGFjaXR5
KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKTsKLSAgICAgICAgCi0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgY2FsbFJlc3Vs
dCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9u
PiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOwotICAgICAgICAgICAg
fSwgbGVuZ3RoLnZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKLQotICAgICAgICBtX291dC5zdG9yZVB0cihnZXRDdXJyZW50
Q2FsbGVlKCksIHJlc3VsdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfY2FsbGVlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChsZW5ndGguaXNLbm93bikgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rk
OjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSk7ICsraSkgewotICAgICAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChhZGRyZXNz
Rm9yKHN0YXJ0ICsgaSkpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2VbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgTFZhbHVlIHN0YWNrQmFzZSA9IGdldEFyZ3VtZW50c1N0YXJ0KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBsb29wIGJvZHkiKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBlbmQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFy
Z3VtZW50cyBsb29wIGVuZCIpKTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2lu
YWxMZW5ndGg7Ci0gICAgICAgICAgICBpZiAobWluQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAg
ICBMVmFsdWUgY2FwYWNpdHkgPSBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNp
dHkpKSwKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLnZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSk7Ci0gICAgICAgICAgICAgICAgTFZh
bHVlIG9yaWdpbmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGNhcGFjaXR5KTsKLSAg
ICAgICAgICAgICAgICBvcmlnaW5hbExlbmd0aCA9IG1fb3V0LmFuY2hvcihvcmlnaW5hbExlbmd0
aFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGxvb3ApOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgb3JpZ2luYWxMZW5ndGhWYWx1ZSA9IG1f
b3V0Lnplcm9FeHRQdHIobGVuZ3RoLnZhbHVlKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5hbExl
bmd0aCA9IG1fb3V0LmFuY2hvcihvcmlnaW5hbExlbmd0aFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKG9yaWdpbmFsTGVuZ3RoVmFsdWUpLCB1bnN1cmUo
ZW5kKSwgdW5zdXJlKGxvb3ApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wLCBlbmQpOwotICAgICAgICAgICAg
TFZhbHVlIHByZXZpb3VzSW5kZXggPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBvcmlnaW5hbExl
bmd0aCk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRl
eCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
c3RhY2tCYXNlLCBpbmRleCkpLAotICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCByZXN1bHQsIGluZGV4KSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOwotICAgICAg
ICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChpbmRleCksIHVuc3VyZShlbmQp
LCB1bnN1cmUobG9vcCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhlbmQsIGxhc3ROZXh0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1
bWVudHMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAg
ICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cyksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgd2Vha1BvaW50ZXIoCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSksCi0gICAgICAgICAgICBnZXRBcmd1bWVu
dHNTdGFydCgpLCBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZSwgZ2V0Q3VycmVudENhbGxlZSgp
LCBzY29wZSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygpCi0gICAgewotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMpLCBtX2NhbGxGcmFt
ZSwKLSAgICAgICAgICAgIHdlYWtQb2ludGVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+b3V0T2ZCYW5kQXJndW1lbnRz
U3RydWN0dXJlKCkpLAotICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJndW1l
bnRzTGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSk7Ci0gICAgICAgIAotICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ29weVJlc3Qo
KQotICAgIHsgICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ29weVJlc3QgQyBjYWxsIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZpbGxSZXN0UGFyYW1l
dGVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICBtX291dC5lcXVhbChhcnJheUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCi0gICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGRvQ29weVJlc3QpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGRv
Q29weVJlc3QsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAx
OkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMg
dG8gc2tpcCwgNDphcnJheSBsZW5ndGgKLSAgICAgICAgTFZhbHVlIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCkpOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSxtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QpLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCksIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG5vblplcm9MZW5ndGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFJl
c3RMZW5ndGggbm9uIHplcm8iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0UmVzdExlbmd0aCBjb250aW51YXRpb24iKSk7Ci0g
ICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayB6ZXJvTGVuZ3RoUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotCi0gICAgICAgIExWYWx1ZSBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpKTsKLSAgICAgICAgTFZhbHVlIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50
c0xlbmd0aCgpLnZhbHVlOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYWJvdmUoYXJndW1l
bnRzTGVuZ3RoLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCi0gICAgICAgICAgICB1bnN1cmUo
bm9uWmVyb0xlbmd0aCksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm9uWmVyb0xlbmd0aCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uWmVyb0xlbmd0aFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCB6ZXJvTGVuZ3RoUmVzdWx0LCBub25aZXJv
TGVuZ3RoUmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgp
Ci0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0
dXJlKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQotICAgIHsK
LSAgICAgICAgLy8gRmlyc3Qgc3BlY3VsYXRlIGFwcHJvcHJpYXRlbHkgb24gYWxsIG9mIHRoZSBj
aGlsZHJlbi4gRG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgdXAgaGVyZQotICAgICAgICAvLyBiZWNh
dXNlIHNvbWUgb2YgdGhlIHNsb3cgcGF0aHMgbWF5IG90aGVyd2lzZSBmb3JnZXQgdG8gZG8gaXQu
IEl0J3Mgc29ydCBvZiBhcmd1YWJsZQotICAgICAgICAvLyB0aGF0IGRvaW5nIHRoZSBzcGVjdWxh
dGlvbnMgdXAgaGVyZSBtaWdodCBiZSB1bnByb2ZpdGFibGUgZm9yIFJBIC0gc28gd2UgY2FuIGNv
bnNpZGVyCi0gICAgICAgIC8vIHNpbmtpbmcgdGhpcyB0byBiZWxvdyB0aGUgYWxsb2NhdGlvbiBm
YXN0IHBhdGggaWYgd2UgZmluZCB0aGF0IHRoaXMgaGFzIGEgbG90IG9mCi0gICAgICAgIC8vIHJl
Z2lzdGVyIHByZXNzdXJlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7
IG9wZXJhbmRJbmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCi0g
ICAgICAgICAgICBzcGVjdWxhdGUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJ
bmRleCkpOwotICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKLSAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpOwotCi0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtX25vZGUtPm51bUNoaWxkcmVuKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEFycmF5VmFsdWVzIGFycmF5VmFsdWVzID0gYWxsb2Nh
dGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG1fbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFuZEluZGV4KTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+aW5kZXhpbmdUeXBl
KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgaW5kZXhpbmcgdHlw
ZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
d0RvdWJsZShlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsdWVzLmJ1dHRl
cmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tvcGVyYW5kSW5kZXhdKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGVkZ2UsIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZh
bHVlcy5idXR0ZXJmbHksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmZvckluZGV4
aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQob3BlcmFuZEluZGV4KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQ29ycnVwdCBpbmRleGluZyB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5hcnJheSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbV9ub2RlLT5udW1DaGlsZHJlbigp
KSB7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291
dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkpLCBtX2NhbGxG
cmFtZSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBz
Y3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBtX25vZGUtPm51bUNoaWxkcmVu
KCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsK
LSAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbV9ub2RlLT5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgewotICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJbmRleCk7Ci0gICAgICAgICAgICBtX291
dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKSwKLSAgICAgICAgICAgICAgICBtX291dC5hYnNvbHV0ZShidWZmZXIgKyBv
cGVyYW5kSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzY3JhdGNoU2l6ZSksIG1fb3V0LmFi
c29sdXRlKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheSksIG1fY2FsbEZyYW1lLAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIoYnVmZmVy
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkp
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgbV9v
dXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpKTsKLSAgICAgICAg
Ci0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlTmV3QXJyYXlCdWZmZXIoKQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKLSAgICAgICAgICAgIG1fbm9k
ZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+
bnVtQ29uc3RhbnRzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFycmF5VmFsdWVzIGFy
cmF5VmFsdWVzID0gYWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlKiBkYXRhID0gY29kZUJsb2NrKCktPmNvbnN0
YW50QnVmZmVyKG1fbm9kZS0+c3RhcnRDb25zdGFudCgpKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fbm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmICho
YXNEb3VibGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGRhdGFbaW5kZXhdLmFzTnVtYmVyKCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUoZGF0YVtpbmRleF0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQodmFsdWUp
LAotICAgICAgICAgICAgICAgICAgICBhcnJheVZhbHVlcy5idXR0ZXJmbHksCi0gICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMuZm9ySW5kZXhpbmdUeXBlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkp
LT5hdChpbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICBt
X291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKSwgbV9j
YWxsRnJhbWUsCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291
dC5jb25zdEludFB0cihtX25vZGUtPnN0YXJ0Q29uc3RhbnQoKSksCi0gICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihtX25vZGUtPm51bUNvbnN0YW50cygpKSkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBw
dWJsaWNMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFy
cmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgQVNTRVJU
KAotICAgICAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KQotICAgICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7Ci0KLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGZhc3QgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhcmdlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRo
U2l6ZSBsYXJnZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZmFpbCBjYXNlIikpOwotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5l
d0FycmF5V2l0aFNpemUgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGNvbnRp
bnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChwdWJsaWNMZW5ndGgsIG1fb3V0LmNvbnN0
SW50MzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpLAotICAgICAgICAg
ICAgICAgIHJhcmVseShsYXJnZUNhc2UpLCB1c3VhbGx5KGZhc3RDYXNlKSk7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIGxhcmdl
Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHJvdW5kIHVwIHRv
IEJBU0VfVkVDVE9SX0xFTiBmb3IgbmV3IEFycmF5KGJsYWgpLgotICAgICAgICAgICAgTFZhbHVl
IHZlY3Rvckxlbmd0aCA9IHB1YmxpY0xlbmd0aDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TFZhbHVlIHBheWxvYWRTaXplID0KLSAgICAgICAgICAgICAgICBtX291dC5zaGwobV9vdXQuemVy
b0V4dCh2ZWN0b3JMZW5ndGgsIG1fb3V0LmludFB0ciksIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGVu
ZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKGJ1dHRlcmZseVNpemUs
IGZhaWxDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXplKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTQXJyYXk+KHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBmYWlsQ2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlMzIocHVibGljTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwgYnV0dGVy
Zmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdExvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5l
d0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgbG9vcCIpKTsKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbml0RG9uZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6
ZSBkb3VibGUgaW5pdCBkb25lIikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsSW5kZXggPSBtX291dC5hbmNob3IodmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbFBvaW50ZXIgPSBtX291
dC5hbmNob3IoYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMih2ZWN0b3JMZW5ndGgpLCB1bnN1cmUoaW5p
dExvb3ApLCB1bnN1cmUoaW5pdERvbmUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBpbml0TGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbml0TG9vcCwg
aW5pdERvbmUpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShtX291
dC5pbnQzMiwgb3JpZ2luYWxJbmRleCk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHBvaW50ZXIg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBvcmlnaW5hbFBvaW50ZXIpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAg
ICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMu
YXRBbnlJbmRleCgpLCBwb2ludGVyKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwot
ICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hv
cihuZXh0SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBv
aW50ZXIsIG1fb3V0LmFuY2hvcihtX291dC5hZGQocG9pbnRlciwgbV9vdXQuaW50UHRyRWlnaHQp
KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RaZXJvMzIobmV4dEluZGV4KSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGluaXRE
b25lKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW5pdERvbmUsIGluaXRMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Iob2JqZWN0
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlLCBmYWlsQ2FzZSk7Ci0gICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZVN0cnVjdHVyZSA9IG1fb3V0LmFuY2hvcihtX291dC5j
b25zdEludFB0cigKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhaWxTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5waGkoCi0gICAg
ICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBsYXJnZVN0cnVjdHVyZSwgZmFpbFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAg
ICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0u
ZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1
cmVWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChw
dWJsaWNMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNU
SU9OX0xFTkdUSCkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSksCi0gICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKSwgbV9jYWxsRnJh
bWUsIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
bXBpbGVOZXdUeXBlZEFycmF5KCkKLSAgICB7Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUg
PSBtX25vZGUtPnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKHR5cGUpOwotCi0gICAg
ICAgICAgICBMVmFsdWUgc2l6ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBzbWFsbEVub3VnaENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5ld1R5cGVkQXJyYXkgc21hbGwgZW5vdWdoIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBub25aZXJvQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJh
eSBub24temVybyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld1R5cGVkQXJyYXkgc2xvdyBjYXNlIikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJO
ZXdUeXBlZEFycmF5IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKHNpemUsIG1fb3V0LmNvbnN0SW50MzIoSlNB
cnJheUJ1ZmZlclZpZXc6OmZhc3RTaXplTGltaXQpKSwKLSAgICAgICAgICAgICAgICByYXJlbHko
c2xvd0Nhc2UpLCB1c3VhbGx5KHNtYWxsRW5vdWdoQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsRW5vdWdoQ2FzZSwgbm9uWmVy
b0Nhc2UpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90WmVybzMyKHNpemUp
LCB1c3VhbGx5KG5vblplcm9DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0KLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vblplcm9DYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIExW
YWx1ZSBieXRlU2l6ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHRQ
dHIoc2l6ZSksIG1fb3V0LmNvbnN0SW50MzIobG9nRWxlbWVudFNpemUodHlwZSkpKTsKLSAgICAg
ICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDgpIHsKLSAgICAgICAgICAgICAgICBieXRl
U2l6ZSA9IG1fb3V0LmJpdEFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGJ5dGVT
aXplLCBtX291dC5jb25zdEludFB0cig3KSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oNykpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdl
KGJ5dGVTaXplLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFs
dWUgPQotICAgICAgICAgICAgICAgIGFsbG9jYXRlT2JqZWN0PEpTQXJyYXlCdWZmZXJWaWV3Pihz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dDYXNlKTsKLQotICAgICAgICAgICAgbV9v
dXQuc3RvcmVQdHIoc3RvcmFnZSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZm
ZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHNpemUsIGZhc3RSZXN1
bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwotICAgICAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSwgZmFzdFJlc3Vs
dFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwotCi0gICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBMVmFs
dWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAo
Y29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRo
OjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJh
eVdpdGhTaXplRm9yVHlwZSh0eXBlKSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICBzaXplKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIs
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZSh0eXBl
KSksCi0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dC0+dHlwZWRBcnJheVN0cnVjdHVyZSh0eXBlKSksIGFyZ3VtZW50KTsKLQotICAgICAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cykpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9
IG1fbm9kZS0+dHJhbnNpdGlvbigpOwotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIG9sZFN0b3JhZ2UgPSBsb3dTdG9yYWdl
KG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZSgKLSAgICAg
ICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0
LCBvbGRTdG9yYWdlLCB0cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVj
dG9yKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZ09iamVjdEZvckNlbGwobV9ub2RlLT5jaGlsZDEoKSwgY2VsbCk7Ci0gICAgICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nT2JqZWN0KTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGNlbGws
IG1faGVhcHMuSlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RyaW5nT3JTdHJp
bmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQz
MihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9T
dHJpbmcgU3RyaW5nT3JTdHJpbmdPYmplY3Qgbm90IHN0cmluZyBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0
cmluZyBTdHJpbmdPclN0cmluZ09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihj
ZWxsKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5l
cXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+
aWQoKSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90
U3RyaW5nKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90U3RyaW5nLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQobV9ub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlSUQpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgdW5ib3hlZFJlc3VsdCA9IG1f
b3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMu
SlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgc2ltcGxlUmVzdWx0LCB1bmJveGVkUmVzdWx0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGwgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBpcyBjZWxsIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmlu
ZyBDZWxsVXNlL1VudHlwZWRVc2Ugbm90IHN0cmluZyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVz
ZS9VbnR5cGVkVXNlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TFZhbHVlIGlzQ2VsbFByZWRpY2F0ZTsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgICAgIGlzQ2VsbFByZWRpY2F0ZSA9
IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlz
Q2VsbFByZWRpY2F0ZSA9IHRoaXMtPmlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNo
aWxkMSgpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsUHJlZGljYXRlLCB1bnN1
cmUoaXNDZWxsKSwgdW5zdXJlKG5vdFN0cmluZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbCwgbm90U3RyaW5n
KTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZVJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2YWx1ZSk7Ci0gICAgICAgICAgICBMVmFsdWUgaXNTdHJpbmdQcmVkaWNhdGU7Ci0gICAgICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewot
ICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJlZGljYXRlID0gaXNTdHJpbmcodmFsdWUsIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgaXNTdHJpbmdQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmdQcmVkaWNhdGUsIHVuc3VyZShjb250aW51YXRpb24pLCB1
bnN1cmUobm90U3RyaW5nKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSBvcGVyYXRp
b247Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24obV9ub2RlLT5v
cCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwgOiBvcGVyYXRpb25DYWxs
U3RyaW5nQ29uc3RydWN0b3JPbkNlbGwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0gVG9TdHJpbmcg
PyBvcGVyYXRpb25Ub1N0cmluZyA6IG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRSZXN1bHQgPSBtX291dC5hbmNob3Io
dm1DYWxsKG1fb3V0LmludDY0LCBvcGVyYXRpb24sIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwotICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBzaW1wbGVSZXN1bHQsIGNvbnZlcnRl
ZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZVRvUHJpbWl0aXZlKCkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1ByaW1p
dGl2ZSBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzT2JqZWN0Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiVG9QcmltaXRpdmUgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9Qcmlt
aXRpdmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxD
YXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc09iamVjdENhc2UpOwot
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IodmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuYnJhbmNoKAotICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgdW5zdXJlKGlzT2JqZWN0Q2FzZSksIHVuc3VyZShj
b250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzT2JqZWN0
Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uVG9QcmltaXRpdmUpLCBtX2NhbGxGcmFtZSwgdmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVNYWtlUm9wZSgp
Ci0gICAgewotICAgICAgICBMVmFsdWUga2lkc1szXTsKLSAgICAgICAgdW5zaWduZWQgbnVtS2lk
czsKLSAgICAgICAga2lkc1swXSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IGtpZHNbMV0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBpZiAobV9ub2Rl
LT5jaGlsZDMoKSkgewotICAgICAgICAgICAga2lkc1syXSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDMoKSk7Ci0gICAgICAgICAgICBudW1LaWRzID0gMzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGtpZHNbMl0gPSAwOwotICAgICAgICAgICAgbnVtS2lkcyA9IDI7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJNYWtlUm9wZSBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUgY29udGludWF0aW9uIikp
OwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPQotICAgICAgICAgICAgdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVj
dFdpdGhEZXN0cnVjdG9yKHNpemVvZihKU1JvcGVTdHJpbmcpKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cigmYWxsb2NhdG9yKSwKLSAgICAgICAgICAgIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgp
LAotICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9vdXQuaW50UHRyWmVybywgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUtpZHM7ICsraSkKLSAgICAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKGtpZHNbaV0sIHJlc3VsdCwgbV9oZWFwcy5KU1JvcGVTdHJpbmdfZmli
ZXJzW2ldKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtS2lkczsgaSA8IEpTUm9wZVN0
cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmludFB0clplcm8sIHJlc3VsdCwgbV9oZWFwcy5KU1JvcGVTdHJpbmdfZmli
ZXJzW2ldKTsKLSAgICAgICAgTFZhbHVlIGZsYWdzID0gbV9vdXQubG9hZDMyKGtpZHNbMF0sIG1f
aGVhcHMuSlNTdHJpbmdfZmxhZ3MpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQubG9h
ZDMyKGtpZHNbMF0sIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bUtpZHM7ICsraSkgewotICAgICAgICAgICAgZmxhZ3MgPSBtX291
dC5iaXRBbmQoZmxhZ3MsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2Zs
YWdzKSk7Ci0gICAgICAgICAgICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNwZWN1
bGF0ZUFkZCgKLSAgICAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBt
X2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwotICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihs
ZW5ndGhDaGVjaywgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwot
ICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoQ2hlY2s7Ci0gICAgICAgIH0KLSAgICAgICAgbV9v
dXQuc3RvcmUzMigKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChtX291dC5jb25zdEludDMyKEpT
U3RyaW5nOjpJczhCaXQpLCBmbGFncyksCi0gICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNT
dHJpbmdfZmxhZ3MpOwotICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aCwgcmVzdWx0LCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlOwotICAgICAgICBz
d2l0Y2ggKG51bUtpZHMpIHsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2xvd1Jlc3Vs
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJvcGUyLCBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgfSwga2lk
c1swXSwga2lkc1sxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAg
IFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJv
cGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzNdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFd
LCBraWRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBudW1iZXIgb2YgY2hpbGRyZW4i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1f
b3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgZmFz
dFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBmYXN0IHBhdGgi
KSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBTdHJpbmcgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2Fk
MzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShmYXN0UGF0aCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNs
b3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0
LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTdHJpbmcgOC1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgaXMxNkJpdCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDE2LWJpdCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBiaXRzQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBTdHJpbmcgYml0bmVzcyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGJpZ0NoYXJhY3RlciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3Ry
aW5nIGJpZyBjaGFyYWN0ZXIiKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkp
LAotICAgICAgICAgICAgdW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAg
ICAgICAgICBtX2hlYXBzLmNoYXJhY3RlcnM4LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGlu
ZGV4KSwKLSAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpKTsK
LSAgICAgICAgbV9vdXQuanVtcChiaXRzQ29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBiaWdDaGFyYWN0ZXIpOwotCi0gICAgICAgIExW
YWx1ZSBjaGFyMTZCaXRWYWx1ZSA9IG1fb3V0LmxvYWQxNlplcm9FeHQzMigKLSAgICAgICAgICAg
IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLmNoYXJhY3RlcnMxNiwg
c3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAgICAgICAgcHJvdmVu
VmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hhcjE2
Qml0ID0gbV9vdXQuYW5jaG9yKGNoYXIxNkJpdFZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGNoYXIxNkJpdFZhbHVlLCBtX291dC5j
b25zdEludDMyKDB4MTAwKSksCi0gICAgICAgICAgICByYXJlbHkoYmlnQ2hhcmFjdGVyKSwgdXN1
YWxseShiaXRzQ29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYmlnQ2hhcmFjdGVyLCBiaXRzQ29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDQ+IHJlc3VsdHM7Ci0gICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyksCi0gICAgICAgICAg
ICBtX2NhbGxGcmFtZSwgY2hhcjE2Qml0VmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhiaXRzQ29u
dGludWF0aW9uLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNoYXJh
Y3RlciA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgY2hhcjhCaXQsIGNoYXIxNkJpdCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHNtYWxsU3RyaW5ncyA9IG1fb3V0LmNvbnN0SW50UHRy
KHZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWRQdHIobV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgbV9oZWFwcy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
LCBzbWFsbFN0cmluZ3MsIG1fb3V0Lnplcm9FeHRQdHIoY2hhcmFjdGVyKSkpKSk7Ci0gICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuaW50UHRyWmVybykpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPnN0cmluZ1Byb3Rv
dHlwZUNoYWluSXNTYW5lKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBjYXB0dXJlZCB1c2luZyBhIFNwZWN1bGF0aW9uIG1vZGUgdGhhdCBtZWFucwotICAgICAg
ICAgICAgICAgIC8vICJvdXQtb2YtYm91bmRzIGxvYWRzIHJldHVybiBhIHRyaXZpYWwgdmFsdWUi
LCBzb21ldGhpbmcgbGlrZQotICAgICAgICAgICAgICAgIC8vIFNhbmVDaGFpbk91dE9mQm91bmRz
LgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWdhdGl2ZUluZGV4ID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgbmVnYXRpdmUgaW5kZXgiKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkp
KTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5pbnQzMlplcm8pLAotICAgICAgICAgICAgICAgICAg
ICByYXJlbHkobmVnYXRpdmVJbmRleCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5lZ2F0aXZlSW5k
ZXgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJ
bnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgaXM4Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29kZUF0IDgtYml0
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgMTYtYml0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nQ2hhckNvZGVB
dCBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hp
bGQzKCkpOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAg
ICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFw
cy5KU1N0cmluZ19sZW5ndGgpKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5n
SW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAgICAgICAgICB1bnN1cmUoaXMxNkJpdCksIHVu
c3VyZShpczhCaXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgY2hhcjhCaXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBt
X291dC5sb2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9o
ZWFwcy5jaGFyYWN0ZXJzOCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAg
ICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhpczE2Qml0LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0Lmxv
YWQxNlplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5j
aGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAg
ICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHNldEludDMyKG1fb3V0LnBo
aShtX291dC5pbnQzMiwgY2hhcjhCaXQsIGNoYXIxNkJpdCkpOwotICAgIH0KLQotICAgIHZvaWQg
Y29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpCi0gICAgewotICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG1fbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hpbGRFZGdlLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1D
YWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uU3RyaW5nRnJvbUNoYXJDb2RlVW50eXBlZCksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAg
ICAgIGxvd0pTVmFsdWUoY2hpbGRFZGdlKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSk7Ci0KLSAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIoY2hpbGRFZGdlKTsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIHNtYWxsSW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3Ry
aW5nRnJvbUNoYXJDb2RlIHNtYWxsIGludCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBz
bG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nRnJvbUNoYXJDb2RlIHNsb3cg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTdHJpbmdGcm9tQ2hhckNvZGUgY29udGludWF0aW9uIikpOwotCi0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCh2YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMigweGZmKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KHNtYWxsSW50Q2FzZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oc21hbGxJbnRDYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgTFZhbHVlIHNt
YWxsU3RyaW5ncyA9IG1fb3V0LmNvbnN0SW50UHRyKHZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNo
YXJhY3RlclN0cmluZ3MoKSk7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291
dC5sb2FkUHRyKAotICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBtX291dC56ZXJvRXh0UHRyKHZhbHVlKSkpOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1
bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUg
c2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKSwgbV9jYWxsRnJhbWUsIHZh
bHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihz
bG93UmVzdWx0VmFsdWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoKQotICAgIHsKLSAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKGxvYWRQcm9wZXJ0eSgKLSAgICAgICAg
ICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksIGRhdGEuaWRlbnRpZmllck51bWJlciwg
ZGF0YS5vZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0R2V0dGVyKCkK
LSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpLCBtX2hlYXBzLkdldHRlclNldHRlcl9nZXR0ZXIpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlR2V0U2V0dGVyKCkKLSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkdldHRlclNldHRl
cl9zZXR0ZXIpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIAotICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9k
ZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKLQotICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBm
dW5jdGlvbiB3aXRoIHplcm8gaW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgotICAgICAg
ICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5j
YXNlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUo
KTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TXVsdGlHZXRCeU9mZnNldCBjYXNlICIsIGkpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRp
R2V0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFN3
aXRjaENhc2UsIDI+IGNhc2VzOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2FzZS5zZXQoKS5zaXplKCk7IGotLTspIHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhc2Uuc2V0KClbal07Ci0g
ICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBj
YXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tz
W2ldLCBXZWlnaHQoMSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX291
dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hl
YXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBleGl0LCBXZWlnaHQoMCkpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKLSAg
ICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOwotICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRh
dGEuY2FzZXMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0
Y2ggKG1ldGhvZC5raW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkludmFsaWQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1
ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgotICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKLSAgICAgICAgICAgICAgICBMVmFs
dWUgcHJvcGVydHlCYXNlOwotICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Ug
PSBiYXNlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGxvYWRCdXR0ZXJmbHlSZWFkT25s
eShwcm9wZXJ0eUJhc2UpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIs
IG1ldGhvZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHJlc3VsdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24p
OwotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc1N1YnNldE9mKGJhc2VTZXQpKQotICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZENhY2hlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291
dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRCeU9m
ZnNldCgpCi0gICAgewotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG1fbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIHN0b3JlUHJvcGVydHkoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpLAotICAgICAgICAgICAgbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9m
ZnNldCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKQot
ICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICAKLSAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ss
IDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgYmxvY2tzW2ldID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwotICAg
ICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5
T2Zmc2V0IGZhaWwiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgIAotICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7Ci0gICAgICAgIFN0cnVj
dHVyZVNldCBiYXNlU2V0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXTsKLSAgICAgICAgICAgICAgICBi
YXNlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0
Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0
aW9uKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwgY2FzZXMsIGV4aXQsIFdlaWdodCgwKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0KLSAgICAgICAgICAgIGNo
ZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVk
VHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7Ci0gICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihi
YXNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Bs
YW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2so
KSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCi0gICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlh
bnQub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQotICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBl
KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUlu
Zm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5m
bygpLmlubGluZVR5cGVGbGFncygpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQu
bmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTMyKAotICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwg
c3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihiYXNlU2V0KSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0R2xvYmFsVmFyaWFibGUoKQot
ICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9u
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
UHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmFic29sdXRlKG1fbm9k
ZS0+dmFyaWFibGVQb2ludGVyKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTm90
aWZ5V3JpdGUoKQotICAgIHsKLSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT53
YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludmFs
aWRhdGVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxpZGF0
ZWQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0ZShz
ZXQtPmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50MzIoSXNJbnZhbGlkYXRlZCkpLAot
ICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNOb3RJbnZhbGlkYXRl
ZCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpc05vdEludmFsaWRhdGVkLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTm90aWZ5
V3JpdGUsIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKEpTU3RhY2s6OkNhbGxlZSkpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudCgpCi0gICAgewotICAg
ICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRTY29wZSgpCi0gICAgewot
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Njb3BlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZVNraXBTY29wZSgpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIo
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU1Njb3BlX25leHQpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0Q2xvc3VyZVZhcigpCi0gICAgewotICAgICAgICBz
ZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgICAgIGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmly
b25tZW50UmVjb3JkX3ZhcmlhYmxlc1ttX25vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCldKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dENsb3N1cmVWYXIoKQotICAgIHsKLSAg
ICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSksCi0gICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1ttX25vZGUtPnNjb3BlT2Zm
c2V0KCkub2Zmc2V0KCldKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0RnJvbUFy
Z3VtZW50cygpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQu
bG9hZDY0KAotICAgICAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZVttX25vZGUtPmNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVB1dFRvQXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAotICAgICAgICAgICAgbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpXSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcSgpCi0gICAgewotICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpCi0gICAgICAgICAgICB8fCBt
X25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKERvdWJsZVJlcFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKEJvb2xlYW5Vc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChTeW1ib2xVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChT
dHJpbmdJZGVudFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0
cmluZ1VzZSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSwgT2JqZWN0T3JPdGhlclVzZSkpIHsKLSAgICAgICAg
ICAgIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdChtX25vZGUtPmNoaWxkMigpLCBtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UsIE9i
amVjdFVzZSkpIHsKLSAgICAgICAgICAgIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCht
X25vZGUtPmNoaWxkMSgpLCBtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBhcmUoCi0gICAg
ICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlRXEpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE90aGVyVXNlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVl
ZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyKSk7Ci0gICAgICAgICAgICBz
ZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQyKCksIEFsbENlbGxz
QXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgewotICAgICAgICAgICAgQVNTRVJUKCFt
X2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNPdGhlcikp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNo
aWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQotICAgIHsKLSAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgc2V0
Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDUyUmVwVXNlKSkgewotICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAg
ICAgICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtp
bmQpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIo
KSwga2luZCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpKSB7Ci0gICAgICAgICAgICBz
ZXRCb29sZWFuKAotICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlz
QmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4o
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGls
ZDEoKSksIGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3RyaW5nVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5RXF1YWxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEvU3RyaW5nIG5vdCB0cml2
aWFsbHkgZXF1YWwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxL1N0cmluZyBjb250aW51
YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhtX25vZGUtPmNoaWxkMSgp
LCBsZWZ0KTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpLCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG1fbm9kZS0+Y2hp
bGQyKCksIHJpZ2h0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzdHJpbmdzRXF1YWwobGVmdCwgcmlnaHQpKTsKLSAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoT2JqZWN0VXNlLCBVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVh
bigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbG93
Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBl
ZFVzZSwgT2JqZWN0VXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAgICAgICAg
ICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdCht
X25vZGUtPmNoaWxkMigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAg
ICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAg
ICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEJvb2xlYW5Vc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIGxvd0Jvb2xl
YW4obV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTeW1ib2xVc2UpKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0U3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIobGVmdCwgbV9oZWFw
cy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0U3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIocmlnaHQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsKLSAg
ICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwobGVmdFN0cmluZ0ltcGwsIHJpZ2h0U3Ry
aW5nSW1wbCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWlzY1VzZSwgVW50eXBlZFVzZSkKLSAg
ICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE1pc2NVc2Up
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQu
ZXF1YWwobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNl
LCBOb3RTdHJpbmdWYXJVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOb3RTdHJpbmdWYXJVc2UsIFN0cmluZ0lkZW50VXNlKSkgewotICAgICAgICAgICAgRWRnZSBs
ZWZ0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3IoU3RyaW5nSWRlbnRVc2UpOwotICAgICAgICAgICAg
RWRnZSByaWdodEVkZ2UgPSBtX25vZGUtPmNoaWxkRm9yKE5vdFN0cmluZ1ZhclVzZSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93U3RyaW5nSWRlbnQobGVmdEVk
Z2UpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0VmFsdWUgPSBsb3dKU1ZhbHVlKHJpZ2h0RWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0
cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1ZhciBpcyBjZWxsIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIgaXMgc3RyaW5nIGNh
c2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAg
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNDZWxsKHJpZ2h0VmFsdWUs
IHByb3ZlblR5cGUocmlnaHRFZGdlKSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGlzQ2VsbENh
c2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdD
YXNlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFN0cmluZ1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgIGlzU3RyaW5nKHJpZ2h0VmFsdWUsIHByb3ZlblR5cGUocmlnaHRFZGdl
KSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShjb250aW51
YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJp
bmdDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbV9vdXQu
bG9hZFB0cihyaWdodFZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZ0lkZW50KHJpZ2h0RWRnZSwgcmlnaHRWYWx1ZSwgcmlnaHQpOwotICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuZXF1YWwobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5i
b29sZWFuLCBub3RDZWxsUmVzdWx0LCBub3RTdHJpbmdSZXN1bHQsIGlzU3RyaW5nUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcUNvbnN0YW50KCkKLSAgICB7Ci0gICAgICAgIEpT
VmFsdWUgY29uc3RhbnQgPSBtX25vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUoKTsKLQotICAgICAg
ICBzZXRCb29sZWFuKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0gICAgICAg
ICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5kb3VibGVMZXNzVGhhbihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVDb21wYXJlTGVzc0VxKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0gICAg
ICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQubGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0
KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlTGVzc0VxKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0ZXIoKQotICAgIHsKLSAg
ICAgICAgY29tcGFyZSgKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ncmVhdGVyVGhhbihsZWZ0LCByaWdo
dCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFu
KGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvcGVyYXRpb25Db21w
YXJlR3JlYXRlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNvbXBhcmVHcmVhdGVy
RXEoKQotICAgIHsKLSAgICAgICAgY29tcGFyZSgKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ncmVhdGVy
VGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsm
XSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBt
X291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKLSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4o
bV9vdXQubG9naWNhbE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSBtX25vZGU7Ci0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKLQotICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1BcmdzOwotICAgICAgICB1bnNpZ25lZCBh
bGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7Ci0KLSAgICAgICAgLy8gSlMtPkpTIGNhbGxpbmcgY29u
dmVudGlvbiByZXF1aXJlcyB0aGF0IHRoZSBjYWxsZXIgYWxsb3dzIHRoaXMgbXVjaCBzcGFjZSBv
biB0b3Agb2Ygc3RhY2sgdG8KLSAgICAgICAgLy8gZ2V0IHRyYXNoZWQgYnkgdGhlIGNhbGxlZSwg
ZXZlbiBpZiBub3QgYWxsIG9mIHRoYXQgc3BhY2UgaXMgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy4g
V2UgdGVsbAotICAgICAgICAvLyBCMyB0aGlzIGV4cGxpY2l0bHkgZm9yIHR3byByZWFzb25zOgot
ICAgICAgICAvLwotICAgICAgICAvLyAtIFdlIHdpbGwgb25seSBwYXNzIGZyYW1lU2l6ZSB3b3J0
aCBvZiBzdHVmZi4KLSAgICAgICAgLy8gLSBUaGUgdHJhc2hlZCBzdGFjayBndWFyYW50ZWUgaXMg
bG9naWNhbGx5IHNlcGFyYXRlIGZyb20gdGhlIGFjdCBvZiBwYXNzaW5nIGFyZ3VtZW50cywgc28g
d2UKLSAgICAgICAgLy8gICBzaG91bGRuJ3QgcmVseSBvbiBBaXIgdG8gaW5mZXIgdGhlIHRyYXNo
ZWQgc3RhY2sgcHJvcGVydHkgYmFzZWQgb24gdGhlIGFyZ3VtZW50cyBpdCBlbmRzCi0gICAgICAg
IC8vICAgdXAgc2VlaW5nLgotICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShh
bGlnbmVkRnJhbWVTaXplKTsKLQotICAgICAgICAvLyBDb2xsZWN0IHRoZSBhcmd1bWVudHMsIHNp
bmNlIHRoaXMgY2FuIGdlbmVyYXRlIGNvZGUgYW5kIHdlIHdhbnQgdG8gZ2VuZXJhdGUgaXQgYmVm
b3JlIHdlIGVtaXQKLSAgICAgICAgLy8gdGhlIGNhbGwuCi0gICAgICAgIFZlY3RvcjxDb25zdHJh
aW5lZFZhbHVlPiBhcmd1bWVudHM7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNh
bGxlZSBnb2VzIGludG8gR1BSMCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgc2xvdyBwYXRoIHRo
dW5rcyBleHBlY3QgdGhlCi0gICAgICAgIC8vIGNhbGxlZSB0byBiZS4KLSAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJlZ1QwKSkpOwotCi0gICAgICAgIGF1dG8gYWRkQXJndW1lbnQgPSBbJl0gKExWYWx1ZSB2
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZywgaW50IG9mZnNldCkgewotICAgICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0RnJvbVNQID0KLSAgICAgICAgICAgICAgICAocmVnLm9mZnNldCgpIC0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9m
ZnNldDsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1
ZSwgVmFsdWVSZXA6OnN0YWNrQXJndW1lbnQob2Zmc2V0RnJvbVNQKSkpOwotICAgICAgICB9Owot
Ci0gICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
Q2FsbGVlKSwgMCk7Ci0gICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50MzIobnVtQXJn
cyksIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgUGF5bG9hZE9mZnNl
dCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCi0gICAg
ICAgICAgICBhZGRBcmd1bWVudChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSArIGkpKSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOwotCi0gICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoYXJndW1lbnRzKTsKLQotICAgICAgICBSZWZQ
dHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAg
ICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKLSAgICAgICAg
Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6
OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5yZXN1
bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0K
LSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZD
YWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gc3RhdGUtPmpp
dENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotCi0gICAg
ICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2lu
ZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotCi0gICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwotCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZv
OjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxs
TGlua0luZm86OkNhbGwsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCku
ZnJhbWVTaXplKCkpLAotICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxp
bmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjayksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
ZmFzdENhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZVRhaWxDYWxsKCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAg
IHVuc2lnbmVkIG51bUFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKLQotICAgICAgICBM
VmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCBCMyB0byBnaXZlIHVzIGFsbCBvZiB0aGUg
YXJndW1lbnRzIHVzaW5nIHdoYXRldmVyIG1lY2hhbmlzbSBpdCB0aGlua3MgaXMKLSAgICAgICAg
Ly8gY29udmVuaWVudC4gVGhlIGdlbmVyYXRvciB0aGVuIHNodWZmbGVzIHRob3NlIGFyZ3VtZW50
cyBpbnRvIG91ciBvd24gY2FsbCBmcmFtZSwKLSAgICAgICAgLy8gZGVzdHJveWluZyBvdXIgZnJh
bWUgaW4gdGhlIHByb2Nlc3MuCi0KLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgZXhjZXB0aW9ucy4gQSB0YWlsIGNhbGwgaXMgb25s
eSBhCi0gICAgICAgIC8vIHRhaWwgY2FsbCBpZiBpdCBpcyBub3QgaW5zaWRlIGEgdHJ5IGJsb2Nr
LgotCi0gICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFZhbHVlPiBhcmd1bWVudHM7Ci0KLSAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OnJlZ1QwKSkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1BcmdzOyArK2kpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IHdlIGNvdWxkIGxldCB0aGUg
c2h1ZmZsZXIgZG8gYm94aW5nIGZvciB1cywgYnV0IGl0J3Mgbm90IHN1cGVyIGNsZWFyIHRoYXQg
dGhpcwotICAgICAgICAgICAgLy8gd291bGQgYmUgYmV0dGVyLiBBbHNvLCBpZiB3ZSB3YW50ZWQg
dG8gZG8gdGhhdCwgdGhlbiB3ZSdkIGhhdmUgdG8gdGVhY2ggdGhlIHNodWZmbGVyCi0gICAgICAg
ICAgICAvLyB0aGF0IDMyLWJpdCB2YWx1ZXMgY291bGQgbGFuZCBhdCA0LWJ5dGUgYWxpZ25tZW50
IGJ1dCBub3QgOC1ieXRlIGFsaWdubWVudC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29u
c3RyYWluZWRWYWx1ZSBjb25zdHJhaW5lZFZhbHVlKAotICAgICAgICAgICAgICAgIGxvd0pTVmFs
dWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIFZh
bHVlUmVwOjpXYXJtQW55KTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3RyYWlu
ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRW
ZWN0b3IoYXJndW1lbnRzKTsKLQotICAgICAgICAvLyBQcmV2ZW50IGFueSBvZiB0aGUgYXJndW1l
bnRzIGZyb20gdXNpbmcgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotCi0g
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdGVsbCB0aGUgcGF0Y2hwb2ludCB0aGF0IHdlIHdp
bGwgY2xvYmJlciByZWdpc3RlcnMsIHNpbmNlIHdlIHdvbid0IHJldHVybgotICAgICAgICAvLyBh
bnl3YXkuCi0KLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2Ny
aXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
LSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0g
c3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4p
OwotCi0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0g
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gc3RhdGUtPmppdENvZGUtPmNv
bW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoR1BSSW5mbzo6cmVnVDAsIERhdGFGb3JtYXRKUyk7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytp
KQotICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSAr
IGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwotCi0gICAgICAgICAg
ICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENh
bGxMaW5rSW5mbygpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xv
d1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKLQotICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
Ci0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
ZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBzbG93UGF0
aC5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAgICAgLy8gWWVzLCB0aGlzIGlzIHJlYWxseSBu
ZWNlc3NhcnkuIFlvdSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaW4gYSBob3N0IGNhbGwgb24g
dGhlCi0gICAgICAgICAgICAgICAgLy8gc2xvdyBwYXRoLiBUaGF0J2xsIHJvdXRlIHVzIHRvIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIoKSwgd2hpY2ggdW53aW5kcyBzdGFydGluZwotICAgICAgICAg
ICAgICAgIC8vIHdpdGggdGhlIGNhbGwgc2l0ZSBpbmRleCBvZiBvdXIgZnJhbWUuIEJhZCB0aGlu
Z3MgaGFwcGVuIGlmIGl0J3Mgbm90IHNldC4KLSAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSk7
Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwotICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIp
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwotCi0gICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwotCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgY29kZU9yaWdpbiwgR1BSSW5mbzo6cmVnVDApOwot
Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBG
dW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdl
dFRvQ2hlY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKLSAgICB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSB0aGlzQXJnID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBqc0Fy
Z3VtZW50cyA9IG51bGxwdHI7Ci0gICAgICAgIGJvb2wgZm9yd2FyZGluZyA9IGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
LSAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgICAgIGZvcndhcmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgImJhZCBub2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKLQotICAgICAgICAvLyBBcHBlbmQgdGhlIGZvcm1zIG9mIHRoZSBhcmd1bWVu
dHMgdGhhdCB3ZSB3aWxsIHVzZSBiZWZvcmUgYW55IGNsb2JiZXJpbmcgaGFwcGVucy4KLSAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJl
Z1QwKSk7Ci0gICAgICAgIGlmIChqc0FyZ3VtZW50cykKLSAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3Rlcihqc0FyZ3VtZW50cyk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3Rlcih0aGlzQXJnKTsKLQotICAgICAgICBpZiAoIWZvcndhcmRpbmcpIHsK
LSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlbSBhZ2FpbiBmb3IgYWZ0ZXIgY2xvYmJlcmlu
Zy4gTm90ZSB0aGF0IHRoZSBjb21waWxlciBtYXkgYXNrIHVzIHRvIHVzZSBhCi0gICAgICAgICAg
ICAvLyBkaWZmZXJlbnQgcmVnaXN0ZXIgZm9yIHRoZSBsYXRlIGZvciB0aGUgcG9zdC1jbG9iYmVy
aW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlLiBUaGlzIGdpdmVzCi0gICAgICAgICAgICAvLyB0aGUg
Y29tcGlsZXIgYSBjaGFuY2UgdG8gc3BpbGwgdGhlc2UgdmFsdWVzIHdpdGhvdXQgaGF2aW5nIHRv
IGJ1cm4gYW55IGNhbGxlZS1zYXZlcy4KLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChq
c0NhbGxlZSwgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChqc0FyZ3VtZW50cywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2Vw
dGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
cGF0Y2hwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKLSAg
ICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG1pbmltdW0gYW1v
dW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpTIGNhbGxzIGFs
d2F5cyBoYXZlLgotICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNpemUgPQotICAg
ICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKLSAgICAgICAgICAgIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKLQotICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShtaW5p
bXVtSlNDYWxsQXJlYVNpemUpOwotICAgICAgICAKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSog
c3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAot
ICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUt
PmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotCi0gICAgICAgICAg
ICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcykt
Pmp1bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxl
RXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7Ci0KLSAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKLQotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICAgICAgICAgICAgICBDYWxsVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gMTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgY2FsbGVl
R1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOwotICAgICAgICAgICAgICAgIEFTU0VSVChj
YWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIEdQUlJlZyBhcmd1
bWVudHNHUFIgPSBqc0FyZ3VtZW50cyA/IHBhcmFtc1thcmdJbmRleCsrXS5ncHIoKSA6IEludmFs
aWRHUFJSZWc7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSBwYXJhbXNbYXJnSW5k
ZXgrK10uZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgY2FsbGVlTGF0ZVJl
cDsKLSAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgYXJndW1lbnRzTGF0ZVJlcDsKLSAgICAg
ICAgICAgICAgICBCMzo6VmFsdWVSZXAgdGhpc0xhdGVSZXA7Ci0gICAgICAgICAgICAgICAgaWYg
KCFmb3J3YXJkaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBmb3J3
YXJkaW5nIHRoZW4gd2UnbGwgbmVlZCBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgYWZ0ZXIg
d2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBwb3RlbnRpYWxseSBjbG9iYmVyZWQgY2Fs
bGVlR1BSLCBhcmd1bWVudHNHUFIsIGFuZCB0aGlzR1BSLiBPdXIgdGVjaG5pcXVlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGZvciB0aGlzIGlzIHRvIHN1cHBseSBhbGwgb2YgdGhvc2Ugb3BlcmFu
ZHMgYXMgbGF0ZSB1c2VzIGluIGFkZGl0aW9uIHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHNw
ZWNpZnlpbmcgdGhlbSBhcyBlYXJseSB1c2VzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhdGUg
dXNlIHVzZXMgYSBzcGlsbAotICAgICAgICAgICAgICAgICAgICAvLyB3aGlsZSB0aGUgZWFybHkg
dXNlIHVzZXMgYSByZWdpc3RlciwgYW5kIGl0J3MgcG9zc2libGUgZm9yIHRoZSBsYXRlIGFuZCBl
YXJseQotICAgICAgICAgICAgICAgICAgICAvLyB1c2VzIHRvIHVzZSBkaWZmZXJlbnQgcmVnaXN0
ZXJzLiBXZSBkbyBrbm93IHRoYXQgdGhlIGxhdGUgdXNlcyBpbnRlcmZlcmUgd2l0aAotICAgICAg
ICAgICAgICAgICAgICAvLyBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzIGFuZCBzbyB3b24ndCB1c2Ug
dGhvc2UsIGJ1dCB0aGUgZWFybHkgdXNlcyBtYXkgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IHZvbGF0aWxlIHJlZ2lzdGVycyBhbmQgaW4gdGhlIGNhc2Ugb2YgY2FsbGVlR1BSLCBpdCdzIHBp
bm5lZCB0byByZWdUMCBzbyBpdAotICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbml0ZWx5IHdp
bGwuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBoYXZlIHRvIGJlIHN1cGVyIGNhcmVmdWwgd2l0aCB0aGVzZS4gSXQncyBwb3NzaWJs
ZSB0aGF0IHRoZXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzZSBhIHNodWZmbGluZyBvZiB0
aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGNhbGxlZUdQUiwgYXJndW1lbnRzR1BSLCBhbmQKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpc0dQUi4gSWYgdGhhdCBoYXBwZW5zIGFuZCB3ZSBkbyBmb3Ig
ZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIGNhbGxlZUxhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOwotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGNhbGxl
ZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRo
ZW4gd2UgbWlnaHQgZW5kIHVwIHdpdGggZ2FyYmFnZSBpZiBjYWxsZWVMYXRlUmVwLmdwcigpID09
IGFyZ3VtZW50c0dQUiBhbmQKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzTGF0ZVJl
cC5ncHIoKSA9PSBjYWxsZWVHUFIuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvIGEgdmFyaWV0eSBvZiB0aGluZ3MgdG8gcHJldmVudCB0aGlzIGZy
b20gaGFwcGVuaW5nLiBGb3IgZXhhbXBsZSwgd2UgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGFyZ3VtZW50c0xhdGVSZXAgYmVmb3JlIG5lZWRpbmcgdGhlIG90aGVyIHR3byBhbmQgYWZ0ZXIg
d2UndmUgYWxyZWFkeSBzdG9wcGVkCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSAq
R1BScy4gQWxzbywgd2UgcGluIGNhbGxlZUdQUiB0byByZWdUMCwgYW5kIHJlbHkgb24gdGhlIGZh
Y3QgdGhhdAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgKkxhdGVSZXBzIGNhbm5vdCB1c2Ug
dm9sYXRpbGUgcmVnaXN0ZXJzIChzbyB0aGV5IGNhbm5vdCBiZSByZWdUMCwgc28KLSAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbGVlR1BSICE9IGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgYW5kIGNh
bGxlZUdQUiAhPSB0aGlzTGF0ZVJlcC5ncHIoKSkuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHdvdWxkIGhhdmUgYmVlbiB0byBq
dXN0IHVzZSBlYXJseSB1c2VzIGFuZCBlYXJseS1jbG9iYmVyIGFsbAotICAgICAgICAgICAgICAg
ICAgICAvLyB2b2xhdGlsZSByZWdpc3RlcnMuIEJ1dCB0aGF0IHdvdWxkIGZvcmNlIGNhbGxlZSwg
YXJndW1lbnRzLCBhbmQgdGhpcyBpbnRvCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZS1z
YXZlIHJlZ2lzdGVycyBldmVuIGlmIHdlIGhhdmUgdG8gc3BpbGwgdGhlbS4gV2UgZG9uJ3Qgd2Fu
dCBzcGlsbGluZyB0bwotICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdXAgdGhyZWUgY2FsbGVl
LXNhdmVzLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBU
TDtEUjogVGhlIHdheSB3ZSB1c2UgTGF0ZVJlcHMgaGVyZSBpcyBkYW5nZXJvdXMgYW5kIGJhcmVs
eSB3b3JrcyBidXQgYWNoaWV2ZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBkZXNpcmFi
bGUgcGVyZm9ybWFuY2UgcHJvcGVydGllcywgc28gZG9uJ3QgbWlzdGFrZSB0aGUgY2xldmVybmVz
cyBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gZWxlZ2FuY2UuCi0gICAgICAgICAgICAgICAg
ICAgIGNhbGxlZUxhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107Ci0gICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0xhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXNMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgICAgICAgICAg
dXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJk
d2FyZVJlZ2lzdGVycygpKTsKLSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0dQ
UiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNl
dChhcmd1bWVudHNHUFIpOwotICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNH
UFIpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsZWVMYXRlUmVwLmlzUmVnKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUxhdGVSZXAucmVnKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNMYXRlUmVwLmlzUmVnKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGFyZ3VtZW50c0xhdGVSZXAucmVnKCkpOwotICAgICAg
ICAgICAgICAgIGlmICh0aGlzTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldCh0aGlzTGF0ZVJlcC5yZWcoKSk7Ci0gICAgICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGZv
cndhcmRpbmcgPyBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCkgOiBJbnZhbGlkR1BSUmVn
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVz
ZWRSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9y
bWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7Ci0gICAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGF1dG8gYWRqdXN0U3RhY2sgPSBbJl0g
KEdQUlJlZyBhbW91bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBhbW91bnQsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnBy
b2MoKS5mcmFtZVNpemUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChmb3J3YXJkaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG9y
aWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJn
c0ZyYW1lRmFzdENhc2Uoaml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgbm9kZS0+Y2hpbGQyKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwotICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhF
eGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0ZvclZhcmFyZ3MpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGFkanVzdFN0YWNrKHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihk
YXRhLT5maXJzdFZhckFyZ09mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFy
YXJncykpOwotCi0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNM
YXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgYXJndW1lbnRzR1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtbWluaW11bUpTQ2FsbEFyZWFTaXplKSwgc2NyYXRjaEdQUjIs
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNjcmF0Y2hHUFIyLCBhcmd1bWVudHNH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGFkanVzdFN0YWNrKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLQotICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVwLmVt
aXRSZXN0b3JlKGppdCwgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWF5IG5vdCBlbWl0IGNvZGUgaWYgdGhpc0dQUiBnb3QgYSBjYWxsZWUtc2F2ZS4gQWxz
bywgd2UncmUgZ3VhcmFudGVlZAotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoaXNHUFIg
IT0gR1BSSW5mbzo6cmVnVDAgYmVjYXVzZSByZWdUMCBpbnRlcmZlcmVzIHdpdGggaXQuCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXNMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgdGhpc0dQUik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0
YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2Fs
bEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxG
b3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OlRhaWxDYWxsVmFyYXJnczsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNh
bGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQot
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGlzVGFpbENhbGwpCi0gICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAotICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRk
cmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2sp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGZhc3RDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCi0gICAgewotICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2Fs
bCgKLSAgICAgICAgICAgIG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6
ZU9mVmFyYXJncyksIG1fY2FsbEZyYW1lLCBqc0FyZ3VtZW50cywKLSAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBw
cm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9p
bnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNw
ZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3
b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3Mg
cmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBu
b1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRp
bmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1h
Y2hpbmVDb3VudCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRp
b24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBw
b2ludGVyIGluc3RlYWQKLSAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxk
bid0IGhhdmUgdG8gZG8gdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTY2MAotICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9v
dXQubFNocigKLSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoMykpOwotICAgICAgICAKLSAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAg
bV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncyksIG1f
Y2FsbEZyYW1lLAotICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwg
anNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAg
IGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKLSAgICB7Ci0gICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSBsZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKS52YWx1ZTsKLSAg
ICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKDEgLSBkYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1
bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAot
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIobGVu
Z3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGlu
ZUNhbGxGcmFtZSk7Ci0gICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5l
ZExvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIHVuZGVmaW5lZCBs
b29wIGJvZHkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG1haW5Mb29wRW50cnkgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIG1haW4gbG9vcCBlbnRyeSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbWFpbkxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRW
YXJhcmdzIG1haW4gbG9vcCBib2R5IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGhBc1B0ciA9IG1fb3V0Lnplcm9FeHRQ
dHIobGVuZ3RoKTsKLSAgICAgICAgTFZhbHVlIGxvb3BCb3VuZFZhbHVlID0gbV9vdXQuY29uc3RJ
bnRQdHIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxv
b3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsb29wQm91bmRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxvb3BCb3VuZFZhbHVlLCBsZW5ndGhBc1B0
ciksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKG1haW5Mb29wRW50cnkpKTsKLSAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5kZWZp
bmVkTG9vcCwgbWFpbkxvb3BFbnRyeSk7Ci0gICAgICAgIExWYWx1ZSBwcmV2aW91c0luZGV4ID0g
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgbG9vcEJvdW5kKTsKLSAgICAgICAgTFZhbHVlIGN1cnJl
bnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBtX291dC5pbnRQdHJPbmUpOwotICAg
ICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAotICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgY3VycmVudEluZGV4KSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihjdXJyZW50SW5kZXgpOwotICAg
ICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGN1cnJlbnRJbmRl
eCwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShtYWluTG9vcEVu
dHJ5KSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtYWluTG9vcEVudHJ5LCBt
YWluTG9vcCk7Ci0gICAgICAgIGxvb3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsZW5ndGhBc1B0cik7
Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxsKGxlbmd0aEFzUHRyKSwgdW5zdXJl
KG1haW5Mb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obWFpbkxvb3AsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHByZXZpb3VzSW5k
ZXggPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBsb29wQm91bmQpOwotICAgICAgICBjdXJyZW50
SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgbV9vdXQuYmFzZUlu
ZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwKLSAg
ICAgICAgICAgICAgICBtX291dC5hZGQoY3VycmVudEluZGV4LCBtX291dC5jb25zdEludFB0cihk
YXRhLT5vZmZzZXQpKSkpOwotICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNl
SW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBjdXJyZW50SW5kZXgpKTsKLSAg
ICAgICAgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1cnJlbnRJbmRleCk7Ci0gICAgICAgIG1f
b3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChjdXJyZW50SW5kZXgpLCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKG1haW5Mb29wKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVKdW1w
KCkKLSAgICB7Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YXJnZXRCbG9j
aygpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJyYW5jaCgpCi0gICAgewotICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkp
LAotICAgICAgICAgICAgV2VpZ2h0ZWRUYXJnZXQoCi0gICAgICAgICAgICAgICAgbG93QmxvY2so
bV9ub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrKSwKLSAgICAgICAgICAgICAgICBtX25v
ZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uY291bnQpLAotICAgICAgICAgICAgV2VpZ2h0ZWRUYXJn
ZXQoCi0gICAgICAgICAgICAgICAgbG93QmxvY2sobV9ub2RlLT5icmFuY2hEYXRhKCktPm5vdFRh
a2VuLmJsb2NrKSwKLSAgICAgICAgICAgICAgICBtX25vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFr
ZW4uY291bnQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlU3dpdGNoKCkKLSAgICB7
Ci0gICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBtX25vZGUtPnN3aXRjaERhdGEoKTsKLSAgICAg
ICAgc3dpdGNoIChkYXRhLT5raW5kKSB7Ci0gICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7Ci0gICAg
ICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGludFZhbHVlczsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHN3aXRjaE9uSW50cyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaEltbSBpbnQgY2FzZSIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhtX291dC5tX2Jsb2NrLCBzd2l0Y2hPbklu
dHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICAg
ICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKHN3aXRjaE9uSW50cyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0lu
dCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaEltbSBpcyBpbnQiKSk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgbm90IGludCIpKTsKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpc0RvdWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaElt
bSBpcyBkb3VibGUiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVl
IGJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGJveGVkVmFsdWUpLCB1bnN1cmUoaXNOb3RJbnQp
LCB1bnN1cmUoaXNJbnQpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbnQsIGlzTm90SW50KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0
LmFuY2hvcih1bmJveEludDMyKGJveGVkVmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
anVtcChzd2l0Y2hPbkludHMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzTm90SW50LCBpc0RvdWJsZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBpc0NlbGxPck1pc2MoYm94ZWRWYWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVzdWFsbHko
bG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgcmFyZWx5KGlzRG91YmxlKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNEb3VibGUs
IGlubmVyTGFzdE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVu
Ym94RG91YmxlKGJveGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBpbnRJbkRvdWJs
ZSA9IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBpbnRW
YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihpbnRJbkRvdWJsZSkpOwotICAgICAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobV9v
dXQuaW50VG9Eb3VibGUoaW50SW5Eb3VibGUpLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAg
ICAgICAgIHVuc3VyZShzd2l0Y2hPbkludHMpLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc3dpdGNoT25JbnRzLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBidWlsZFN3aXRj
aChkYXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1ZXMpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBT
d2l0Y2hDaGFyOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RyaW5nVmFsdWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhlciB0
aGFuIHVuc3VyZSgpIGZvciB0aGUgYnJhbmNoIHdlaWdodAotICAgICAgICAgICAgLy8gb2YgdGhl
IGZhbGxUaHJvdWdoIGJsb2NrLiBUaGUgbWFpbiBjaGFsbGVuZ2UgaXMganVzdCB0aGF0IHdlIGhh
dmUgbXVsdGlwbGUKLSAgICAgICAgICAgIC8vIGJyYW5jaGVzIHRvIGZhbGxUaHJvdWdoIGJ1dCBh
IHNpbmdsZSBjb3VudCwgc28gd2Ugd291bGQgbmVlZCB0byBkaXZ2eSBpdCB1cAotICAgICAgICAg
ICAgLy8gYW1vbmcgdGhlIGRpZmZlcmVudCBsb3dlcmVkIGJyYW5jaGVzLgotICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA4MgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgICAgIHN0cmluZ1Zh
bHVlID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHVuYm94ZWRWYWx1ZSA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3
aXRjaENoYXIgaXMgY2VsbCIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmlu
Z0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIHN0cmlu
ZyIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIGlzTm90Q2VsbCh1bmJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9u
b2RlLT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzQ2VsbENhc2UpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNl
bGxWYWx1ZSA9IHVuYm94ZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIGlzTm90U3RyaW5nKGNlbGxWYWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRh
LT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBjZWxsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGVuZ3RoSXMxID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBsZW5ndGggaXMgMSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5lZWRSZXNvbHV0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTd2l0Y2gvU3dpdGNoQ2hhciByZXNvbHV0aW9uIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgcmVzb2x2ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIHJl
c29sdmVkIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0ID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciA4Yml0IikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXMxNkJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIg
MTZiaXQiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShz
dHJpbmdWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpLAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShsZW5ndGhJczEpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZW5ndGhJ
czEsIG5lZWRSZXNvbHV0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywg
Mj4gdmFsdWVzOwotICAgICAgICAgICAgTFZhbHVlIGZhc3RWYWx1ZSA9IG1fb3V0LmxvYWRQdHIo
c3RyaW5nVmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgdmFsdWVz
LmFwcGVuZChtX291dC5hbmNob3IoZmFzdFZhbHVlKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuaXNOdWxsKGZhc3RWYWx1ZSksIHJhcmVseShuZWVkUmVzb2x1dGlvbiksIHVzdWFs
bHkocmVzb2x2ZWQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bmVlZFJlc29sdXRpb24sIHJlc29sdmVkKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlUm9wZSksIG1fY2FsbEZyYW1lLCBzdHJpbmdWYWx1ZSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAocmVzb2x2ZWQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhyZXNvbHZlZCwgaXM4Qml0KTsKLSAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHZhbHVlcyk7Ci0gICAgICAgICAg
ICBMVmFsdWUgY2hhcmFjdGVyRGF0YSA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuU3Ry
aW5nSW1wbF9kYXRhKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIo
dmFsdWUsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAg
ICAgICAgICAgIHVuc3VyZShpczhCaXQpLCB1bnN1cmUoaXMxNkJpdCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGNoYXJhY3RlcnM7Ci0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOwotICAgICAgICAgICAgY2hh
cmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNoYXJhY3Rl
ckRhdGEsIG1faGVhcHMuY2hhcmFjdGVyczhbMF0pKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGlzMTZCaXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZCht
X291dC5hbmNob3IobV9vdXQubG9hZDE2WmVyb0V4dDMyKGNoYXJhY3RlckRhdGEsIG1faGVhcHMu
Y2hhcmFjdGVyczE2WzBdKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgIGJ1aWxkU3dpdGNoKGRhdGEsIG1fb3V0LmludDMyLCBt
X291dC5waGkobV9vdXQuaW50MzIsIGNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgU3RyaW5nSWRlbnRVc2U6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+
Y2FzZXNbaV0udmFsdWUuc3RyaW5nSW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgYmxvY2sgPSBsb3dCbG9jayhkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwotICAg
ICAgICAgICAgICAgICAgICBXZWlnaHQgd2VpZ2h0ID0gV2VpZ2h0KGRhdGEtPmNhc2VzW2ldLnRh
cmdldC5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNl
KHZhbHVlLCBibG9jaywgd2VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBzdHJpbmdJbXBsLCBjYXNlcywgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gu
YmxvY2spLAotICAgICAgICAgICAgICAgICAgICBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291
bnQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgICAgIHN3
aXRjaFN0cmluZyhkYXRhLCBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3
aXRjaC9Td2l0Y2hTdHJpbmcgVW50eXBlZCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaFN0cmluZyBVbnR5cGVkIHN0cmluZyBjYXNlIikpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdo
LmJsb2NrKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2ssIGlzU3RyaW5nQmxvY2spOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkp
LAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoaXNTdHJpbmdCbG9jayksIHVuc3VyZShsb3dC
bG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Jsb2NrLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoU3RyaW5nKGRhdGEsIHZhbHVlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFN3aXRjaENlbGw6IHsKLSAgICAgICAgICAgIExWYWx1ZSBjZWxsOwotICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICAg
ICAgY2FzZSBDZWxsVXNlOiB7Ci0gICAgICAgICAgICAgICAgY2VsbCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2VsbCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY2VsbENhc2UpLCB1bnN1
cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY2VsbENhc2UpOwotICAgICAgICAgICAgICAgIGNlbGwgPSB2YWx1ZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnVpbGRTd2l0Y2gobV9ub2RlLT5z
d2l0Y2hEYXRhKCksIG1fb3V0LmludFB0ciwgY2VsbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gfQotICAgICAgICAKLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBzd2l0Y2gga2luZCIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVSZXR1cm4o
KQotICAgIHsKLSAgICAgICAgbV9vdXQucmV0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVGb3JjZU9TUkV4aXQoKQotICAgIHsKLSAg
ICAgICAgdGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVRocm93KCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKLSAgICB7
Ci0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7Ci0KLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIG1fb3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciogZGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKG5vVmFsdWUoKSwg
bnVsbHB0cik7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47Ci0gICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhkZXNjcmlwdG9y
LCBvcmlnaW4uZm9yRXhpdCwgbm9WYWx1ZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBTdGF0ZSog
c3RhdGUgPSAmbV9mdGxTdGF0ZTsKLQotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Ci0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgTWFjcm9B
c3NlbWJsZXIga25vd3MgbW9yZSBhYm91dCB0aGlzIHRoYW4gQjMgZG9lcy4gVGhlIHdhdGNocG9p
bnRMYWJlbCgpIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIHdpbGwgZW5zdXJlIHRoYXQgdGhp
cyBpcyBmb2xsb3dlZCBieSBhIG5vcCBzaGFkb3cgYnV0IG9ubHkgd2hlbiB0aGlzIGlzIGFjdHVh
bGx5Ci0gICAgICAgICAgICAgICAgLy8gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6TGFiZWwgbGFiZWwgPSBqaXQud2F0Y2hwb2ludExhYmVsKCk7Ci0KLSAgICAgICAg
ICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gZGVzY3JpcHRvci0+ZW1pdE9T
UkV4aXRMYXRlcigKLSAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBVbmNvdW50YWJsZUludmFs
aWRhdGlvbiwgb3JpZ2luLCBwYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpJVENv
ZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZS5nZXQoKTsKLQotICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKdW1wUmVwbGFjZW1lbnQganVtcFJl
cGxhY2VtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihsYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUt
PmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRzLmFwcGVuZChqdW1wUmVwbGFjZW1lbnQpOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIC8vIFNldCBzb21l
IG9idmlvdXMgdGhpbmdzLgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFsID0g
ZmFsc2U7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IGZh
bHNlOwotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzTG9jYWxTdGF0ZSA9IGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyBob3cgd2UgdGVsbCBCMyBhYm91dCB0aGUg
cG9zc2liaWxpdHkgb2YganVtcCByZXBsYWNlbWVudC4KLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEl0J3Mgbm90
IHBvc3NpYmxlIGZvciBzb21lIHByaW9yIGJyYW5jaCB0byBkZXRlcm1pbmUgdGhlIHNhZmV0eSBv
ZiB0aGlzIG9wZXJhdGlvbi4gSXQncyBhbHdheXMKLSAgICAgICAgLy8gZmluZSB0byBleGVjdXRl
IHRoaXMgb24gc29tZSBwYXRoIHRoYXQgd291bGRuJ3QgaGF2ZSBvcmlnaW5hbGx5IGV4ZWN1dGVk
IGl0IGJlZm9yZQotICAgICAgICAvLyBvcHRpbWl6YXRpb24uCi0gICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMuY29udHJvbERlcGVuZGVudCA9IGZhbHNlOwotCi0gICAgICAgIC8vIElmIHRoaXMg
ZmFsbHMgdGhyb3VnaCB0aGVuIGl0IHdvbid0IHdyaXRlIGFueXRoaW5nLgotICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlcyA9IEhlYXBSYW5nZSgpOwotCi0gICAgICAgIC8vIFdoZW4g
dGhpcyBhYnJ1cHRseSB0ZXJtaW5hdGVzLCBpdCBjb3VsZCByZWFkIGFueSBoZWFwIGxvY2F0aW9u
LgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSXNVbmRlZmluZWQoKQotICAgIHsKLSAgICAg
ICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxD
ZWxsc0FyZUZhbHNlLCBFcXVhbFVuZGVmaW5lZCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVJc0Jvb2xlYW4oKQotICAgIHsKLSAgICAgICAgc2V0Qm9vbGVhbihpc0Jvb2xlYW4obG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJc051bWJlcigpCi0gICAgewotICAgICAg
ICBzZXRCb29sZWFuKGlzTnVtYmVyKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
SXNTdHJpbmcoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzU3RyaW5nIGNlbGwgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc1N0cmlu
ZyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwot
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
c0NlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBjZWxsUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVz
dWx0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSXNPYmplY3QoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVj
dCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3QgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZh
bHNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUo
Y29udGludWF0aW9uKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhpc0NlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJl
c3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKLSAgICB7
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICBFZGdl
IGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShjaGlsZCk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY2VsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
T2JqZWN0T3JOdWxsIG5vdCBmdW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBv
YmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBvYmplY3Qg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIklzT2JqZWN0T3JOdWxsIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBj
ZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1
bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdEZ1bmN0
aW9uQ2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzRnVuY3Rpb25SZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAotICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgb2JqZWN0Q2FzZSk7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdE9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBp
c09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAotICAgICAgICAgICAgdW5zdXJlKG9i
amVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBzbG93UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhvdGljRm9yVHlwZW9mKHZhbHVlLCBwcm92
ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IG5vdENlbGxDYXNlKTsKLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk9iamVjdElzT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgfSwgdmFsdWUpOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdFplcm82NChz
bG93UmVzdWx0VmFsdWUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIExWYWx1ZSBub3RDZWxsUmVzdWx0VmFsdWUgPSBtX291dC5lcXVhbCh2YWx1ZSwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3Iobm90Q2VsbFJlc3VsdFZh
bHVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkoCi0gICAgICAgICAgICBtX291dC5ib29sZWFuLAotICAgICAg
ICAgICAgaXNGdW5jdGlvblJlc3VsdCwgbm90T2JqZWN0UmVzdWx0LCBvYmplY3RSZXN1bHQsIHNs
b3dSZXN1bHQsIG5vdENlbGxSZXN1bHQpOwotICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgY2hpbGQgPSBt
X25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxk
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJJc0Z1bmN0aW9uIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIG5vdCBm
dW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjb250
aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1
cmUoY2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlv
bkNhc2UpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmdW5jdGlvblJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIHNsb3dQYXRoKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xl
YW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhvdGljRm9y
VHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICByYXJlbHkoc2xv
d1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAg
fSwgdmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0Lm5vdE51bGwoc2xvd1Jlc3VsdFZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAotICAg
ICAgICAgICAgbV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgZnVuY3Rpb25SZXN1bHQsIG9i
amVjdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVHlwZU9mKCkKLSAgICB7Ci0gICAgICAgIEVkZ2Ug
Y2hpbGQgPSBtX25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKGNoaWxkKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVHlwZU9mIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIGJ1aWxkVHlwZU9mKAotICAgICAgICAgICAgY2hpbGQsIHZh
bHVlLAotICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIodm0oKS5zbWFsbFN0cmlu
Z3MudHlwZVN0cmluZyh0eXBlKSkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJ
bigpCi0gICAgewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICBFZGdlIGJh
c2UgPSBub2RlLT5jaGlsZDIoKTsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKGJhc2Up
OwotICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWlj
Q2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkgewotICAgICAgICAgICAgaWYgKHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkg
ewotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBzdHIgPSBiaXR3aXNlX2Nhc3Q8
VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpKTsKLSAgICAgICAg
ICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2lu
dChJbnQ2NCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGNlbGwpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAgICAgICAgICAgICAgIFN0YXRlKiBzdGF0
ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcGFyYW1zWzBdLmdwcigp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+YWRkU3R1Yklu
Zm8oQWNjZXNzVHlwZTo6SW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXggPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50
aWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0
YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1
bXAubV9qdW1wLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgbnVsbHB0ciwgb3BlcmF0
aW9uSW5PcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihzdHIpKS5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5q
dW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHNsb3dQYXRoQ2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9K
dW1wID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoanVtcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZihzbG93UGF0aEJlZ2luKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAKLQotICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkdlbmVyaWNJbiksIG1fY2FsbEZyYW1lLCBjZWxsLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoKQot
ICAgIHsKLSAgICAgICAgSlNGdW5jdGlvbiogZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0KLSAg
ICAgICAgTFZhbHVlIGNvbnN0cnVjdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGhhc0luc3RhbmNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBkZWZhdWx0SGFzSW5zdGFuY2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNlIFN5bWJvbC5oYXNJbnN0YW5jZSBpcyBkZWZh
dWx0IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNlIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAg
ICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgY2xlYW5pbmcgdGhp
cyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHByb3ZlbiB0aGUgaGFzSW5zdGFu
Y2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIExMVk0gc2hvdWxkIGZpeCBpdCBmb3IgdXMuCi0KLSAg
ICAgICAgQVNTRVJUKCFtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+aXNDZWxsQ29uc3RhbnQoKSB8
fCBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9PSBtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+
YXNDZWxsKCkpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdERlZmF1bHRIYXNJbnN0YW5j
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3RFcXVhbChoYXNJbnN0YW5jZSwgbV9vdXQuY29uc3RJbnRQdHIoZGVm
YXVsdEhhc0luc3RhbmNlRnVuY3Rpb24pKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShk
ZWZhdWx0SGFzSW5zdGFuY2UpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGRlZmF1bHRIYXNJbnN0YW5jZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICBtX291dC5sb2FkOFplcm9F
eHQzMihjb25zdHJ1Y3RvciwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGko
bV9vdXQuYm9vbGVhbiwgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCwgbm90RGVm
YXVsdEhhc0luc3RhbmNlUmVzdWx0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hlY2tU
eXBlSW5mb0ZsYWdzKCkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJh
ZFR5cGVJbmZvRmxhZ3MsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LnRlc3RJc1pl
cm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG1fbm9kZS0+dHlwZUluZm9PcGVyYW5kKCkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGNlbGw7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgIGNlbGwgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjZWxsID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBwcm90b3R5cGUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjZWxsIGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkluc3Rh
bmNlT2YgbG9vcCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90WWV0SW5zdGFuY2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkluc3RhbmNlT2Ygbm90IHlldCBpbnN0YW5jZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0
YW5jZU9mIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjb25kaXRp
b247Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KQotICAgICAgICAgICAgY29uZGl0aW9uID0gaXNDZWxsKGNlbGwsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb24gPSBtX291
dC5ib29sZWFuVHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKGNvbmRpdGlvbiwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGxvb3ApOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIG5vVmFsdWUoKSwgMCwgaXNOb3RPYmplY3QocHJvdG90eXBlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5h
bFZhbHVlID0gbV9vdXQuYW5jaG9yKGNlbGwpOwotICAgICAgICBtX291dC5qdW1wKGxvb3ApOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcCwgbm90WWV0SW5zdGFuY2UpOwot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50NjQsIG9yaWdpbmFsVmFs
dWUpOwotICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZSh2YWx1ZSk7Ci0g
ICAgICAgIExWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9vdXQubG9hZDY0KHN0cnVjdHVyZSwg
bV9oZWFwcy5TdHJ1Y3R1cmVfcHJvdG90eXBlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNJ
bnN0YW5jZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKGN1cnJlbnRQcm90b3R5cGUs
IHByb3RvdHlwZSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5v
dFlldEluc3RhbmNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RZZXRJ
bnN0YW5jZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90SW5zdGFu
Y2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9v
dXQuYWRkSW5jb21pbmdUb1BoaSh2YWx1ZSwgbV9vdXQuYW5jaG9yKGN1cnJlbnRQcm90b3R5cGUp
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChjdXJyZW50UHJvdG90eXBlKSwgdW5zdXJl
KGxvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbigKLSAg
ICAgICAgICAgIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBpc0luc3Rh
bmNlUmVzdWx0LCBub3RJbnN0YW5jZVJlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUluc3RhbmNlT2ZDdXN0b20oKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGNvbnN0cnVjdG9yID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgTFZhbHVlIGhhc0luc3RhbmNlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lmxv
Z2ljYWxOb3QobV9vdXQuZXF1YWwobV9vdXQuY29uc3RJbnQzMigwKSwgdm1DYWxsKG1fb3V0Lmlu
dDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSksIG1fY2FsbEZy
YW1lLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhhc0luc3RhbmNlKSkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlQ291bnRFeGVjdXRpb24oKQotICAgIHsKLSAgICAgICAgVHlwZWRQb2lu
dGVyIGNvdW50ZXIgPSBtX291dC5hYnNvbHV0ZShtX25vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKS0+
YWRkcmVzcygpKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5hZGQobV9vdXQubG9hZDY0
KGNvdW50ZXIpLCBtX291dC5jb25zdEludDY0KDEpKSwgY291bnRlcik7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCi0gICAgewotICAgICAgICBlbWl0U3RvcmVC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0
SGVhcCYgaGVhcCA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/
Ci0gICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFw
cy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7Ci0KLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNoZWNrSG9sZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGlu
dC9jb250aWd1b3VzIGNoZWNrIGhvbGUiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGludC9jb250
aWd1b3VzIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGludC9jb250aWd1
b3VzIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCkpLAotICAgICAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGNoZWNrSG9sZSkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjaGVja0hvbGUpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrSG9sZSwgc2xvd0Nhc2UpOwotICAgICAgICAgICAg
TFZhbHVlIGNoZWNrSG9sZVJlc3VsdFZhbHVlID0KLSAgICAgICAgICAgICAgICBtX291dC5ub3Ra
ZXJvNjQobV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2Rl
LT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoZWNrSG9sZVJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291
dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dDYXNlKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOwotICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJv
b2xlYW4sIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFs
dWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWRE
b3VibGVQcm9wZXJ0aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBj
aGVja0hvbGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3Vi
bGUgY2hlY2sgaG9sZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIHNsb3cgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGRvdWJsZSBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpKSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVj
a0hvbGUpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y2hlY2tIb2xlKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhjaGVja0hvbGUsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVW
YWx1ZSA9IG1fb3V0LmxvYWREb3VibGUoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBt
X25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICBMVmFsdWUgY2hlY2tIb2xlUmVzdWx0VmFs
dWUgPSBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUpOwotICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY2hlY2tIb2xlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNoZWNr
SG9sZVJlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChjaGVja0hvbGVSZXN1
bHRWYWx1ZSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQu
aW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5KSk7
Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoKQotICAgIHsK
LSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAg
ICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKLQotICAg
ICAgICBMQmFzaWNCbG9jayBjb3JyZWN0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSBjb3JyZWN0IHN0cnVjdHVyZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgd3JvbmdTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc1N0cnVj
dHVyZVByb3BlcnR5IHdyb25nIHN0cnVjdHVyZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAot
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5
KHdyb25nU3RydWN0dXJlKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7Ci0KLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjb3JyZWN0U3RydWN0dXJlLCB3
cm9uZ1N0cnVjdHVyZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvcnJlY3RTdHJ1Y3R1cmVS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8od3JvbmdTdHJ1Y3R1
cmUsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHdyb25nU3RydWN0dXJl
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0
eSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShtX291dC5ib29sZWFuLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCB3cm9uZ1N0cnVj
dHVyZVJlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldERpcmVjdFBuYW1lKCkK
LSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwotCi0gICAgICAg
IExCYXNpY0Jsb2NrIGNoZWNrT2Zmc2V0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJl
Y3RQbmFtZSBjaGVjayBvZmZzZXQiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIGlubGluZSBsb2FkIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXREaXJlY3RQbmFtZSBvdXQtb2YtbGluZSBsb2FkIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgc2xvdyBj
YXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVy
ZUlEKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNoZWNrT2Zmc2V0
KSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVj
a09mZnNldCwgaW5saW5lTG9hZCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZU9y
RXF1YWwoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpLAotICAgICAgICAgICAgdW5zdXJl
KG91dE9mTGluZUxvYWQpLCB1bnN1cmUoaW5saW5lTG9hZCkpOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlubGluZUxvYWQsIG91dE9mTGluZUxvYWQpOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBpbmxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkNjQo
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCAKLSAgICAg
ICAgICAgICAgICBiYXNlLCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnQ2NCksIFNjYWxl
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSkpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mTGlu
ZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5
UmVhZE9ubHkoYmFzZSk7Ci0gICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0
MzJUbzY0KAotICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElu
bGluZUNhcGFjaXR5KSkpKTsKLSAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
b3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0
KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgc3RvcmFn
ZSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpKSk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0Nhc2VS
ZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9w
ZXJ0eSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludDY0LCBpbmxpbmVSZXN1bHQsIG91dE9mTGluZVJlc3VsdCwgc2xv
d0Nhc2VSZXN1bHQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVu
Z3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0
eUVudW1lcmF0b3IpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOwotICAgIH0KLQotICAgIHZvaWQgY29t
cGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUg
ZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGluQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWUgaW4gYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIG91dCBvZiBi
b3VuZHMiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGNvbnRpbnVhdGlvbiIpKTsK
LQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3coaW5kZXgsIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91
dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1f
b3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91
bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291
dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KFZhbHVl
TnVsbCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5k
c1Jlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSBpbiBib3VuZHMiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lIG91dCBvZiBib3VuZHMiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJl
bG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSwKLSAgICAgICAgICAgIHVzdWFs
bHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsKLQotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAg
ICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAg
ICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1f
b3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5C
b3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVRvSW5kZXhTdHJpbmcoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0
LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZy
YW1lLCBpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0g
ICAgICAgICAgICBbdGhpc10gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0pOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpCi0gICAgewot
ICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBMb3dlciB0aGUgdmFs
dWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93
IGRpYW1vbmQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCA9IG1fbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0gICAgICAgIAotICAgICAgICBW
ZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVO
ZXdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
ZXQuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtT
dHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpOwotICAgICAgICBtX291dC5z
d2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKLSAgICAgICAg
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsK
LSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8g
YmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUgb2JqZWN0OwotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBzbG93
IHBhdGgiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBh
bGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShz
bG93UGF0aCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9m
U3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1f
b3V0LmFkZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOwotICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFz
dEJ1dHRlcmZseVZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd09iamVj
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0
aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09i
amVjdCA9IG1fb3V0LmFuY2hvcihzbG93T2JqZWN0VmFsdWUpOwotICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd09iamVjdFZhbHVlLCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBvYmplY3QgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0T2JqZWN0LCBz
bG93T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGVhc3kgY2FzZSB3aGVyZSB3ZSBjYW4gZG8g
YSBvbmUtc2hvdCBhbGxvY2F0aW9uLCB3ZSBzaW1wbHkgYWxsb2NhdGUgdGhlCi0gICAgICAgICAg
ICAgICAgLy8gb2JqZWN0IHRvIGRpcmVjdGx5IGhhdmUgdGhlIGRlc2lyZWQgc3RydWN0dXJlLgot
ICAgICAgICAgICAgICAgIG9iamVjdCA9IGFsbG9jYXRlT2JqZWN0KHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbnVsbHB0cjsgLy8gRG9uJ3QgaGF2ZSBvbmUsIGRvbid0
IG5lZWQgb25lLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJy
ZW50bHkoKSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9w
ZXJ0aWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBQaGFudG9tUHJvcGVy
dHlWYWx1ZSB2YWx1ZSA9IGRhdGEubV9wcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pZGVudGlmaWVycygpW3ZhbHVlLm1faWRlbnRpZmllck51bWJlcl0gIT0g
ZW50cnkua2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGlzSW5saW5lT2Zm
c2V0KGVudHJ5Lm9mZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3JlUHJvcGVydHkodmFsdWVzW2ldLCBiYXNlLCB2YWx1ZS5tX2lkZW50aWZpZXJOdW1i
ZXIsIGVudHJ5Lm9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKG9iamVjdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChv
dXRlckNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGR1bW15RGVmYXVsdCwgb3V0ZXJDb250aW51YXRpb24pOwotICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0ZXJDb250
aW51YXRpb24sIG91dGVyTGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIHJlc3VsdHMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVNYXRlcmlh
bGl6ZUNyZWF0ZUFjdGl2YXRpb24oKQotICAgIHsKLSAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOwotCi0g
ICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyICsgaSkp
KTsKLQotICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+Y2FzdE9w
ZXJhbmQ8U3ltYm9sVGFibGUqPigpOwotICAgICAgICBBU1NFUlQodGFibGUgPT0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApLT5jYXN0Q29uc3RhbnQ8U3ltYm9sVGFibGUqPigpKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKLQotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVD
cmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b24gY29udGludWF0aW9uIikpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLQotICAgICAgICBMVmFsdWUgZmFz
dE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAgICAg
ICAgIEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVy
ZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotCi0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4dCk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1N5bWJv
bFRhYmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKLQotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgLy8gV2UgZW5zdXJlIGFsbG9jYXRpb24gc2lua2luZyBleHBsaWN0
bHkgc2V0cyBib3R0b20gdmFsdWVzIGZvciBhbGwgZmllbGQgbWVtYmVycy4gCi0gICAgICAgIC8v
IFRoZXJlZm9yZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBKU1ZhbHVlIHdlIHBhc3MgaW4gYXMg
dGhlIGluaXRpYWxpemF0aW9uIHZhbHVlCi0gICAgICAgIC8vIGJlY2F1c2UgYWxsIGZpZWxkcyB3
aWxsIGJlIG92ZXJ3cml0dGVuLgotICAgICAgICAvLyBGSVhNRTogSXQgbWF5IGJlIHdvcnRoIGNy
ZWF0aW5nIGFuIG9wZXJhdGlvbiB0aGF0IGNhbGxzIGEgY29uc3RydWN0b3Igb24gSlNMZXhpY2Fs
RW52aXJvbm1lbnQgdGhhdCAKLSAgICAgICAgLy8gZG9lc24ndCBpbml0aWFsaXplIGV2ZXJ5IHNs
b3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBkbyB0aGF0IGhlcmUuCi0gICAgICAgIExW
YWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpKTsKLSAgICAgICAgICAgIH0sIHNjb3BlKTsKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9ICBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgTFZhbHVlIGFjdGl2YXRpb24gPSBtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpID09IHRhYmxlLT5zY29wZVNpemUo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZXNbaV0sCi0gICAg
ICAgICAgICAgICAgYWN0aXZhdGlvbiwKLSAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJv
bm1lbnRSZWNvcmRfdmFyaWFibGVzW2RhdGEubV9wcm9wZXJ0aWVzW2ldLm1faWRlbnRpZmllck51
bWJlcl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRvIG1ha2Ugc3VyZSBldmVyeSBzbG90IGluIHRoZSBz
Y29wZSBoYXMgb25lIHZhbHVlLgotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIodGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5i
ZWdpbihsb2NrZXIpLCBlbmQgPSB0YWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5zY29wZU9mZnNldCgpLm9m
ZnNldCgpID09IGRhdGEubV9wcm9wZXJ0aWVzW2ldLm1faWRlbnRpZmllck51bWJlcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShhY3RpdmF0aW9uKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbXBpbGVDaGVja1dhdGNoZG9nVGltZXIoKQotICAgIHsKLSAgICAgICAgTEJhc2lj
QmxvY2sgdGltZXJEaWRGaXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1dhdGNoZG9n
VGltZXIgdGltZXIgZGlkIGZpcmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKG1fb3V0LmFic29sdXRlKHZtKCkud2F0Y2hkb2coKS0+dGltZXJEaWRGaXJlQWRkcmVzcygp
KSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihzdGF0ZSksCi0gICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseSh0aW1lckRpZEZpcmUpKTsKLQotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHRpbWVyRGlkRmlyZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0g
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iob3Bl
cmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciwgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGRpZE92ZXJmbG93U3RhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBkb2VzIGEgdmVy
eSBzaW1wbGUgbGVhZiBmdW5jdGlvbiBhbmFseXNpcy4gVGhlIGludmFyaWFudCBvZiBGVEwgY2Fs
bAotICAgICAgICAvLyBmcmFtZXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhZCBhbHJlYWR5IGRvbmUg
ZW5vdWdoIG9mIGEgc3RhY2sgY2hlY2sgdG8KLSAgICAgICAgLy8gcHJvdmUgdGhhdCB0aGlzIGNh
bGwgZnJhbWUgaGFzIGVub3VnaCBzdGFjayB0byBydW4sIGFuZCBhbHNvIGVub3VnaCBzdGFjawot
ICAgICAgICAvLyB0byBtYWtlIHJ1bnRpbWUgY2FsbHMuIFNvLCB3ZSBvbmx5IG5lZWQgdG8gc3Rh
Y2sgY2hlY2sgd2hlbiBtYWtpbmcgY2FsbHMKLSAgICAgICAgLy8gdG8gb3RoZXIgSlMgZnVuY3Rp
b25zLiBJZiB3ZSBkb24ndCBmaW5kIHN1Y2ggY2FsbHMgdGhlbiB3ZSBkb24ndCBuZWVkIHRvCi0g
ICAgICAgIC8vIGRvIGFueSBzdGFjayBjaGVja3MuCi0gICAgICAgIAotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkOgotICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAg
ICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5iZWxvdygKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hYnNvbHV0ZSh2bSgpLmFkZHJlc3NP
ZkZUTFN0YWNrTGltaXQoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQuYm9vbGVhbkZhbHNlOwotICAgIH0KLSAgICAKLSAgICBzdHJ1Y3QgQXJndW1lbnRzTGVuZ3Ro
IHsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoKCkKLSAgICAgICAgICAgIDogaXNLbm93bihmYWxz
ZSkKLSAgICAgICAgICAgICwga25vd24oVUlOVF9NQVgpCi0gICAgICAgICAgICAsIHZhbHVlKG51
bGxwdHIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0tu
b3duOwotICAgICAgICB1bnNpZ25lZCBrbm93bjsKLSAgICAgICAgTFZhbHVlIHZhbHVlOwotICAg
IH07Ci0gICAgQXJndW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5n
dGg7Ci0KLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gdHJ1
ZTsKLSAgICAgICAgICAgIGxlbmd0aC52YWx1ZSA9IG1fb3V0LmNvbnN0SW50MzIobGVuZ3RoLmtu
b3duKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlbmd0aC5rbm93biA9IFVJTlRf
TUFYOwotICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAgICAgICAgIGxlbmd0
aC52YWx1ZSA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50
UmVnaXN0ZXIpKSwgbV9vdXQuaW50MzJPbmUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICBBcmd1bWVudHNMZW5ndGggZ2V0QXJn
dW1lbnRzTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRBcmd1bWVudHNMZW5ndGgo
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGdldEN1cnJlbnRDYWxsZWUoKQotICAgIHsKLSAgICAgICAgaWYgKElubGluZUNh
bGxGcmFtZSogZnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUp
IHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKGZyYW1l
LT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKEpTU3RhY2s6OkNhbGxlZSkpOwotICAg
IH0KLSAgICAKLSAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBB
c3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKHN0YXJ0KS52YWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICBMVmFs
dWUgZ2V0QXJndW1lbnRzU3RhcnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50
c1N0YXJ0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgfQot
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjaGVja1N0cnVj
dHVyZSgKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZURpc2NyaW1pbmFudCwgY29uc3QgRm9ybWF0
dGVkVmFsdWUmIGZvcm1hdHRlZFZhbHVlLCBFeGl0S2luZCBleGl0S2luZCwKLSAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQsIGNvbnN0IEZ1bmN0b3ImIHdlYWtTdHJ1Y3R1cmVEaXNjcmlt
aW5hbnQpCi0gICAgewotICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
dGVybWluYXRlKGV4aXRLaW5kKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzZXQuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAsCi0gICAgICAgICAgICAg
ICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3ZWFrU3RydWN0dXJlRGlz
Y3JpbWluYW50KHNldFswXSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250
aW51YXRpb24pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAt
IDE7ICsraSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1
cmVEaXNjcmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVEaXNjcmltaW5hbnQoc2V0W2ldKSksCi0gICAg
ICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1h
dHRlZFZhbHVlLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlRGlzY3Jp
bWluYW50LCB3ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KHNldC5sYXN0KCkpKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbnVt
YmVyT3JOb3RDZWxsVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9J
bnQzMiBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90SW50Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIG5vdCBpbnQgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IDA7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdE51bWJl
ckNhc2UgPSAwOwotICAgICAgICBpZiAoZWRnZS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZSkgewot
ICAgICAgICAgICAgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0lu
dDMyIGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgbm90TnVtYmVyQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIG5vdCBudW1iZXIgY2FzZSIpKTsKLSAgICAgICAg
fQotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlZhbHVlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFu
Y2goaXNOb3RJbnQzMih2YWx1ZSksIHVuc3VyZShub3RJbnRDYXNlKSwgdW5zdXJlKGludENhc2Up
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgbm90SW50Q2FzZSk7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcih1bmJveEludDMyKHZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBpZiAoZWRnZS51c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnRDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyLCBpc0NlbGxPck1pc2ModmFsdWUpKTsKLSAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihkb3VibGVUb0ludDMyKHVuYm94RG91YmxlKHZhbHVlKSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEludENhc2UsIGRvdWJsZUNhc2UpOwot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShub3ROdW1iZXJDYXNlKSwgdW5zdXJlKGRv
dWJsZUNhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91
YmxlQ2FzZSwgbm90TnVtYmVyQ2FzZSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3IoZG91YmxlVG9JbnQzMih1bmJveERvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdE51bWJlckNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIH5T
cGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1
ZSBzcGVjaWFsUmVzdWx0ID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAgICAgICAgIG1fb3V0LmVx
dWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUsIG1fb3V0LmludDMyWmVybyk7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Ioc3BlY2lhbFJlc3VsdCkp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cyk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBj
YW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2UgaXQgaXMgY2Fs
bGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKLSAgICAgICAgLy8KLSAgICAgICAgLy8gbWF5IGJl
IGxvd2VyZWQgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBzd2l0Y2ggKG9iamVjdC0+
c3RydWN0dXJlKSB7Ci0gICAgICAgIC8vICAgICBjYXNlIDQyOgotICAgICAgICAvLyAgICAgICAg
IGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOwotICAgICAgICAvLyAgICAgICAgIC4uLgot
ICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyAgICAgY2FzZSA0MzoKLSAgICAg
ICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKLSAgICAgICAgLy8g
ICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFyZSBkaWZmZXJl
bnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3b3VsZCBiZQot
ICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9mIHR5cGUxIHwg
dHlwZTIuCi0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7Ci0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVh
bjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3ROdW1iZXIo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6U3ltYm9sOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RTeW1ib2wodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0
cnVjdHVyZSgpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsK
LSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2Vs
bCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2Vs
bENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwotCi0gICAgICAgICAgICBpZiAoIWFic3RyYWN0
VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2VsbCkpOwotCi0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdE9yT3RoZXI6IHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNlbGwg
Y2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIG5vdCBjZWxsIGNh
c2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY29udGludWF0aW9u
IikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5v
dENlbGxDYXNlKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAg
IGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKLQotICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkgJiB+U3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpUb3A6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGxvYWRQcm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmxvYWQ2NChhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVy
LCBvZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdG9yZVByb3BlcnR5KAotICAgICAg
ICBMVmFsdWUgdmFsdWUsIExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTY0KHZh
bHVlLCBhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQp
KTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NPZlByb3BlcnR5KAotICAg
ICAgICBMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoCi0gICAg
ICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbaWRlbnRpZmllck51bWJlcl0sIHN0b3JhZ2UsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc3Rv
cmFnZUZvclRyYW5zaXRpb24oCi0gICAgICAgIExWYWx1ZSBvYmplY3QsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKLSAgICAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXh0U3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAKLSAgICAgICAgaWYgKHBy
ZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhC
YXJyaWVyKG9iamVjdCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAg
ICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBwcmV2aW91c1N0cnVj
dHVyZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBvYmplY3QsIGxvYWRCdXR0ZXJmbHlXaXRo
QmFycmllcihvYmplY3QpLAotICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0
U3RydWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZW1pdFN0b3JlQmFycmll
cihvYmplY3QpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFN0cnVj
dHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBpZiAocHJldmlvdXNTdHJ1
Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB2
bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50UHRyLAotICAgICAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAotICAgICAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwo
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0
LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Ci0gICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCi0gICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAotCi0gICAgICAgIEFTU0VSVF9VTlVT
RUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAg
ICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUp
OyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1fb3V0Lmlu
dFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoU2l6ZUltcGwobmV3U2l6ZSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRl
clNpemUgPSAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIHNpemVvZih2b2lkKik7Ci0gICAgICAg
IHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4ob2xkU2l6ZSAqIHNpemVvZihKU1ZhbHVlKSk7Ci0KLSAgICAgICAgZm9yIChwdHJkaWZmX3Qg
b2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVv
Zih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKLSAgICAgICAgICAgICAg
ICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVt
YmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBy
ZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKHNpemVfdCBzaXpl
SW5WYWx1ZXMpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgc2xvdyBw
YXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBl
bmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQ
YXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc2xv
d0J1dHRlcmZseVZhbHVlOwotICAgICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSkgewotICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gbGF6eVNs
b3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNsb3dC
dXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVy
YXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZUluVmFsdWVzKSk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZs
eSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5VmFsdWUpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAg
fQotICAgIAotICAgIExWYWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNlKQotICAgIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotCi0gICAgICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0
KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2UpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgR2V0QnlJZEZsdXNoLCB3ZSBtaWdodCBnZXQgc29t
ZSBwZXJmb3JtYW5jZSBib29zdCBpZiB3ZSBjbGFpbSB0aGF0IGl0Ci0gICAgICAgIC8vIGNsb2Ji
ZXJzIHZvbGF0aWxlIHJlZ2lzdGVycyBsYXRlLiBJdCdzIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJl
Y3RuZXNzLCB0aG91Z2gsIHNpbmNlIHRoZQotICAgICAgICAvLyBJQyBjb2RlIGlzIHN1cGVyIHNt
YXJ0IGFib3V0IHNhdmluZyByZWdpc3RlcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4NDgKLSAgICAgICAgCi0gICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
LSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
LQotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAg
ICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKLQotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpcmVj
dCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNhbGxzLgotICAgICAgICAgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQp
OwotCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNy
ZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKLSAgICAgICAg
ICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2lu
Y2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAotICAgICAgICAgICAgICAgIC8vIHRo
ZSBjYWxsc2l0ZSBpbmRleC4KLSAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVk
dWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2FsbFNpdGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksCi0gICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSkpOwotCi0gICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAgICAgICAg
ICBwYXJhbXMuYWRkTGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVsKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFt
cy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHBhcmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgcGFy
YW1zWzFdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5yZXBvcnRTbG93UGF0aENhbGwoc2xvd1BhdGhCZWdpbiwgc2xvd1BhdGhDYWxsKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmZpbmFsaXplKGxpbmtCdWZmZXIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBwYXRjaHBvaW50OwotICAgIH0KLQot
ICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIG9iamVjdCwgbV9vdXQu
bG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwgb3BlcmF0aW9uR2V0
QnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvYWRWZWN0b3JXaXRoQmFycmll
cihMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9
IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7
Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIGZhc3RSZXN1bHRWYWx1
ZSwKLSAgICAgICAgICAgIFsmXSAoKSAtPiBMVmFsdWUgewotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yV2l0aEJh
cnJpZXIgc2xvdyBwYXRoIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIGNvbnRp
bnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3RvciwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0sIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAg
ICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIExWYWx1ZSBjb3B5QmFycmllcihMVmFsdWUgb2Jq
ZWN0LCBMVmFsdWUgcG9pbnRlciwgUF9KSVRPcGVyYXRpb25fRUMgc2xvd1BhdGhGdW5jdGlvbikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIHBvaW50ZXIs
Ci0gICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhGdW5jdGlvbiwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9LCBvYmplY3QpOwotICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIHBvaW50ZXIs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY29weUJhcnJpZXIgc2xvdyBwYXRoIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNvcHlCYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHBvaW50ZXIpOwotICAgICAgICBtX291dC5icmFuY2go
aXNJblRvU3BhY2UocG9pbnRlciksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQ
YXRoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGZ1bmN0b3IoKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpOwotICAgIH0KLQotICAgIExWYWx1ZSBpc0luVG9TcGFjZShMVmFsdWUgcG9pbnRl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvUHRyKHBvaW50ZXIsIG1f
b3V0LmNvbnN0SW50UHRyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7Ci0gICAgfQotCi0g
ICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlSZWFkT25seShMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlbW92ZVNwYWNlQml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZFZlY3RvclJl
YWRPbmx5KExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZh
bHVlID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVj
dG9yKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBwb3NzaWJseUZyb21TcGFjZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgibG9hZFZlY3RvclJlYWRPbmx5IHBvc3NpYmx5IGZyb20gc3BhY2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgibG9hZFZlY3RvclJlYWRPbmx5IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0KLSAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHBvc3NpYmx5RnJvbVNwYWNlKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhwb3NzaWJseUZyb21TcGFjZSwgY29u
dGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbV9vdXQuc2Vs
ZWN0KAotICAgICAgICAgICAgaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByZW1vdmVTcGFjZUJp
dHMoZmFzdFJlc3VsdFZhbHVlKSwgZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHJlbW92ZVNwYWNlQml0cyhMVmFsdWUgc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBzdG9yYWdlLCBtX291dC5jb25zdEludFB0cih+
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSkpOwotICAg
IH0KLQotICAgIExWYWx1ZSBpc0Zhc3RUeXBlZEFycmF5KExWYWx1ZSBvYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIob2Jq
ZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihGYXN0VHlwZWRBcnJheSkpOwotICAgIH0KLSAgICAKLSAgICBUeXBlZFBvaW50
ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBM
VmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCksIHByb3ZlblZhbHVlKGVkZ2UpLCBvZmZzZXQpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludEZ1bmN0b3IsIHR5cGVuYW1lIERvdWJsZUZ1
bmN0b3I+Ci0gICAgdm9pZCBjb21wYXJlKAotICAgICAgICBjb25zdCBJbnRGdW5jdG9yJiBpbnRG
dW5jdG9yLCBjb25zdCBEb3VibGVGdW5jdG9yJiBkb3VibGVGdW5jdG9yLAotICAgICAgICBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi0gICAgewotICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKGludEZ1
bmN0b3IobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDUyUmVwVXNlKSkg
ewotICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwga2luZCk7Ci0gICAgICAg
ICAgICBzZXRCb29sZWFuKGludEZ1bmN0b3IobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKERvdWJsZVJlcFVzZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihkb3VibGVGdW5j
dG9yKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewot
ICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKGludEZ1bmN0b3IsIGhlbHBlckZ1bmN0
aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QoRWRnZSBsZWZ0Q2hpbGQs
IEVkZ2UgcmlnaHRDaGlsZCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByaWdodENlbGwgPSBsb3dD
ZWxsKHJpZ2h0Q2hpbGQpOwotICAgICAgICBMVmFsdWUgbGVmdFZhbHVlID0gbG93SlNWYWx1ZShs
ZWZ0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBz
cGVjdWxhdGVUcnV0aHlPYmplY3QocmlnaHRDaGlsZCwgcmlnaHRDZWxsLCBTcGVjT2JqZWN0KTsK
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGxlZnQgY2VsbCBjYXNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBsZWZ0Tm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCBsZWZ0IG5vdCBjZWxsIGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbChsZWZ0
VmFsdWUsIHByb3ZlblR5cGUobGVmdENoaWxkKSksCi0gICAgICAgICAgICB1bnN1cmUobGVmdENl
bGxDYXNlKSwgdW5zdXJlKGxlZnROb3RDZWxsQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZWZ0Q2VsbENhc2UsIGxlZnROb3RD
ZWxsQ2FzZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVRydXRoeU9iamVjdChsZWZ0Q2hpbGQsIGxlZnRW
YWx1ZSwgU3BlY09iamVjdCB8ICh+U3BlY0NlbGwpKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
Y2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbChyaWdodENlbGwsIGxlZnRWYWx1
ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhsZWZ0Tm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKGxlZnRWYWx1ZSksIGxl
ZnRDaGlsZCwgU3BlY090aGVyIHwgU3BlY0NlbGwsIGlzTm90T3RoZXIobGVmdFZhbHVlKSk7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
Ym9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNlbGxSZXN1bHQsIG5vdENl
bGxSZXN1bHQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVUcnV0aHlPYmplY3Qo
RWRnZSBlZGdlLCBMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQotICAgIHsKLSAg
ICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkp
IHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwg
ZmlsdGVyLCBpc05vdE9iamVjdChjZWxsKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZWRnZSwgZmlsdGVyLCBpc05vdE9iamVjdChjZWxsKSk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZS5ub2RlKCksCi0gICAg
ICAgICAgICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRGdW5jdG9yPgotICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVDb21wYXJlKGNvbnN0IEludEZ1bmN0b3ImIGludEZ1bmN0b3IsIFNfSklUT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRJ
c0ludCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgbGVmdCBpcyBp
bnQiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDb21wYXJlRXEgdW50eXBlZCBmYXN0IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBzbG93
IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIobGVmdCksIHJhcmVseShzbG93UGF0aCks
IHVzdWFsbHkobGVmdElzSW50KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlZnRJc0ludCwgZmFzdFBhdGgpOwotICAgICAgICBtX291
dC5icmFuY2goaXNOb3RJbnQzMihyaWdodCksIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoZmFz
dFBhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93
UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
aW50RnVuY3Rvcih1bmJveEludDMyKGxlZnQpLCB1bmJveEludDMyKHJpZ2h0KSkpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHZtQ2FsbCgKLSAgICAgICAgICAg
IG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uKSwgbV9jYWxsRnJh
bWUsIGxlZnQsIHJpZ2h0KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgIH0KLQotICAgIExWYWx1ZSBzdHJpbmdzRXF1YWwoTFZhbHVlIGxl
ZnRKU1N0cmluZywgTFZhbHVlIHJpZ2h0SlNTdHJpbmcpCi0gICAgewotICAgICAgICBMQmFzaWNC
bG9jayBub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Ry
aW5nc0VxdWFsIG5vdCB0cml2aWFsbHkgdW5lcXVhbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBub3RFbXB0eUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBu
b3QgZW1wdHkgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGVmdFJlYWR5Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxlZnQgcmVhZHkgY2FzZSIpKTsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgcmlnaHRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InN0cmluZ3NFcXVhbCByaWdodCByZWFkeSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBs
ZWZ0OEJpdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBsZWZ0IDgt
Yml0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHJpZ2h0OEJpdENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCByaWdodCA4LWJpdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwg
bG9vcCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgYnl0ZXNFcXVhbCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgic3RyaW5nc0VxdWFsIGJ5dGVzIGVxdWFsIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayB0cnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHRydWUgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgZmFsc2UgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBzbG93IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaW5nc0VxdWFsIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQubG9hZDMyKGxlZnRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOwot
Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGxlbmd0
aCwgbV9vdXQubG9hZDMyKHJpZ2h0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSks
Ci0gICAgICAgICAgICB1bnN1cmUoZmFsc2VDYXNlKSwgdW5zdXJlKG5vdFRyaXZpYWxseVVuZXF1
YWxDYXNlKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSwgbm90RW1wdHlDYXNlKTsKLQotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobGVuZ3RoKSwgdW5zdXJlKHRydWVDYXNlKSwgdW5zdXJl
KG5vdEVtcHR5Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5Q2FzZSwg
bGVmdFJlYWR5Q2FzZSk7Ci0KLSAgICAgICAgTFZhbHVlIGxlZnQgPSBtX291dC5sb2FkUHRyKGxl
ZnRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIExWYWx1ZSByaWdo
dCA9IG1fb3V0LmxvYWRQdHIocmlnaHRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7
Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwobGVmdCksIHVzdWFsbHkobGVm
dFJlYWR5Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGxlZnRSZWFkeUNhc2UsIHJpZ2h0UmVhZHlDYXNlKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3ROdWxsKHJpZ2h0KSwgdXN1YWxseShyaWdodFJlYWR5Q2FzZSksIHJh
cmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHJpZ2h0UmVhZHlDYXNl
LCBsZWZ0OEJpdENhc2UpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIobGVmdCwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgIHVuc3VyZShz
bG93Q2FzZSksIHVuc3VyZShsZWZ0OEJpdENhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhsZWZ0OEJpdENhc2UsIHJpZ2h0OEJpdENhc2UpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAg
ICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUocmlnaHQ4Qml0Q2FzZSkpOwotCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHJpZ2h0OEJpdENhc2UsIGxvb3ApOwotCi0gICAgICAgIExWYWx1
ZSBsZWZ0RGF0YSA9IG1fb3V0LmxvYWRQdHIobGVmdCwgbV9oZWFwcy5TdHJpbmdJbXBsX2RhdGEp
OwotICAgICAgICBMVmFsdWUgcmlnaHREYXRhID0gbV9vdXQubG9hZFB0cihyaWdodCwgbV9oZWFw
cy5TdHJpbmdJbXBsX2RhdGEpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4QXRTdGFy
dCA9IG1fb3V0LmFuY2hvcihsZW5ndGgpOwotCi0gICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcCwgYnl0ZXNFcXVhbCk7Ci0KLSAgICAgICAgTFZh
bHVlIGluZGV4QXRMb29wVG9wID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbmRleEF0U3RhcnQp
OwotICAgICAgICBMVmFsdWUgaW5kZXhJbkxvb3AgPSBtX291dC5zdWIoaW5kZXhBdExvb3BUb3As
IG1fb3V0LmludDMyT25lKTsKLQotICAgICAgICBMVmFsdWUgbGVmdEJ5dGUgPSBtX291dC5sb2Fk
OFplcm9FeHQzMigKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmNoYXJhY3Rl
cnM4LCBsZWZ0RGF0YSwgbV9vdXQuemVyb0V4dFB0cihpbmRleEluTG9vcCkpKTsKLSAgICAgICAg
TFZhbHVlIHJpZ2h0Qnl0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKAotICAgICAgICAgICAgbV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFjdGVyczgsIHJpZ2h0RGF0YSwgbV9vdXQuemVyb0V4
dFB0cihpbmRleEluTG9vcCkpKTsKLQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1
YWwobGVmdEJ5dGUsIHJpZ2h0Qnl0ZSksIHVuc3VyZShmYWxzZUNhc2UpLCB1bnN1cmUoYnl0ZXNF
cXVhbCkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ5dGVzRXF1YWwsIHRydWVDYXNlKTsK
LQotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmRleEZvck5leHRJdGVyYXRpb24gPSBtX291dC5h
bmNob3IoaW5kZXhJbkxvb3ApOwotICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4
QXRMb29wVG9wLCBpbmRleEZvck5leHRJdGVyYXRpb24pOwotICAgICAgICBtX291dC5icmFuY2go
bV9vdXQubm90WmVybzMyKGluZGV4SW5Mb29wKSwgdW5zdXJlKGxvb3ApLCB1bnN1cmUodHJ1ZUNh
c2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyh0cnVlQ2FzZSwgZmFsc2VDYXNlKTsKLSAg
ICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHRydWVSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFsc2VDYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFsc2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZh
bHNlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIExWYWx1ZSBzbG93
UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSksIG1fY2FsbEZyYW1lLAotICAgICAgICAg
ICAgbGVmdEpTU3RyaW5nLCByaWdodEpTU3RyaW5nKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih1bmJveEJvb2xlYW4oc2xvd1Jlc3VsdFZhbHVlKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaSht
X291dC5ib29sZWFuLCB0cnVlUmVzdWx0LCBmYWxzZVJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAg
fQotCi0gICAgZW51bSBTY3JhdGNoRlBSVXNhZ2UgewotICAgICAgICBEb250TmVlZFNjcmF0Y2hG
UFIsCi0gICAgICAgIE5lZWRTY3JhdGNoRlBSCi0gICAgfTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlBcml0aE9wR2VuZXJhdG9yLCBTY3JhdGNoRlBSVXNhZ2Ugc2NyYXRjaEZQUlVzYWdl
ID0gRG9udE5lZWRTY3JhdGNoRlBSPgotICAgIHZvaWQgZW1pdEJpbmFyeVNuaXBwZXQoSl9KSVRP
cGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShub2RlLT5j
aGlsZDIoKSk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkpOwotICAgICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRU
eXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIobGVmdCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cihyaWdodCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7Ci0gICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBl
eGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRp
b25zKHBhdGNocG9pbnQpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAxOwotICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwot
ICAgICAgICBpZiAoc2NyYXRjaEZQUlVzYWdlID09IE5lZWRTY3JhdGNoRlBSKQotICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzKys7Ci0gICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAg
ICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAg
ICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1
bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxCaW5hcnlB
cml0aE9wR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJh
bXNbMl0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDApLCBw
YXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLAotICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoRlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIgPyBwYXJhbXMuZnBTY3JhdGNo
KDIpIDogSW52YWxpZEZQUlJlZyk7Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdlbmVy
YXRlRmFzdFBhdGgoaml0KTsKLQotICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3ItPmRpZEVt
aXRGYXN0UGF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExp
c3QoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IGRvbmUgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5z
bG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xv
d1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0
aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlCaXRPcEdlbmVyYXRvcj4KLSAgICB2b2lkIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQoSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewot
ICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBkbyBleGNlcHRpb25zLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjg2Ci0gICAgICAgICAgICAKLSAgICAgICAgTFZhbHVl
IGxlZnQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0
ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkp
OwotICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5yZXN1bHRUeXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIobGVmdCk7Ci0gICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3RlcihyaWdodCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChtX3RhZ01hc2ssIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0g
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIFJlZlB0cjxQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFy
ZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOwotICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBz
dGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0g
ICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBh
cmFtcyktPmp1bXBzKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGF1dG8gZ2VuZXJhdG9yID0gQm94PEJpbmFyeUJpdE9wR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAg
ICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhw
YXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNb
MV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNo
KDApKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQp
OwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOwot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOwot
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAgICAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNs
b3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9u
LCBwYXJhbXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlm
dFR5cGUgc2hpZnRUeXBlKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhjZXB0aW9ucy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4NgotICAg
ICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwot
Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGxlZnQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOwot
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdU
eXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFu
ZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBv
aW50KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwot
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBl
eGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVs
ZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkp
LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDApLCBwYXJhbXMuZ3BTY3Jh
dGNoKDApLCBJbnZhbGlkRlBSUmVnLCBzaGlmdFR5cGUpOwotCi0gICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1
bmN0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFR5cGUgPT0gSklUUmln
aHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IG9wZXJhdGlvblZhbHVlQml0UlNoaWZ0IDogb3BlcmF0aW9uVmFsdWVCaXRVUlNoaWZ0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KTsKLQotICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgIH0KLQotICAgIExW
YWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
Ci0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwotICAgIAotICAgICAgICBMVmFsdWUg
cmVzdWx0OwotICAgICAgICBMVmFsdWUgY29uZGl0aW9uOwotICAgICAgICBpZiAoT3B0aW9uczo6
Zm9yY2VHQ1Nsb3dQYXRocygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtX291dC5pbnRQdHJa
ZXJvOwotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZFB0cigKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7
Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBtX291dC5ub3ROdWxsKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9vdXQuYnJhbmNoKGNvbmRpdGlvbiwgdXN1YWxseShzdWNjZXNzKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzdWNjZXNz
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKAotICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihyZXN1bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCi0gICAgICAgICAg
ICBhbGxvY2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdG9yZVN0cnVjdHVy
ZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIG1f
b3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJs
b2IoKSksCi0gICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7Ci0gICAgICAg
IHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCi0gICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNC
bG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNl
bGwoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoYnV0dGVyZmx5LCByZXN1bHQsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xh
c3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgc2l6ZV90IHNpemUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKLSAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCku
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPihzaXplKTsKLSAgICAgICAg
cmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVj
dHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENsYXNzVHlwZT4KLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0PENsYXNzVHlwZT4oCi0gICAgICAgICAgICBD
bGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1Bh
dGgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0gICAg
TFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNpemUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNl
U3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7Ci0KLSAgICAgICAgTFZhbHVlIHN1YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIo
JnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBzbWFsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBsYXJnZSBvciBvdmVyc2l6ZSBjYXNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGxhcmdlIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxs
b2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNpemUsIG1fb3V0LmNvbnN0SW50
MzIoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0gMSkpOwotICAgICAgICBMVmFsdWUgaXNTbWFs
bCA9IG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3Bh
Y2U6OnByZWNpc2VDdXRvZmYpKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzU21hbGwsIHVuc3Vy
ZShzbWFsbENhc2VCbG9jayksIHVuc3VyZShsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21h
bGxDYXNlQmxvY2ssIGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jayk7Ci0gICAgICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgbV9oZWFwcy5NYXJr
ZWRTcGFjZV9TdWJzcGFjZV9wcmVjaXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAg
ICBtX291dC56ZXJvRXh0UHRyKG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJ
bnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNtYWxsQWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3MudmFsdWUo
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jaywgbGFyZ2VDYXNlQmxvY2sp
OwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5iZWxvdyh1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRvZmYpKSwK
LSAgICAgICAgICAgIHVzdWFsbHkobGFyZ2VDYXNlQmxvY2spLCByYXJlbHkoc2xvd1BhdGgpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZUJsb2NrLCBjb250aW51
YXRpb24pOwotICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAg
bV9oZWFwcy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9pbXByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFj
ZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXpl
LCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkp
KSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZUFsbG9jYXRvciA9IG1fb3V0LmFuY2hv
cihhZGRyZXNzLnZhbHVlKCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHNtYWxs
QWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gYWxs
b2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBh
bGxvY2F0aW9uLgotICAgIExWYWx1ZSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChMVmFs
dWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBDb3BpZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dG9yYWdlIGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBy
ZW1haW5pbmcgPSBtX291dC5sb2FkUHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJy
ZW50UmVtYWluaW5nKSk7Ci0gICAgICAgIExWYWx1ZSBuZXdSZW1haW5pbmcgPSBtX291dC5zdWIo
cmVtYWluaW5nLCBzaXplKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIG1fb3V0Lmxlc3NUaGFuKG5ld1JlbWFpbmluZywgbV9vdXQuaW50UHRyWmVybyksCi0g
ICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHN1Y2Nlc3MpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN1Y2Nlc3MpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuc3RvcmVQdHIobmV3UmVtYWluaW5nLCBtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3Vy
cmVudFJlbWFpbmluZykpOwotICAgICAgICByZXR1cm4gbV9vdXQuc3ViKAotICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRF
bmQpKSwgbmV3UmVtYWluaW5nKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVCYXNpY1N0
b3JhZ2UoTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LnN1YihhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChzaXplLCBzbG93
UGF0aCksIHNpemUpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxs
b2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImFsbG9jYXRlT2JqZWN0IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBjb250aW51YXRp
b24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQ
dHJaZXJvLCBzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0
aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAt
PiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93
UmVzdWx0VmFsdWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OwotICAgIH0KLSAgICAKLSAgICBzdHJ1Y3QgQXJyYXlWYWx1ZXMgewotICAgICAgICBBcnJheVZh
bHVlcygpCi0gICAgICAgICAgICA6IGFycmF5KDApCi0gICAgICAgICAgICAsIGJ1dHRlcmZseSgw
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFycmF5VmFsdWVzKExW
YWx1ZSBhcnJheSwgTFZhbHVlIGJ1dHRlcmZseSkKLSAgICAgICAgICAgIDogYXJyYXkoYXJyYXkp
Ci0gICAgICAgICAgICAsIGJ1dHRlcmZseShidXR0ZXJmbHkpCi0gICAgICAgIHsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGFycmF5OwotICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5OwotICAgIH07Ci0gICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0FycmF5KAotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtRWxlbWVudHMsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVk
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0
RW5kKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVj
dG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0
aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKAotICAg
ICAgICAgICAgZW5kT2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSlNWYWx1ZSkg
KiB2ZWN0b3JMZW5ndGgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxv
Y2F0ZU9iamVjdDxKU0FycmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBz
bG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIobnVtRWxlbWVudHMpLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMih2ZWN0b3JMZW5ndGgp
LCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLAotICAgICAg
ICAgICAgICAgICAgICBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
QXJyYXlWYWx1ZXMob2JqZWN0LCBidXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBBcnJheVZh
bHVlcyBhbGxvY2F0ZUpTQXJyYXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUVs
ZW1lbnRzKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSlNBcnJheSBh
bGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAg
ICAgCi0gICAgICAgIEFycmF5VmFsdWVzIGZhc3RWYWx1ZXMgPSBhbGxvY2F0ZUpTQXJyYXkoc3Ry
dWN0dXJlLCBudW1FbGVtZW50cywgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0QXJyYXkgPSBtX291dC5hbmNob3IoZmFzdFZhbHVlcy5hcnJheSk7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdFZhbHVlcy5idXR0ZXJm
bHkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgTFZhbHVlIHNsb3dBcnJheVZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobnVtRWxlbWVudHMpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93QXJyYXkgPSBtX291dC5hbmNob3Ioc2xvd0FycmF5VmFsdWUpOwotICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9v
dXQubG9hZFB0cihzbG93QXJyYXlWYWx1ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsK
LQotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiBBcnJheVZhbHVlcygKLSAgICAgICAgICAgIG1fb3V0LnBoaShtX291dC5pbnRQdHIs
IGZhc3RBcnJheSwgc2xvd0FycmF5KSwKLSAgICAgICAgICAgIG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGJvb2xpZnkoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtp
bmQoKSkgewotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgIGNhc2UgS25vd25Cb29s
ZWFuVXNlOgotICAgICAgICAgICAgcmV0dXJuIGxvd0Jvb2xlYW4oZWRnZSk7Ci0gICAgICAgIGNh
c2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubm90WmVybzMyKGxvd0ludDMy
KGVkZ2UpKTsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICByZXR1cm4g
bV9vdXQuZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKGxvd0RvdWJsZShlZGdlKSwgbV9vdXQuZG91
YmxlWmVybyk7Ci0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKLSAgICAgICAgICAgIHJl
dHVybiBtX291dC5sb2dpY2FsTm90KAotICAgICAgICAgICAgICAgIGVxdWFsTnVsbE9yVW5kZWZp
bmVkKAotICAgICAgICAgICAgICAgICAgICBlZGdlLCBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3Qs
IFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICAgICAgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3RyaW5nVmFsdWUgPSBsb3dTdHJpbmcoZWRnZSk7Ci0gICAgICAgICAgICBMVmFs
dWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVhcHMu
SlNTdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbChsZW5n
dGgsIG1fb3V0LmludDMyWmVybyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNl
OiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBm
bG93IHN0cnVjdHVyZToKLSAgICAgICAgICAgIC8vIGlmICh2YWx1ZSBpcyBjZWxsKSB7Ci0gICAg
ICAgICAgICAvLyAgICAgaWYgKHZhbHVlIGlzIHN0cmluZykKLSAgICAgICAgICAgIC8vICAgICAg
ICAgcmVzdWx0ID0gISF2YWx1ZS0+bGVuZ3RoCi0gICAgICAgICAgICAvLyAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyAgICAgICAgIGRvIGV2aWwgdGhpbmdzIGZvciBtYXNxdWVyYWRlcy1hcy11
bmRlZmluZWQKLSAgICAgICAgICAgIC8vICAgICAgICAgcmVzdWx0ID0gdHJ1ZQotICAgICAgICAg
ICAgLy8gICAgIH0KLSAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgaW50MzIpIHsK
LSAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94SW50MzIodmFsdWUpCi0gICAgICAg
ICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIG51bWJlcikgewotICAgICAgICAgICAgLy8gICAg
IHJlc3VsdCA9ICEhdW5ib3hEb3VibGUodmFsdWUpCi0gICAgICAgICAgICAvLyB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gICAgIHJlc3VsdCA9IHZhbHVlID09IGpzVHJ1ZQotICAgICAgICAgICAg
Ly8gfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJv
b2xpZnkgdW50eXBlZCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBub3Qg
c3RyaW5nIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBjZWxsIGNhc2UiKSk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBpbnQzMkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkJvb2xpZnkgdW50eXBlZCBpbnQzMiBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bm90SW50MzJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90
IGludDMyIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgZG91YmxlIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBub3REb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJCb29saWZ5IHVudHlwZWQgbm90IGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlw
ZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1
bnN1cmUobm90Q2VsbENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgc3RyaW5nQ2FzZSk7Ci0gICAg
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCksCi0gICAgICAgICAgICAgICAgdW5zdXJlKHN0cmlu
Z0Nhc2UpLCB1bnN1cmUobm90U3RyaW5nQ2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBub3RTdHJpbmdDYXNlKTsKLSAgICAgICAgICAg
IExWYWx1ZSBub25FbXB0eVN0cmluZyA9IG1fb3V0Lm5vdFplcm8zMigKLSAgICAgICAgICAgICAg
ICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZSh2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgp
KTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihub25FbXB0eVN0cmlu
ZykpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmdDYXNlLCBub3RDZWxsQ2FzZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgaXNUcnV0aHlPYmplY3Q7Ci0gICAgICAgICAgICBpZiAobWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICBpc1RydXRoeU9iamVjdCA9IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbWFzcXVlcmFkZXNDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbWFzcXVlcmFkZXMgY2FzZSIpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3IobV9vdXQuYm9vbGVhblRydWUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hl
YXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLAotICAgICAgICAgICAgICAgICAg
ICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShtYXNxdWVyYWRlc0Nhc2UpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtYXNxdWVyYWRlc0Nh
c2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlzVHJ1dGh5T2JqZWN0ID0g
bV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSksCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobG9hZFN0cnVjdHVyZSh2YWx1ZSksIG1faGVhcHMu
U3RydWN0dXJlX2dsb2JhbE9iamVjdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGlzVHJ1dGh5T2JqZWN0KSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBpbnQzMkNhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzSW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+
U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShpbnQzMkNhc2UpLCB1bnN1cmUobm90
SW50MzJDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlu
dDMyQ2FzZSwgbm90SW50MzJDYXNlKTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihtX291dC5ub3RaZXJvMzIodW5ib3hJbnQzMih2YWx1ZSkpKSk7Ci0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdEludDMyQ2FzZSwgZG91YmxlQ2FzZSk7Ci0gICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkgJiB+U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShkb3VibGVDYXNlKSwgdW5z
dXJlKG5vdERvdWJsZUNhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oZG91YmxlQ2FzZSwgbm90RG91YmxlQ2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgZG91
YmxlSXNUcnV0aHkgPSBtX291dC5kb3VibGVOb3RFcXVhbEFuZE9yZGVyZWQoCi0gICAgICAgICAg
ICAgICAgdW5ib3hEb3VibGUodmFsdWUpLCBtX291dC5jb25zdERvdWJsZSgwKSk7Ci0gICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoZG91YmxlSXNUcnV0aHkpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90RG91YmxlQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIExWYWx1ZSBtaXNjSXNUcnV0aHkgPSBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICB2
YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkp
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1pc2NJc1RydXRoeSkp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgcmVzdWx0cyk7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGVudW0gU3RyaW5nT3JPYmplY3RNb2RlIHsKLSAgICAgICAgQWxsQ2Vs
bHNBcmVGYWxzZSwKLSAgICAgICAgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0Ci0gICAgfTsKLSAg
ICBlbnVtIEVxdWFsTnVsbE9yVW5kZWZpbmVkTW9kZSB7Ci0gICAgICAgIEVxdWFsTnVsbCwKLSAg
ICAgICAgRXF1YWxVbmRlZmluZWQsCi0gICAgICAgIEVxdWFsTnVsbE9yVW5kZWZpbmVkLAotICAg
ICAgICBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQKLSAgICB9OwotICAgIExWYWx1ZSBlcXVhbE51
bGxPclVuZGVmaW5lZCgKLSAgICAgICAgRWRnZSBlZGdlLCBTdHJpbmdPck9iamVjdE1vZGUgY2Vs
bE1vZGUsIEVxdWFsTnVsbE9yVW5kZWZpbmVkTW9kZSBwcmltaXRpdmVNb2RlLAotICAgICAgICBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG9wZXJhbmRNb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQotICAgIHsKLSAgICAgICAgYm9vbCB2YWxpZFdhdGNocG9pbnQgPSBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwotICAgICAgICAKLSAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBvcGVyYW5kTW9kZSk7Ci0gICAgICAgIAot
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1
YWxOdWxsT3JVbmRlZmluZWQgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBwcmlt
aXRpdmVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBw
cmltaXRpdmUgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNhc2UpLCB1bnN1cmUoY2VsbENhc2UpKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2Vs
bENhc2UsIHByaW1pdGl2ZUNhc2UpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChjZWxsTW9kZSkg
ewotICAgICAgICBjYXNlIEFsbENlbGxzQXJlRmFsc2U6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3Q6Ci0gICAgICAgICAgICBGVExfVFlQ
RV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbGlkV2F0Y2hwb2ludCkg
ewotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5G
YWxzZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbWFzcXVlcmFkZXNDYXNlID0KLSAgICAg
ICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIG1h
c3F1ZXJhZGVzIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC50ZXN0Tm9u
WmVybzMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLAotICAgICAgICAgICAgICAgIHJh
cmVseShtYXNxdWVyYWRlc0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtYXNxdWVyYWRlc0Nhc2UsIHByaW1pdGl2
ZUNhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9h
ZFN0cnVjdHVyZSh2YWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2dsb2JhbE9iamVjdCkpKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHByaW1pdGl2ZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgcHJpbWl0aXZlUmVzdWx0OwotICAgICAgICBzd2l0Y2ggKHByaW1p
dGl2ZU1vZGUpIHsKLSAgICAgICAgY2FzZSBFcXVhbE51bGw6Ci0gICAgICAgICAgICBwcmltaXRp
dmVSZXN1bHQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVxdWFsVW5kZWZpbmVkOgotICAg
ICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVxdWFsTnVsbE9yVW5kZWZpbmVkOgotICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gaXNP
dGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQ6Ci0gICAgICAgICAgICBGVExfVFlQRV9D
SEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOwotICAgICAgICAgICAgcHJpbWl0aXZl
UmVzdWx0ID0gbV9vdXQuYm9vbGVhblRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IocHJpbWl0aXZlUmVzdWx0KSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCByZXN1bHRzKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotICAgIHZvaWQgY29udGlndW91c1B1
dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgIEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9u
LCBMVmFsdWUgYmFzZSwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgTFZhbHVlIHZhbHVl
LAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24pCi0gICAgewotICAgICAgICBMVmFs
dWUgaXNOb3RJbkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgIGluZGV4
LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKTsKLSAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90SW5Cb3VuZHNDYXNlID0KLSAgICAgICAg
ICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG5vdCBpbiBib3VuZHMiKSk7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBwZXJmb3JtU3RvcmUgPQotICAgICAgICAgICAgICAg
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgcGVyZm9ybSBzdG9yZSIpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEluQm91bmRzLCB1bnN1
cmUobm90SW5Cb3VuZHNDYXNlKSwgdW5zdXJlKHBlcmZvcm1TdG9yZSkpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhu
b3RJbkJvdW5kc0Nhc2UsIHBlcmZvcm1TdG9yZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgaXNPdXRPZkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAg
ICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5C
dXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBpc091dE9mQm91bmRzKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRz
Q2FzZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlW
YWwgb3V0IG9mIGJvdW5kcyIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBob2xlQ2Fz
ZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwg
aG9sZSBjYXNlIikpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goaXNPdXRPZkJvdW5kcywgcmFyZWx5KG91dE9mQm91bmRzQ2FzZSksIHVzdWFsbHko
aG9sZUNhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzQ2FzZSwgaG9s
ZUNhc2UpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2bUNhbGwoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24oc2xvd1Bh
dGhGdW5jdGlvbiksCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRl
eCwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGhvbGVDYXNlLCBpbm5lckxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAgICAgICAgICAg
ICBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSwKLSAgICAgICAgICAgICAgICBzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuanVtcChwZXJmb3JtU3RvcmUpOwotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8ocGVyZm9ybVN0b3JlLCBsYXN0TmV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBidWlsZFN3aXRjaChTd2l0Y2hEYXRhKiBkYXRhLCBMVHlwZSB0eXBlLCBMVmFs
dWUgc3dpdGNoVmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBtX291dC5pbnRQ
dHIgfHwgdHlwZSA9PSBtX291dC5pbnQzMik7Ci0KLSAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+
IGNhc2VzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFN3aXRjaENhc2UgbmV3Q2FzZTsKLQotICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gbV9vdXQuaW50UHRyKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNo
TG9va3VwVmFsdWUoZGF0YS0+a2luZCkpLAotICAgICAgICAgICAgICAgICAgICBsb3dCbG9jayhk
YXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spLCBXZWlnaHQoZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
LmNvdW50KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gbV9vdXQuaW50MzIpIHsK
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKGRh
dGEtPmNhc2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEtPmtpbmQpKSwKLSAgICAg
ICAgICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKSwgV2Vp
Z2h0KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKG5ld0Nh
c2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlv
bigKLSAgICAgICAgICAgIHN3aXRjaFZhbHVlLCBjYXNlcywKLSAgICAgICAgICAgIGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3dpdGNoU3RyaW5nKFN3aXRjaERhdGEqIGRhdGEs
IExWYWx1ZSBzdHJpbmcpCi0gICAgewotICAgICAgICBib29sIGNhbkRvQmluYXJ5U3dpdGNoID0g
dHJ1ZTsKLSAgICAgICAgdW5zaWduZWQgdG90YWxMZW5ndGggPSAwOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChERkc6OlN3aXRjaENhc2UgbXlDYXNlIDogZGF0YS0+Y2FzZXMpIHsKLSAgICAgICAg
ICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IG15Q2FzZS52YWx1ZS5zdHJpbmdJbXBsKCk7Ci0gICAg
ICAgICAgICBpZiAoIXN0cmluZy0+aXM4Qml0KCkpIHsKLSAgICAgICAgICAgICAgICBjYW5Eb0Jp
bmFyeVN3aXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkgPiBPcHRpb25zOjptYXhpbXVtQmlu
YXJ5U3RyaW5nU3dpdGNoQ2FzZUxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FuRG9CaW5h
cnlTd2l0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghY2FuRG9CaW5hcnlTd2l0Y2ggfHwgdG90YWxMZW5ndGgg
PiBPcHRpb25zOjptYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgoKSkgewotICAg
ICAgICAgICAgc3dpdGNoU3RyaW5nU2xvdyhkYXRhLCBzdHJpbmcpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1f
b3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3Ro
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGhhc0ltcGxCbG9jayA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBoYXMgaW1wbCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBpczhCaXRCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dp
dGNoL1N3aXRjaFN0cmluZyBpcyA4IGJpdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBz
bG93QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgc2xv
dyBjYXNlIikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChz
dHJpbmdJbXBsKSwgdW5zdXJlKHNsb3dCbG9jayksIHVuc3VyZShoYXNJbXBsQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFz
SW1wbEJsb2NrLCBpczhCaXRCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSks
Ci0gICAgICAgICAgICB1bnN1cmUoc2xvd0Jsb2NrKSwgdW5zdXJlKGlzOEJpdEJsb2NrKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXRCbG9jaywgc2xvd0Jsb2NrKTsK
LSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBidWZmZXIgPSBtX291dC5sb2FkUHRyKHN0cmluZ0lt
cGwsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvcGFnYXRlIGJyYW5jaCB3ZWlnaHQgZGF0YSB0byB0aGUgY2FzZXMgb2Yg
dGhpcyBzd2l0Y2guCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDQzNjgKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTdHJpbmdTd2l0Y2hDYXNl
PiBjYXNlczsKLSAgICAgICAgZm9yIChERkc6OlN3aXRjaENhc2UgbXlDYXNlIDogZGF0YS0+Y2Fz
ZXMpCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3RyaW5nU3dpdGNoQ2FzZShteUNhc2UudmFs
dWUuc3RyaW5nSW1wbCgpLCBsb3dCbG9jayhteUNhc2UudGFyZ2V0LmJsb2NrKSkpOwotICAgICAg
ICBzdGQ6OnNvcnQoY2FzZXMuYmVnaW4oKSwgY2FzZXMuZW5kKCkpOwotICAgICAgICBzd2l0Y2hT
dHJpbmdSZWN1cnNlKGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgMCwgMCwgY2FzZXMuc2l6
ZSgpLCAwLCBmYWxzZSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Jsb2NrLCBsYXN0
TmV4dCk7Ci0gICAgICAgIHN3aXRjaFN0cmluZ1Nsb3coZGF0YSwgc3RyaW5nKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gVGhlIGNvZGUgZm9yIHN0cmluZyBzd2l0Y2hpbmcgaXMgYmFzZWQgY2xvc2Vs
eSBvbiB0aGUgc2FtZSBjb2RlIGluIHRoZSBERkcgYmFja2VuZC4gV2hpbGUgaXQKLSAgICAvLyB3
b3VsZCBiZSBuaWNlIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHNpbWlsYXItbG9va2luZyBjb2Rl
LCBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgb25lIG9mCi0gICAgLy8gdGhvc2UgYWxnb3JpdGhtcyB3
aGVyZSBmYWN0b3Jpbmcgb3V0IHRoZSBjb21tb24gYml0cyB3b3VsZCByZXN1bHQgaW4gbW9yZSBj
b2RlIHRoYW4ganVzdAotICAgIC8vIGR1cGxpY2F0aW5nLgotICAgIAotICAgIHN0cnVjdCBTdHJp
bmdTd2l0Y2hDYXNlIHsKLSAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZSgpIHsgfQotICAgICAgICAK
LSAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJbXBsKiBzdHJpbmcsIExCYXNpY0Jsb2Nr
IHRhcmdldCkKLSAgICAgICAgICAgIDogc3RyaW5nKHN0cmluZykKLSAgICAgICAgICAgICwgdGFy
Z2V0KHRhcmdldCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgU3RyaW5nU3dpdGNoQ2FzZSYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBzdHJpbmdMZXNzVGhhbigqc3RyaW5nLCAqb3RoZXIuc3RyaW5nKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBM
QmFzaWNCbG9jayB0YXJnZXQ7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQ2hhcmFjdGVyQ2Fz
ZSB7Ci0gICAgICAgIENoYXJhY3RlckNhc2UoKQotICAgICAgICAgICAgOiBjaGFyYWN0ZXIoMCkK
LSAgICAgICAgICAgICwgYmVnaW4oMCkKLSAgICAgICAgICAgICwgZW5kKDApCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ2hhcmFjdGVyQ2FzZShMQ2hhciBjaGFyYWN0
ZXIsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAgICAgICA6IGNoYXJhY3Rl
cihjaGFyYWN0ZXIpCi0gICAgICAgICAgICAsIGJlZ2luKGJlZ2luKQotICAgICAgICAgICAgLCBl
bmQoZW5kKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IENoYXJhY3RlckNhc2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyIDwgb3RoZXIuY2hhcmFjdGVyOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBMQ2hhciBjaGFyYWN0ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGJlZ2lu
OwotICAgICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIHN3aXRjaFN0
cmluZ1JlY3Vyc2UoCi0gICAgICAgIFN3aXRjaERhdGEqIGRhdGEsIExWYWx1ZSBidWZmZXIsIExW
YWx1ZSBsZW5ndGgsIGNvbnN0IFZlY3RvcjxTdHJpbmdTd2l0Y2hDYXNlPiYgY2FzZXMsCi0gICAg
ICAgIHVuc2lnbmVkIG51bUNoZWNrZWQsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQsIHVu
c2lnbmVkIGFscmVhZHlDaGVja2VkTGVuZ3RoLAotICAgICAgICB1bnNpZ25lZCBjaGVja2VkRXhh
Y3RMZW5ndGgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBmYWxsVGhyb3VnaCA9IGxvd0Js
b2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiZWdp
biA9PSBlbmQpIHsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoZmFsbFRocm91Z2gpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBtaW5M
ZW5ndGggPSBjYXNlc1tiZWdpbl0uc3RyaW5nLT5sZW5ndGgoKTsKLSAgICAgICAgdW5zaWduZWQg
Y29tbW9uQ2hhcnMgPSBtaW5MZW5ndGg7Ci0gICAgICAgIGJvb2wgYWxsTGVuZ3Roc0VxdWFsID0g
dHJ1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kp
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15Q29tbW9uQ2hhcnMgPSBudW1DaGVja2VkOwotICAg
ICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihjYXNlc1tiZWdpbl0uc3RyaW5nLT5s
ZW5ndGgoKSwgY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBudW1DaGVja2VkOyBqIDwgbGltaXQ7ICsraikgewotICAgICAgICAgICAgICAg
IGlmIChjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChqKSAhPSBjYXNlc1tpXS5zdHJpbmctPmF0KGop
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBteUNvbW1vbkNo
YXJzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb21tb25DaGFycyA9IHN0ZDo6bWlu
KGNvbW1vbkNoYXJzLCBteUNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGlmIChtaW5MZW5ndGgg
IT0gY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhbGxMZW5ndGhz
RXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIG1pbkxlbmd0aCA9IHN0ZDo6bWluKG1pbkxlbmd0
aCwgY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChjaGVja2VkRXhhY3RMZW5ndGgpIHsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBhbHJlYWR5Q2hlY2tlZExlbmd0aCA9PSBtaW5MZW5ndGgpOwotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGFsbExlbmd0aHNFcXVhbCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtaW5M
ZW5ndGggPj0gY29tbW9uQ2hhcnMpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxMZW5ndGhz
RXF1YWwgJiYgYWxyZWFkeUNoZWNrZWRMZW5ndGggPCBtaW5MZW5ndGgpCi0gICAgICAgICAgICBt
X291dC5jaGVjayhtX291dC5iZWxvdyhsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVuZ3Ro
KSksIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFsICYm
IChhbHJlYWR5Q2hlY2tlZExlbmd0aCA8IG1pbkxlbmd0aCB8fCAhY2hlY2tlZEV4YWN0TGVuZ3Ro
KSkKLSAgICAgICAgICAgIG1fb3V0LmNoZWNrKG1fb3V0Lm5vdEVxdWFsKGxlbmd0aCwgbV9vdXQu
Y29uc3RJbnQzMihtaW5MZW5ndGgpKSwgdW5zdXJlKGZhbGxUaHJvdWdoKSk7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1DaGVja2VkOyBpIDwgY29tbW9uQ2hhcnM7ICsr
aSkgewotICAgICAgICAgICAgbV9vdXQuY2hlY2soCi0gICAgICAgICAgICAgICAgbV9vdXQubm90
RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJ1ZmZlciwg
bV9oZWFwcy5jaGFyYWN0ZXJzOFtpXSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGkpKSkp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobWluTGVuZ3RoID09IGNvbW1vbkNoYXJzKSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUgY2FzZXMgaXMgYSBwcmVmaXgg
b2YgYWxsIG9mIHRoZSBvdGhlciBjYXNlcy4KLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
Y2hlY2tlZCB0aGF0IHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBwcmVmaXggb2YgYWxsIG9mIHRoZSBj
YXNlcywKLSAgICAgICAgICAgIC8vIHNvIHdlIGp1c3QgY2hlY2sgbGVuZ3RoIHRvIGp1bXAgdG8g
dGhhdCBjYXNlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCkgPT0gY29tbW9uQ2hhcnMpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kpCi0g
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkgPiBjb21tb25DaGFycyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChhbGxMZW5ndGhzRXF1YWwpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgZW5kID09IGJlZ2luICsgMSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
YXNlc1tiZWdpbl0udGFyZ2V0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmNoZWNrKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihjb21tb25DaGFycykpLAot
ICAgICAgICAgICAgICAgIHVuc3VyZShjYXNlc1tiZWdpbl0udGFyZ2V0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGNoZWNrZWQgaWYgdGhlIGxlbmd0aCBpcyA+PSBtaW5M
ZW5ndGgsIGFuZCB0aGVuIHdlIGNoZWNrZWQgaWYgdGhlIGxlbmd0aCBpcwotICAgICAgICAgICAg
Ly8gPT0gY29tbW9uQ2hhcnMuIFdlIGdldCB0byB0aGlzIHBvaW50IGlmIGl0IGlzID49IG1pbkxl
bmd0aCBidXQgbm90ID09IGNvbW1vbkNoYXJzLgotICAgICAgICAgICAgLy8gSGVuY2Ugd2Uga25v
dyB0aGF0IGl0IG5vdyBtdXN0IGJlID4gbWluTGVuZ3RoLCBpLmUuIHRoYXQgaXQncyA+PSBtaW5M
ZW5ndGggKyAxLgotICAgICAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZSgKLSAgICAgICAgICAg
ICAgICBkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIGNvbW1vbkNoYXJzLCBiZWdpbiArIDEs
IGVuZCwgbWluTGVuZ3RoICsgMSwgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB0aGUg
c3RyaW5nIGlzIGxvbmdlciB0aGFuIGNvbW1vbkNoYXJzLCBhbmQgd2UndmUgb25seSB2ZXJpZmll
ZAotICAgICAgICAvLyBjb21tb25DaGFycy4gVXNlIGEgYmluYXJ5IHN3aXRjaCBvbiB0aGUgbmV4
dCB1bmNoZWNrZWQgY2hhcmFjdGVyLCBpLmUuCi0gICAgICAgIC8vIHN0cmluZ1tjb21tb25DaGFy
c10uCi0gICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZW5kID49
IGJlZ2luICsgMik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdW5jaGVja2VkQ2hhciA9IG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKGJ1ZmZlciwgbV9oZWFwcy5jaGFyYWN0ZXJzOFtjb21tb25DaGFy
c10pOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPENoYXJhY3RlckNhc2U+IGNoYXJhY3RlckNh
c2VzOwotICAgICAgICBDaGFyYWN0ZXJDYXNlIGN1cnJlbnRDYXNlKGNhc2VzW2JlZ2luXS5zdHJp
bmctPmF0KGNvbW1vbkNoYXJzKSwgYmVnaW4sIGJlZ2luICsgMSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hhciBj
dXJyZW50Q2hhciA9IGNhc2VzW2ldLnN0cmluZy0+YXQoY29tbW9uQ2hhcnMpOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDaGFyICE9IGN1cnJlbnRDYXNlLmNoYXJhY3RlcikgewotICAgICAgICAg
ICAgICAgIGN1cnJlbnRDYXNlLmVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2Fz
ZXMuYXBwZW5kKGN1cnJlbnRDYXNlKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZSA9IENo
YXJhY3RlckNhc2UoY3VycmVudENoYXIsIGksIGkgKyAxKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIGN1cnJlbnRDYXNlLmVuZCA9IGkgKyAxOwotICAgICAgICB9Ci0gICAg
ICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50Q2FzZSk7Ci0gICAgICAgIAotICAgICAg
ICBWZWN0b3I8TEJhc2ljQmxvY2s+IGNoYXJhY3RlckJsb2NrczsKLSAgICAgICAgZm9yIChDaGFy
YWN0ZXJDYXNlJiBteUNhc2UgOiBjaGFyYWN0ZXJDYXNlcykKLSAgICAgICAgICAgIGNoYXJhY3Rl
ckJsb2Nrcy5hcHBlbmQoRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5n
IGNhc2UgZm9yICIsIG15Q2FzZS5jaGFyYWN0ZXIsICIgYXQgaW5kZXggIiwgY29tbW9uQ2hhcnMp
KSk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gc3dpdGNoQ2FzZXM7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJDYXNlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGNoYXJhY3RlckNhc2VzW2kgLSAxXS5jaGFyYWN0ZXIgPCBjaGFyYWN0ZXJD
YXNlc1tpXS5jaGFyYWN0ZXIpOwotICAgICAgICAgICAgc3dpdGNoQ2FzZXMuYXBwZW5kKFN3aXRj
aENhc2UoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjaGFyYWN0ZXJDYXNlc1tp
XS5jaGFyYWN0ZXIpLCBjaGFyYWN0ZXJCbG9ja3NbaV0sIFdlaWdodCgpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24odW5jaGVja2VkQ2hhciwgc3dpdGNoQ2Fz
ZXMsIGZhbGxUaHJvdWdoLCBXZWlnaHQoKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwotICAgICAgICBjaGFyYWN0ZXJCbG9ja3Mu
YXBwZW5kKGxhc3ROZXh0KTsgLy8gTWFrZXMgaXQgY29udmVuaWVudCB0byBzZXQgbmV4dEJsb2Nr
LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcmFjdGVyQ2FzZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoYXJhY3RlckJsb2Nrc1tpXSwg
Y2hhcmFjdGVyQmxvY2tzW2kgKyAxXSk7Ci0gICAgICAgICAgICBzd2l0Y2hTdHJpbmdSZWN1cnNl
KAotICAgICAgICAgICAgICAgIGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgY29tbW9uQ2hh
cnMgKyAxLAotICAgICAgICAgICAgICAgIGNoYXJhY3RlckNhc2VzW2ldLmJlZ2luLCBjaGFyYWN0
ZXJDYXNlc1tpXS5lbmQsIG1pbkxlbmd0aCwgYWxsTGVuZ3Roc0VxdWFsKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3V0Lm1fbmV4
dEJsb2NrID09IGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzd2l0Y2hTdHJpbmdT
bG93KFN3aXRjaERhdGEqIGRhdGEsIExWYWx1ZSBzdHJpbmcpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogV2Ugb3VnaHQgdG8gYmUgYWJsZSB0byB1c2UgY29tcHV0ZWQgZ290b3MgaGVyZS4gV2Ug
d291bGQgc2F2ZSB0aGUgbGFiZWxzIG9mIHRoZQotICAgICAgICAvLyBibG9ja3Mgd2Ugd2FudCB0
byBqdW1wIHRvLCBhbmQgdGhlbiByZXF1ZXN0IHRoZWlyIGFkZHJlc3NlcyBhZnRlciBjb21waWxh
dGlvbiBjb21wbGV0ZXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDQzNjkKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBicmFuY2hPZmZzZXQg
PSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldCksCi0gICAgICAgICAgICBtX2NhbGxG
cmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+c3dpdGNoVGFibGVJbmRleCksIHN0cmluZyk7
Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrKCkt
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
Ci0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PGludDMyX3Q+IGFscmVhZHlIYW5kbGVkOyAvLyBUaGVzZSBtYXkgYmUgbmVnYXRpdmUs
IG9yIHplcm8sIG9yIHByb2JhYmx5IG90aGVyIHN0dWZmLCB0b28uIFdlIGRvbid0IHdhbnQgdG8g
bWVzcyB3aXRoIEhhc2hTZXQncyBjb3JuZXIgY2FzZXMgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJl
IGFib3V0IHRocm91Z2hwdXQgaGVyZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZh
Y3QgdGhhdCB3ZSdyZSB1c2luZyB0aGUgYnl0ZWNvZGUncyBzd2l0Y2ggdGFibGUgbWVhbnMgdGhh
dCB0aGUKLSAgICAgICAgICAgIC8vIGZvbGxvd2luZyBERkcgSVIgdHJhbnNmb3JtYXRpb24gd291
bGQgYmUgaW52YWxpZC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBPcmlnaW5hbCBj
b2RlOgotICAgICAgICAgICAgLy8gICAgIHN3aXRjaCAodikgewotICAgICAgICAgICAgLy8gICAg
IGNhc2UgImZvbyI6Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKLSAgICAgICAgICAg
IC8vICAgICAgICAgdGhpbmdzKCk7Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgLy8gICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgLy8gICAgIH0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOZXcg
Y29kZToKLSAgICAgICAgICAgIC8vICAgICBzd2l0Y2ggKHYpIHsKLSAgICAgICAgICAgIC8vICAg
ICBjYXNlICJmb28iOgotICAgICAgICAgICAgLy8gICAgICAgICBpbnN0cnVtZW50Rm9vKCk7Ci0g
ICAgICAgICAgICAvLyAgICAgICAgIGdvdG8gX3RoaW5nczsKLSAgICAgICAgICAgIC8vICAgICBj
YXNlICJiYXIiOgotICAgICAgICAgICAgLy8gICAgICAgICBpbnN0cnVtZW50QmFyKCk7Ci0gICAg
ICAgICAgICAvLyAgICAgX3RoaW5nczoKLSAgICAgICAgICAgIC8vICAgICAgICAgdGhpbmdzKCk7
Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBMdWNraWx5LCB3ZSBkb24ndCBjdXJyZW50
bHkgZG8gYW55IHN1Y2ggdHJhbnNmb3JtYXRpb24uIEJ1dCBpdCdzIGtpbmQgb2Ygc2lsbHkgdGhh
dAotICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBpc3N1ZS4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2MzUKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA9IGRhdGEtPmNhc2VzW2ldOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9Ci0gICAgICAgICAgICAgICAgdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUu
c3RyaW5nSW1wbCgpKTsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBp
dGVyICE9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFhbHJlYWR5SGFuZGxlZC5pbnNlcnQoaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KS5z
ZWNvbmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNhc2VzLmFw
cGVuZChTd2l0Y2hDYXNlKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoaXRlci0+
dmFsdWUuYnJhbmNoT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICBsb3dCbG9jayhteUNhc2UudGFy
Z2V0LmJsb2NrKSwgV2VpZ2h0KG15Q2FzZS50YXJnZXQuY291bnQpKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAotICAgICAgICAgICAgYnJh
bmNoT2Zmc2V0LCBjYXNlcywgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spLAotICAg
ICAgICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7Ci0gICAgfQotICAgIAot
ICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIGF0IHRoZSBwb2ludCBvZiBjb2RlIGdlbmVyYXRpb24g
d2hlcmUgd2Uga25vdyB3aGF0IHRoZSByZXN1bHQgdHlwZSBpcy4KLSAgICAvLyBZb3UgY2FuIGVt
aXQgd2hhdGV2ZXIgY29kZSB5b3UgbGlrZSBhdCB0aGF0IHBvaW50LiBFeHBlY3RzIHlvdSB0byB0
ZXJtaW5hdGUgdGhlIGJhc2ljIGJsb2NrLgotICAgIC8vIFdoZW4gYnVpbGRUeXBlT2YoKSByZXR1
cm5zLCBpdCB3aWxsIGhhdmUgdGVybWluYXRlZCBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgaXQgY3Jl
YXRlZC4gU28sIGlmCi0gICAgLy8geW91IGFyZW4ndCB1c2luZyB0aGlzIGFzIHRoZSB0ZXJtaW5h
dG9yIG9mIGEgaGlnaC1sZXZlbCBibG9jaywgeW91IHNob3VsZCBjcmVhdGUgeW91ciBvd24KLSAg
ICAvLyBjb250aW5hdGlvbiBhbmQgc2V0IGl0IGFzIHRoZSBuZXh0QmxvY2sgKG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pKSBiZWZvcmUKLSAgICAvLyBjYWxsaW5nIHRo
aXMuIEZvciBleGFtcGxlOgotICAgIC8vCi0gICAgLy8gTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNeSBjb250aW51YXRpb24iKSk7Ci0gICAgLy8gTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0
aW9uKTsKLSAgICAvLyBidWlsZFR5cGVPZigKLSAgICAvLyAgICAgY2hpbGQsIHZhbHVlLAotICAg
IC8vICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgewotICAgIC8vICAgICAgICAgIGRvIHRoaW5n
czsKLSAgICAvLyAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgLy8gICAg
IH0pOwotICAgIC8vIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBidWlsZFR5cGVPZihFZGdlIGNo
aWxkLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgLy8gSW1wbGVtZW50
cyB0aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6Ci0gICAgICAgIC8vCi0gICAgICAg
IC8vIGlmIChpcyBjZWxsKSB7Ci0gICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7Ci0gICAg
ICAgIC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7Ci0gICAgICAgIC8vICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbjsKLSAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNuJ3Qg
aGF2ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsKLSAg
ICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVjdAotICAgICAgICAvLyAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOwotICAgICAg
ICAvLyAgICAgICAgIH0KLSAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7Ci0g
ICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZwotICAgICAgICAvLyAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9sCi0gICAgICAgIC8vICAgICB9Ci0gICAg
ICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7Ci0gICAgICAgIC8vICAgICByZXR1cm4gbnVt
YmVyCi0gICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgewotICAgICAgICAvLyAgICAgcmV0
dXJuIG9iamVjdAotICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKLSAgICAgICAg
Ly8gICAgIHJldHVybiBib29sZWFuCi0gICAgICAgIC8vIH0gZWxzZSB7Ci0gICAgICAgIC8vICAg
ICByZXR1cm4gdW5kZWZpbmVkCi0gICAgICAgIC8vIH0KLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBjZWxs
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIG9iamVjdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBmdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGZ1bmN0
aW9uIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGZ1bmN0aW9uIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIHJlYWxseU9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIHJlYWxseSBvYmplY3QgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHNsb3cgcGF0aCIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdW5yZWFjaGFibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImJ1aWxkVHlwZU9mIHVucmVhY2hhYmxlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3RP
YmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3Qgb2JqZWN0
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBzeW1ib2xDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzeW1ib2wg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIG51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG51bWJl
ciBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgbnVtYmVyIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIG5vdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVP
ZiBub3QgbnVsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBib29sZWFuQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgYm9vbGVhbiBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWls
ZFR5cGVPZiB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5j
aChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5z
dXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBvYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShvYmplY3RD
YXNlKSwgdW5zdXJlKG5vdE9iamVjdENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKG9iamVjdENhc2UsIGZ1bmN0aW9uQ2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgU3BlY09i
amVjdCksCi0gICAgICAgICAgICB1bnN1cmUoZnVuY3Rpb25DYXNlKSwgdW5zdXJlKG5vdEZ1bmN0
aW9uQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oZnVuY3Rpb25DYXNl
LCBub3RGdW5jdGlvbkNhc2UpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9u
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgcmVh
bGx5T2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhv
dGljRm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjT2JqZWN0IC0gU3Bl
Y0Z1bmN0aW9uKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHJlYWxs
eU9iamVjdENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlYWxseU9i
amVjdENhc2UsIHNsb3dQYXRoKTsKLSAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3Qp
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hhYmxl
KTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlw
ZW9mVHlwZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDM+IGNhc2VzOwotICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5j
b25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OlVuZGVmaW5lZCkpLCB1
bmRlZmluZWRDYXNlKSk7Ci0gICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNv
bnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6T2JqZWN0KSksIHJlYWxs
eU9iamVjdENhc2UpKTsKLSAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29u
c3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpGdW5jdGlvbikpLCBmdW5j
dGlvbkNhc2UpKTsKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24obV9vdXQuY2FzdFRv
SW50MzIocmVzdWx0KSwgY2FzZXMsIHVucmVhY2hhYmxlLCBXZWlnaHQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyh1bnJlYWNoYWJsZSwgbm90T2JqZWN0Q2FzZSk7Ci0gICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhub3RPYmplY3RDYXNlLCBzdHJpbmdDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgKFNwZWNDZWxsIC0g
U3BlY09iamVjdCkpLAotICAgICAgICAgICAgdW5zdXJlKHN0cmluZ0Nhc2UpLCB1bnN1cmUoc3lt
Ym9sQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyaW5nQ2FzZSwg
c3ltYm9sQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3RyaW5nKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN5bWJvbENhc2UsIG5vdENlbGxDYXNlKTsKLSAg
ICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTeW1ib2wpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIG51bWJlckNhc2UpOwotICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICBpc051bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiB+U3Bl
Y0NlbGwpLAotICAgICAgICAgICAgdW5zdXJlKG51bWJlckNhc2UpLCB1bnN1cmUobm90TnVtYmVy
Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obnVtYmVyQ2FzZSwgbm90
TnVtYmVyQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6TnVtYmVyKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE51bWJlckNhc2UsIG5vdE51bGxDYXNlKTsK
LSAgICAgICAgTFZhbHVlIGlzTnVsbDsKLSAgICAgICAgaWYgKHByb3ZlblR5cGUoY2hpbGQpICYg
U3BlY090aGVyKQotICAgICAgICAgICAgaXNOdWxsID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzTnVs
bCA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTnVsbCwgdW5z
dXJlKHJlYWxseU9iamVjdENhc2UpLCB1bnN1cmUobm90TnVsbENhc2UpKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE51bGxDYXNlLCBib29sZWFuQ2FzZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShj
aGlsZCkgJiB+KFNwZWNDZWxsIHwgU3BlY0Z1bGxOdW1iZXIpKSwKLSAgICAgICAgICAgIHVuc3Vy
ZShib29sZWFuQ2FzZSksIHVuc3VyZSh1bmRlZmluZWRDYXNlKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhib29sZWFuQ2FzZSwgdW5kZWZpbmVkQ2FzZSk7Ci0gICAgICAgIGZ1
bmN0b3IoVHlwZW9mVHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyh1bmRlZmluZWRDYXNlLCBsYXN0TmV4dCk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlw
ZTo6VW5kZWZpbmVkKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGRvdWJsZVRvSW50MzIoTFZh
bHVlIGRvdWJsZVZhbHVlLCBkb3VibGUgbG93LCBkb3VibGUgaGlnaCwgYm9vbCBpc1NpZ25lZCA9
IHRydWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBncmVhdEVub3VnaCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiZG91YmxlVG9JbnQzMiBncmVhdEVub3VnaCIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgd2l0aGluUmFuZ2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50
MzIgd2l0aGluUmFuZ2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIHNsb3dQYXRoIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50
MzIgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJs
b2NrLCAyPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5j
b25zdERvdWJsZShsb3cpKSwKLSAgICAgICAgICAgIHVuc3VyZShncmVhdEVub3VnaCksIHVuc3Vy
ZShzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhncmVhdEVub3VnaCwgd2l0aGluUmFuZ2UpOwotICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwoZG91YmxlVmFs
dWUsIG1fb3V0LmNvbnN0RG91YmxlKGhpZ2gpKSwKLSAgICAgICAgICAgIHVuc3VyZSh3aXRoaW5S
YW5nZSksIHVuc3VyZShzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8od2l0aGluUmFuZ2UsIHNsb3dQYXRoKTsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHQ7Ci0g
ICAgICAgIGlmIChpc1NpZ25lZCkKLSAgICAgICAgICAgIGZhc3RSZXN1bHQgPSBtX291dC5kb3Vi
bGVUb0ludChkb3VibGVWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhc3RSZXN1
bHQgPSBtX291dC5kb3VibGVUb1VJbnQoZG91YmxlVmFsdWUpOwotICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3IoZmFzdFJlc3VsdCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmNh
bGwobV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbih0b0ludDMyKSwgZG91YmxlVmFsdWUpKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGRv
dWJsZVRvSW50MzIoTFZhbHVlIGRvdWJsZVZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKE91dHB1
dDo6aGFzU2Vuc2libGVEb3VibGVUb0ludCgpKQotICAgICAgICAgICAgcmV0dXJuIHNlbnNpYmxl
RG91YmxlVG9JbnQzMihkb3VibGVWYWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbGlt
aXQgPSBwb3coMiwgMzEpIC0gMTsKLSAgICAgICAgcmV0dXJuIGRvdWJsZVRvSW50MzIoZG91Ymxl
VmFsdWUsIC1saW1pdCwgbGltaXQpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc2Vuc2libGVE
b3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzZW5zaWJsZSBkb3VibGVUb0lu
dDMyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzZW5zaWJsZSBkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIp
KTsKLQotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQuZG91YmxlVG9JbnQo
ZG91YmxlVmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKGZhc3RSZXN1bHRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDgwMDAw
MDAwKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlv
bikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuaW50
MzIsIG1fb3V0Lm9wZXJhdGlvbih0b0ludDMyKSwgZG91YmxlVmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQu
aW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMg
YSBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIGEgY29kZSBnZW5lcmF0b3IgdGhhdCBmaWxscyBpbiBh
IGdhcCBpbiB0aGUgY29kZSB1c2luZyBvdXIKLSAgICAvLyBvd24gTWFjcm9Bc3NlbWJsZXIuIFRo
aXMgaXMgdXNlZnVsIGZvciBzbG93IHBhdGhzIHRoYXQgaW52b2x2ZSBhIGxvdCBvZiBjb2RlIGFu
ZCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gcGF5IHRoZSBwcmljZSBvZiBMTFZNIG9wdGltaXpp
bmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBpZiBpdCBhY3R1
YWxseQotICAgIC8vIGV4ZWN1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYSBsYXp5IHNsb3cgcGF0
aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9mIHR3byBhZGRpdGlvbmFsIGp1bXBzLgotICAgIC8v
IEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdzIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaXMg
c2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlkLCBzbyB5b3UKLSAgICAvLyBoYXZlIHRvIHVzZSBh
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB0byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lz
dGVycyBhbmQgeW91IG1heSBoYXZlCi0gICAgLy8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlm
IHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZS4KLSAgICAvLwotICAgIC8v
IExhenkgc2xvdyBwYXRocyBpbnZvbHZlIHRocmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0
aW9uLiBFYWNoIHN0YWdlIGhhcyB1bmlxdWUKLSAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3ds
ZWRnZS4gVGhlIHN0YWdlcyBhcmU6Ci0gICAgLy8KLSAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJp
bmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4gdGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxh
c3QgdGltZSB5b3Ugd2lsbAotICAgIC8vICAgIGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRo
ZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRzIHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkg
c2xvdwotICAgIC8vICAgIHBhdGgsIHRoZW4geW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVu
dCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFyZ3MgYXJndW1lbnRzIGFmdGVyIHRoZQotICAgIC8v
ICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5nIGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMg
d2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFsdWVzLiBIZW5jZQotICAgIC8vICAgIHlvdSBwYXNz
IGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgpIGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJp
bmcgc3RhZ2UgKDIpOgotICAgIC8vCi0gICAgLy8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMgY29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGlj
aCB3ZSBrbm93Ci0gICAgLy8gICAgdGhlIG1hcHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRv
IHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhlIHJlZ2lzdGVycyB0aGF0IExMVk0KLSAgICAvLyAg
ICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1lbnRzLiBZb3UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0
byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBzaW5jZSB0aGVuCi0gICAgLy8gICAgdGhlIHNsb3cg
cGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBsYXppbHkgZ2VuZXJhdGVkLiBJbnN0ZWFkLCB5b3Ug
d2FudCB0byBzYXZlIHRoZQotICAgIC8vICAgIHJlZ2lzdGVycyBiZWluZyB1c2VkIGZvciB0aGUg
YXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdlbmVyYXRpb24gdG8gc3RhZ2UgKDMpIGJ5IGNyZWF0
aW5nCi0gICAgLy8gICAgYW5kIHJldHVybmluZyBhIExhenlTbG93UGF0aDo6R2VuZXJhdG9yOgot
ICAgIC8vCi0gICAgLy8gMykgTGF6eVNsb3dQYXRoJ3MgZ2VuZXJhdGUoKSBtZXRob2QuIFRoaXMg
Y29kZSBydW5zIGluIHJlc3BvbnNlIHRvIHRoZSBsYXp5IHNsb3cgcGF0aAotICAgIC8vICAgIGV4
ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlv
dSBjcmVhdGVkIGluIHN0YWdlICgyKS4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRp
bWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBv
bmUsIG9yIG1hbnkgdGltZXMuCi0gICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZv
a2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3
aGljaAotICAgIC8vIGNhc2Ugc3RhZ2UgKDIpIHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRl
IHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEganVtcCB0aHJlYWRpbmcpLAotICAgIC8vIGxlYWRp
bmcgdG8gbWFueSBjYWxscyB0byB5b3VyIHN0YWdlICgyKSBsYW1iZGEuIFN0YWdlICgzKSBtYXkg
YmUgY2FsbGVkIHplcm8gb3Igb25jZSBmb3IgZWFjaAotICAgIC8vIHN0YWdlICgyKS4gSXQgd2ls
bCBiZSBjYWxsZWQgemVybyB0aW1lcyBpZiB0aGUgc2xvdyBwYXRoIG5ldmVyIHJ1bnMuIFRoaXMg
aXMgd2hhdCB5b3UgaG9wZSBmb3IKLSAgICAvLyB3aGVuZXZlciB5b3UgdXNlIHRoZSBsYXp5U2xv
d1BhdGgoKSBtZWNoYW5pc20uCi0gICAgLy8KLSAgICAvLyBBIHR5cGljYWwgdXNlIG9mIGxhenlT
bG93UGF0aCgpIHdpbGwgbG9vayBsaWtlIHRoZSBleGFtcGxlIGJlbG93LCB3aGljaCBqdXN0IGNy
ZWF0ZXMgYSBzbG93Ci0gICAgLy8gcGF0aCB0aGF0IGFkZHMgc29tZSB2YWx1ZSB0byB0aGUgaW5w
dXQgYW5kIHJldHVybnMgaXQuCi0gICAgLy8KLSAgICAvLyAvLyBTdGFnZSAoMSkgaXMgaGVyZS4g
VGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggTFZhbHVlcyB0byB1
c2UgYXMgaW5wdXRzLgotICAgIC8vIC8vIE5vdGljZSBob3cgd2UgcGFzcyAiaW5wdXQiIGFzIGFu
IGFyZ3VtZW50IHRvIGxhenlTbG93UGF0aCgpLgotICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsK
LSAgICAvLyBpbnQgYWRkZW5kID0gLi4uOwotICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xv
d1BhdGgoCi0gICAgLy8gICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAvLyAgICAgICAgIC8v
IFN0YWdlICgyKSBpcyBoZXJlLiBUaGlzIGlzIHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91
dCB3aGljaCByZWdpc3RlcnMgYXJlIHVzZWQKLSAgICAvLyAgICAgICAgIC8vIGZvciB3aGljaCB2
YWx1ZXMuIExvY2F0aW9uIHplcm8gaXMgYWx3YXlzIHRoZSByZXR1cm4gdmFsdWUuIFlvdSBjYW4g
aWdub3JlIGl0IGlmCi0gICAgLy8gICAgICAgICAvLyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4g
YW55dGhpbmcuIExvY2F0aW9uIDEgaXMgdGhlIHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QKLSAgICAv
LyAgICAgICAgIC8vIGFyZ3VtZW50IHRvIHRoZSBsYXp5U2xvd1BhdGgoKSwgaS5lLiAiaW5wdXQi
LiBOb3RlIHRoYXQgdGhlIExvY2F0aW9uIG9iamVjdCBjb3VsZAotICAgIC8vICAgICAgICAgLy8g
YWxzbyBob2xkIGFuIEZQUiwgaWYgeW91IGFyZSBwYXNzaW5nIGEgZG91YmxlLgotICAgIC8vICAg
ICAgICAgR1BSUmVnIG91dHB1dEdQUiA9IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAv
LyAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAg
ICAvLyAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKLSAgICAv
LyAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgIC8vICAgICAgICAgICAgICAgICAvLyBTdGFnZSAo
MykgaXMgaGVyZS4gVGhpcyBpcyB3aGVuIHlvdSBnZW5lcmF0ZSBjb2RlLiBZb3UgaGF2ZSBhY2Nl
c3MgdG8gdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB5b3UgY29sbGVj
dGVkIGluIHN0YWdlICgyKSBiZWNhdXNlIHRoaXMgbGFtYmRhIGNsb3NlcyBvdmVyIHRob3NlCi0g
ICAgLy8gICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlcyAob3V0cHV0R1BSIGFuZCBpbnB1dEdQ
UikuIFlvdSBhbHNvIGhhdmUgYWNjZXNzIHRvIHdoYXRldmVyIGV4dHJhCi0gICAgLy8gICAgICAg
ICAgICAgICAgIC8vIGRhdGEgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMSksIHN1Y2ggYXMgdGhl
IGFkZGVuZCBpbiB0aGlzIGNhc2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIGppdC5hZGQzMihU
cnVzdGVkSW1tMzIoYWRkZW5kKSwgaW5wdXRHUFIsIG91dHB1dEdQUik7Ci0gICAgLy8gICAgICAg
ICAgICAgICAgIC8vIFlvdSBoYXZlIHRvIGVuZCBieSBqdW1waW5nIHRvIGRvbmUuIFRoZXJlIGlz
IG5vdGhpbmcgdG8gZmFsbCB0aHJvdWdoIHRvLgotICAgIC8vICAgICAgICAgICAgICAgICAvLyBZ
b3UgY2FuIGFsc28ganVtcCB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgKHNlZSBMYXp5U2xvd1Bh
dGguaCBmb3IgbW9yZQotICAgIC8vICAgICAgICAgICAgICAgICAvLyBpbmZvKS4gTm90ZSB0aGF0
IGN1cnJlbnRseSB5b3UgY2Fubm90IE9TUiBleGl0LgotICAgIC8vICAgICAgICAgICAgICAgICBw
YXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAvLyAgICAgICAgICAgICB9
KTsKLSAgICAvLyAgICAgfSwKLSAgICAvLyAgICAgaW5wdXQpOwotICAgIC8vCi0gICAgLy8gWW91
IGNhbiBiYXNpY2FsbHkgcGFzcyBhcyBtYW55IGlucHV0cyBhcyB5b3UgbGlrZSwgZWl0aGVyIHVz
aW5nIHRoaXMgdmFyYXJncyBmb3JtLCBvciBieQotICAgIC8vIHBhc3NpbmcgYSBWZWN0b3Igb2Yg
TFZhbHVlcy4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCBpZiB5b3VyIHNsb3cgcGF0aCBpcyBv
bmx5IGRvaW5nIGEgY2FsbCwgeW91IGNhbiB1c2UgdGhlIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KCkKLSAgICAvLyBoZWxwZXIuIEZvciBleGFtcGxlOgotICAgIC8vCi0gICAgLy8gTFZhbHVlIGlu
cHV0ID0gLi4uOwotICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCi0gICAgLy8g
ICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAvLyAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcigKLSAgICAvLyAgICAgICAgICAgICBvcGVyYXRpb25Eb1RoaW5ncywgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgIC8v
ICAgICB9LCBpbnB1dCk7Ci0gICAgLy8KLSAgICAvLyBGaW5hbGx5LCBub3RlIHRoYXQgYWxsIG9m
IHRoZSBsYW1iZGFzIC0gYm90aCB0aGUgc3RhZ2UgKDIpIGxhbWJkYSBhbmQgdGhlIHN0YWdlICgz
KSBsYW1iZGEgLQotICAgIC8vIHJ1biBhZnRlciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRo
ZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKLSAgICAv
LyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55IG9mIHRoZXNlIGxhbWJkYXMuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFs
dWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4g
YXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9yLCBW
ZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKLSAgICB7Ci0gICAg
ICAgIENvZGVPcmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAg
IAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9pbnQoQjM6
OkludDY0KTsKLSAgICAgICAgZm9yIChMVmFsdWUgYXJnIDogdXNlckFyZ3VtZW50cykKLSAgICAg
ICAgICAgIHJlc3VsdC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBCMzo6VmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwotCi0gICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgU3RhdGUqIHN0YXRl
ID0gJm1fZnRsU3RhdGU7Ci0KLSAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCi0gICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25z
OwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQjM6OlZhbHVlUmVwJiByZXAgOiBwYXJhbXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoTG9jYXRpb246OmZvclZhbHVl
UmVwKHJlcCkpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiBnZW5lcmF0b3IgPSBmdW5jdG9yKGxvY2F0aW9ucyk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAg
PSBqaXQucGF0Y2hhYmxlSnVtcCgpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotCi0gICAgICAgICAg
ICAgICAgUmVmUHRyPEV4Y2VwdGlvblRhcmdldD4gZXhjZXB0aW9uVGFyZ2V0ID0KLSAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMp
OwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEFzIHBhcnQgb2YgaGFuZGxpbmcgZXhjZXB0
aW9ucywgd2UgbmVlZCB0byBjcmVhdGUgYSBjb25jcmV0ZSBPU1JFeGl0IGhlcmUuCi0gICAgICAg
ICAgICAgICAgLy8gRG9pbmcgc28gc2hvdWxkIGF1dG9tYWdpY2FsbHkgcmVnaXN0ZXIgbGF0ZSBw
YXRocyB0aGF0IGVtaXQgZXhpdCB0aHVua3MuCi0KLSAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAu
bV9qdW1wLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHN0YXRlLT5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLmFwcGVuZChudWxscHRyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRv
dWNoaW5nUmVnaXN0ZXJzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IGppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCBzbyBsb25nIGFzIHdlJ3JlIGhlcmUsIHdlIGRvbid0IHJl
YWxseSBrbm93IGlmIG91ciBsYXRlIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1
bnMgYmVmb3JlIG9yIGFmdGVyIGFueSBvdGhlciBsYXRlIHBhdGhzIHRoYXQgd2UgbWlnaHQgZGVw
ZW5kIG9uLCBsaWtlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIHRo
dW5rLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSA9
IHN0YXRlLT5qaXRDb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gJnN0YXRl
LT5ncmFwaC5tX3ZtOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvckp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5n
ZXRDVElTdHViKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uSnVtcCBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihwYXRjaGFibGVKdW1wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmNvbW1v
bi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5r
ZWREb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
blRhcmdldC0+bGFiZWwobGlua0J1ZmZlciksIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFNpdGVJbmRleCwgZ2VuZXJhdG9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXRDb2RlLT5sYXp5U2xvd1BhdGhzW2luZGV4XSA9IFdURk1vdmUobGF6eVNs
b3dQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGUoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1h
dHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQotICAgIHsKLSAgICAgICAgYXBwZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
LCBmYWlsQ29uZGl0aW9uLCBtX29yaWdpbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdGVybWlu
YXRlKEV4aXRLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIGRpZEFscmVhZHlUZXJt
aW5hdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkaWRBbHJlYWR5VGVybWluYXRlKCkKLSAg
ICB7Ci0gICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdHlwZUNoZWNrKAotICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBo
aWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKLSAgICAgICAgTFZh
bHVlIGZhaWxDb25kaXRpb24sIEV4aXRLaW5kIGV4aXRLaW5kID0gQmFkVHlwZSkKLSAgICB7Ci0g
ICAgICAgIGFwcGVuZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24sIGV4aXRLaW5kKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBh
cHBlbmRUeXBlQ2hlY2soCi0gICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhp
Z2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAotICAgICAgICBMVmFs
dWUgZmFpbENvbmRpdGlvbiwgRXhpdEtpbmQgZXhpdEtpbmQpCi0gICAgewotICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVj
ayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Ci0gICAgICAgIGFwcGVuZE9TUkV4aXQoZXhpdEtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uLCBtX29yaWdpbik7Ci0g
ICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdo
KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd0ludDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0g
S25vd25JbnQzMlVzZSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgdGVybWlu
YXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJv
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIodmFs
dWUuYXNJbnQzMigpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAg
ICAgIAotICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHN0cmlj
dEludDUyVG9JbnQzMihlZGdlLCB2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZh
bHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RyaWN0SW50NTJUb0ludDMyKGVkZ2UsIGlu
dDUyVG9TdHJpY3RJbnQ1Mih2YWx1ZS52YWx1ZSgpKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1
ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVl
KCk7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1
bHQpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0
KTsKLSAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjSW50MzIpKTsKLSAgICAgICAgdGVy
bWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmludDMyWmVybzsKLSAg
ICB9Ci0gICAgCi0gICAgZW51bSBJbnQ1MktpbmQgeyBTdHJpY3RJbnQ1MiwgSW50NTIgfTsKLSAg
ICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQga2luZCkKLSAgICB7Ci0gICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJl
cFVzZSk7Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlOwotICAgICAg
ICAKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAg
ICAgICB2YWx1ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVz
LmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0cmljdEludDUyVG9JbnQ1Mih2YWx1ZS52YWx1ZSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RyaWN0SW50NTI6
Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsdWUgPSBtX2lu
dDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGludDUyVG9TdHJpY3RJbnQ1Mih2YWx1ZS52YWx1
ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX25vZGUsICFwcm92ZW5UeXBlKGVkZ2UpKTsKLSAgICAgICAgdGVybWluYXRl
KFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmludDY0WmVybzsKLSAgICB9Ci0g
ICAgCi0gICAgTFZhbHVlIGxvd0ludDUyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBsb3dJbnQ1MihlZGdlLCBJbnQ1Mik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJp
Y3RJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
U3RyaWN0SW50NTIpOwotICAgIH0KLSAgICAKLSAgICBib29sIGJldHRlclVzZVN0cmljdEludDUy
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gIWlzVmFsaWQobV9pbnQ1MlZhbHVl
cy5nZXQobm9kZSkpOwotICAgIH0KLSAgICBib29sIGJldHRlclVzZVN0cmljdEludDUyKEVkZ2Ug
ZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5v
ZGUoKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50NTJLaW5kIGJl
c3RJbnQ1MktpbmQoVCBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmlj
dEludDUyKG5vZGUpID8gU3RyaWN0SW50NTIgOiBJbnQ1MjsKLSAgICB9Ci0gICAgSW50NTJLaW5k
IG9wcG9zaXRlKEludDUyS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7
Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaWN0SW50NTI7Ci0g
ICAgICAgIGNhc2UgU3RyaWN0SW50NTI6Ci0gICAgICAgICAgICByZXR1cm4gSW50NTI7Ci0gICAg
ICAgIH0KLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwotICAgICAgICByZXR1cm4gSW50NTI7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dXaGlj
aGV2ZXJJbnQ1MihFZGdlIGVkZ2UsIEludDUyS2luZCYga2luZCkKLSAgICB7Ci0gICAgICAgIGtp
bmQgPSBiZXN0SW50NTJLaW5kKGVkZ2UpOwotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
a2luZCk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dDZWxsKEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAg
IHsKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IERGRzo6aXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cih2YWx1ZS5hc0NlbGwoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgdW5jaGVja2VkVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwotICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVu
Y2hlY2tlZFZhbHVlKSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRWYWx1ZSkp
OwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFZhbHVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2Up
ICYgU3BlY0NlbGwpKTsKLSAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmludFB0clplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dPYmpl
Y3QoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVz
ZSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKLSAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJpbmcoRWRnZSBlZGdlLCBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24p
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBLbm93blN0cmluZ1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdJZGVudFVz
ZSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJpbmdJZGVudChFZGdlIGVk
Z2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nSWRlbnRVc2UpOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZyhlZGdlLCBtb2RlKTsK
LSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmluZywgbV9oZWFw
cy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UsIHN0
cmluZywgc3RyaW5nSW1wbCk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdJbXBsOwotICAgIH0KLQot
ICAgIExWYWx1ZSBsb3dTeW1ib2woRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRf
VU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNl
S2luZCgpID09IFN5bWJvbFVzZSk7Ci0KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwo
ZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVN5bWJvbChlZGdlLCByZXN1bHQpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIExWYWx1ZSBsb3dOb25OdWxsT2JqZWN0
KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFu
ZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Up
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7
Ci0gICAgICAgIHNwZWN1bGF0ZU5vbk51bGxPYmplY3QoZWRnZSwgcmVzdWx0KTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd0Jvb2xlYW4oRWRnZSBl
ZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25Cb29sZWFuVXNlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
ZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+
YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAg
ICAgICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmNvbnN0Qm9vbCh2YWx1ZS5hc0Jvb2xlYW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKLSAg
ICAgICAgICAgIExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAg
ICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJveGVk
UmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQm9vbGVhbikpOwot
ICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwotICAgICAgICByZXR1cm4gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93RG91YmxlKEVkZ2UgZWRnZSkK
LSAgICB7Ci0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0RvdWJsZShlZGdl
LnVzZUtpbmQoKSkpOwotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwotICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXByb3ZlblR5cGUoZWRnZSkpOwotICAgICAgICB0ZXJtaW5h
dGUoVW5jb3VudGFibGUpOwotICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlWmVybzsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGxvd0pTVmFsdWUoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKLSAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVkZ2UudXNlS2luZCgpICE9IEludDUyUmVwVXNl
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGVkZ2UtPmFzSlNWYWx1
ZSgpKSk7Ci0KLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9p
bnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1f
Ym9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHZhbHVlLnZhbHVl
KCkpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJWYWx1ZSBub3QgZGVmaW5lZCIpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQotICAg
IHsKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZVZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBs
b3dDZWxsKGVkZ2UpOwotICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc3RyaWN0SW50
NTJUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LmNhc3RUb0ludDMyKHZhbHVlKTsKLSAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soCi0gICAgICAgICAgICBub1ZhbHVlKCksIGVkZ2UsIFNwZWNJbnQzMiwKLSAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKG1fb3V0LnNpZ25FeHQzMlRvNjQocmVzdWx0KSwgdmFsdWUpKTsKLSAg
ICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvRG91YmxlKExWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnRUb0RvdWJsZSh2YWx1ZSk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShMVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBpc0ludDMyID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpY3RJbnQ1MlRvSlNWYWx1ZSBpc0ludDMyIGNhc2UiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGlzRG91YmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpY3RJbnQ1MlRvSlNW
YWx1ZSBpc0RvdWJsZSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmljdEludDUyVG9KU1ZhbHVlIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0
czsKLSAgICAgICAgICAgIAotICAgICAgICBMVmFsdWUgaW50MzJWYWx1ZSA9IG1fb3V0LmNhc3RU
b0ludDMyKHZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQu
ZXF1YWwobV9vdXQuc2lnbkV4dDMyVG82NChpbnQzMlZhbHVlKSwgdmFsdWUpLAotICAgICAgICAg
ICAgdW5zdXJlKGlzSW50MzIpLCB1bnN1cmUoaXNEb3VibGUpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbnQzMiwgaXNEb3VibGUp
OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveEludDMy
KGludDMyVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveERvdWJsZShtX291
dC5pbnRUb0RvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDY0LCByZXN1bHRzKTsKLSAg
ICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQ1MihMVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9vdXQuc2hsKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGludDUy
VG9TdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQu
YVNocih2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7
Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc0ludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHBy
b3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0ludDMyKSkKLSAgICAgICAgICAgIHJldHVy
biBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5hYm92ZU9yRXF1YWwoanNWYWx1ZSwgbV90
YWdUeXBlTnVtYmVyKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzTm90SW50MzIoTFZhbHVlIGpzVmFs
dWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlm
IChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0ludDMyKSkKLSAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5iZWxvdyhqc1ZhbHVl
LCBtX3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICBMVmFsdWUgdW5ib3hJbnQzMihMVmFsdWUg
anNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5jYXN0VG9JbnQzMihqc1ZhbHVl
KTsKLSAgICB9Ci0gICAgTFZhbHVlIGJveEludDMyKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX291dC5hZGQobV9vdXQuemVyb0V4dCh2YWx1ZSwgbV9vdXQuaW50NjQpLCBt
X3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNDZWxsT3JNaXNjKExW
YWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewot
ICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0NlbGwg
fCBTcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4g
bV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7Ci0gICAgfQotICAg
IExWYWx1ZSBpc05vdENlbGxPck1pc2MoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQ
cm92ZW5WYWx1ZSh0eXBlLCB+KFNwZWNDZWxsIHwgU3BlY01pc2MpKSkKLSAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUs
IG1fdGFnVHlwZU51bWJlcik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSB1bmJveERvdWJsZShM
VmFsdWUganNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5iaXRDYXN0KG1fb3V0
LmFkZChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICB9
Ci0gICAgTFZhbHVlIGJveERvdWJsZShMVmFsdWUgZG91YmxlVmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQuc3ViKG1fb3V0LmJpdENhc3QoZG91YmxlVmFsdWUsIG1fb3V0LmludDY0
KSwgbV90YWdUeXBlTnVtYmVyKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGpzVmFsdWVUb1N0
cmljdEludDUyKEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUpCi0gICAgewotICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1
MiB1bmJveGluZyBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgZG91YmxlIGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBpc05vdEludDMyOwotICAgICAgICBpZiAoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSkKLSAgICAgICAgICAgIGlzTm90
SW50MzIgPSBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2ludGVycHJl
dGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIH5TcGVjSW50MzIpKQotICAgICAgICAgICAgaXNOb3RJ
bnQzMiA9IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpc05v
dEludDMyID0gdGhpcy0+aXNOb3RJbnQzMihib3hlZFZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJh
bmNoKGlzTm90SW50MzIsIHVuc3VyZShkb3VibGVDYXNlKSwgdW5zdXJlKGludENhc2UpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGludENhc2UsIGRvdWJsZUNhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGludFRvSW50NTIgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5zaWduRXh0
MzJUbzY0KHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcG9zc2libGVSZXN1
bHQgPSBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKSwgYm94ZWRWYWx1ZSk7Ci0gICAg
ICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkVmFsdWUp
LCBlZGdlLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwKLSAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Om5vdEludDUy
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGRvdWJsZVRvSW50NTIg
PSBtX291dC5hbmNob3IocG9zc2libGVSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaSht
X291dC5pbnQ2NCwgaW50VG9JbnQ1MiwgZG91YmxlVG9JbnQ1Mik7Ci0gICAgfQotICAgIAotICAg
IExWYWx1ZSBkb3VibGVUb1N0cmljdEludDUyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydERvdWJsZVRv
SW50NTIpLCB2YWx1ZSk7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKElu
dDUyT3ZlcmZsb3csCi0gICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNJ
bnQ1MkFzRG91YmxlLAotICAgICAgICAgICAgbV9vdXQuZXF1YWwocG9zc2libGVSZXN1bHQsIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6bm90SW50NTIpKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gcG9zc2libGVSZXN1bHQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGNvbnZlcnREb3VibGVU
b0ludDMyKExWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRDaGVja05lZ2F0aXZlWmVybykKLSAgICB7
Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVUb0ludCh2YWx1ZSk7
Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0Lmlu
dFRvRG91YmxlKGludGVnZXJWYWx1ZSk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZU5vdENvbnZlcnRp
YmxlVG9JbnRlZ2VyID0gbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgaW50
ZWdlclZhbHVlQ29udmVydGVkVG9Eb3VibGUpOwotICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3cs
IEZvcm1hdHRlZFZhbHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2RlLCB2YWx1ZU5v
dENvbnZlcnRpYmxlVG9JbnRlZ2VyKTsKLQotICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2
ZVplcm8pIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHZhbHVlSXNaZXJvID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb252ZXJ0RG91YmxlVG9JbnQzMiBvbiB6ZXJvIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb252
ZXJ0RG91YmxlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuaXNaZXJvMzIoaW50ZWdlclZhbHVlKSwgdW5zdXJlKHZhbHVlSXNaZXJvKSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHZhbHVlSXNaZXJvLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICBMVmFsdWUgZG91YmxlQml0Y2FzdFRvSW50NjQgPSBtX291dC5iaXRDYXN0KHZhbHVlLCBtX291
dC5pbnQ2NCk7Ci0gICAgICAgICAgICBMVmFsdWUgc2lnbkJpdFNldCA9IG1fb3V0Lmxlc3NUaGFu
KGRvdWJsZUJpdGNhc3RUb0ludDY0LCBtX291dC5jb25zdEludDY0KDApKTsKLQotICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgRm9ybWF0dGVkVmFsdWUoRGF0YUZvcm1hdERvdWJs
ZSwgdmFsdWUpLCBtX25vZGUsIHNpZ25CaXRTZXQpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludGVnZXJWYWx1ZTsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgaXNOdW1iZXIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQ
cm92ZW5WYWx1ZSh0eXBlLCBTcGVjRnVsbE51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwotICAgICAgICByZXR1cm4gaXNOb3RDZWxsT3JNaXNjKGpzVmFsdWUpOwotICAgIH0KLSAg
ICBMVmFsdWUgaXNOb3ROdW1iZXIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlLCB+U3BlY0Z1bGxOdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKLSAgICAgICAgcmV0dXJuIGlzQ2VsbE9yTWlzYyhqc1ZhbHVlKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90Q2VsbChMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUsIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ01hc2spOwotICAg
IH0KLSAgICAKLSAgICBMVmFsdWUgaXNDZWxsKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9
IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0NlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82NChqc1ZhbHVlLCBtX3RhZ01hc2sp
OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RNaXNjKExWYWx1ZSB2YWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBw
cm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmUodmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVGFnQml0VHlwZU90aGVyIHwgVGFnQml0Qm9vbCB8IFRhZ0JpdFVuZGVmaW5lZCkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNNaXNjKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4g
PSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNNaXNjKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92
ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzTm90TWlzYyh2YWx1ZSkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RCb29sZWFuKExWYWx1ZSBqc1ZhbHVlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVl
IHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNCb29sZWFuKSkKLSAgICAgICAgICAg
IHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KAotICAg
ICAgICAgICAgbV9vdXQuYml0WG9yKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxz
ZSkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCh+MSkpOwotICAgIH0KLSAgICBMVmFs
dWUgaXNCb29sZWFuKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUo
dHlwZSwgU3BlY0Jvb2xlYW4pKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICB9Ci0g
ICAgTFZhbHVlIHVuYm94Qm9vbGVhbihMVmFsdWUganNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IFdlIHdhbnQgdG8gdXNlIGEgY2FzdCB0aGF0IGd1YXJhbnRlZXMgdGhhdCBMTFZNIGtub3dzIHRo
YXQgZXZlbiB0aGUgaW50ZWdlcgotICAgICAgICAvLyB2YWx1ZSBpcyBqdXN0IDAgb3IgMS4gQnV0
IGZvciBub3cgd2UgZG8gaXQgdGhlIGR1bWIgd2F5LgotICAgICAgICByZXR1cm4gbV9vdXQubm90
WmVybzY0KG1fb3V0LmJpdEFuZChqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KDEpKSk7Ci0gICAg
fQotICAgIExWYWx1ZSBib3hCb29sZWFuKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICB2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChW
YWx1ZVRydWUpLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90T3RoZXIoTFZhbHVlIHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
U3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVu
VmFsdWUodHlwZSwgflNwZWNPdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5iaXRBbmQodmFs
dWUsIG1fb3V0LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAotICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzT3RoZXIoTFZh
bHVlIHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAg
ICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY090aGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5lcXVhbCgK
LSAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+VGFnQml0
VW5kZWZpbmVkKSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNQcm92ZW5WYWx1ZShTcGVjdWxhdGVkVHlwZSBwcm92
ZW5UeXBlLCBTcGVjdWxhdGVkVHlwZSB3YW50ZWRUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSAmIH53YW50ZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5ib29s
ZWFuVHJ1ZTsKLSAgICAgICAgaWYgKCEocHJvdmVuVHlwZSAmIHdhbnRlZFR5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgdm9pZCBzcGVjdWxhdGUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgotICAgICAgICBjYXNl
IEtub3duU3RyaW5nVXNlOgotICAgICAgICBjYXNlIEtub3duUHJpbWl0aXZlVXNlOgotICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToK
LSAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90
aGVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS25vd25DZWxsVXNl
OgotICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2Up
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Ci0gICAg
ICAgICAgICBzcGVjdWxhdGVNYWNoaW5lSW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT2JqZWN0VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6Ci0gICAgICAg
ICAgICBzcGVjdWxhdGVGdW5jdGlvbihlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90
aGVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmluYWxPYmplY3RV
c2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ1VzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ0lkZW50
VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTeW1ib2xVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2woZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmpl
Y3RVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3QoZWRnZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KGVkZ2UpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTnVtYmVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVhbE51bWJlclVz
ZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZVJlYWxOdW1iZXIoZWRnZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgotICAgICAgICAgICAgc3BlY3Vs
YXRlRG91YmxlUmVwUmVhbChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVEb3VibGVSZXBN
YWNoaW5lSW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm9vbGVh
blVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBOb3RTdHJpbmdWYXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxh
dGVOb3RTdHJpbmdWYXIoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b3RDZWxsVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE90aGVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRl
T3RoZXIoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNaXNjVXNlOgot
ICAgICAgICAgICAgc3BlY3VsYXRlTWlzYyhlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVu
c3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBzcGVjdWxhdGUoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNw
ZWN1bGF0ZShlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVJbnQzMihFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBsb3dJbnQzMihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGxvd0NlbGwoZWRn
ZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRp
b24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc05vdENlbGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIEZUTF9U
WVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
LCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVUb1N0cmljdEludDUyKGVkZ2Us
IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSBpc09iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
cHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAg
bV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoT2JqZWN0VHlwZSkpOwotICAgIH0KLQotICAg
IExWYWx1ZSBpc05vdE9iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHBy
b3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KAotICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoT2JqZWN0VHlwZSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBp
c05vdFN0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9w
KQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUg
JiBTcGVjQ2VsbCwgflNwZWNTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAg
ICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGlzU3RyaW5nKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxU
b3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlw
ZSAmIFNwZWNDZWxsLCBTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0g
ICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxs
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGlz
Tm90U3ltYm9sKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAm
IFNwZWNDZWxsLCB+U3BlY1N5bWJvbCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMih2bSgpLnN5bWJvbFN0cnVjdHVyZS0+aWQoKSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBp
c0FycmF5VHlwZShMVmFsdWUgY2VsbCwgQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDha
ZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgotICAgICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJVbmV4cGVjdGVkIG9yaWdpbmFsIGFycmF5Iik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIo
SXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoSXNBcnJheSB8IGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6Tm9uQXJyYXk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5OjpPcmlnaW5hbE5vbkFycmF5OgotICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwg
bV9vdXQuY29uc3RJbnQzMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihhcnJheU1vZGUuc2hhcGVNYXNrKCkpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5iaXRBbmQoaW5kZXhpbmdUeXBlLCBtX291dC5jb25zdEludDMyKEluZGV4aW5nU2hhcGVN
YXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoYXJyYXlNb2RlLnNo
YXBlTWFzaygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlw
ZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUoYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCkpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGlzRnVuY3Rpb24oTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIFNwZWNGdW5jdGlvbikpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gaXNUeXBlKGNlbGwsIEpTRnVuY3Rpb25UeXBlKTsK
LSAgICB9Ci0gICAgTFZhbHVlIGlzTm90RnVuY3Rpb24oTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVu
ID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjRnVuY3Rpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIGlzTm90VHlwZShjZWxsLCBKU0Z1
bmN0aW9uVHlwZSk7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgTFZhbHVlIGlzRXhvdGljRm9y
VHlwZW9mKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoISh0eXBlICYgU3BlY09iamVjdE90aGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9u
WmVybzMyKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKTsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGlzVHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMih0eXBlKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdFR5
cGUoTFZhbHVlIGNlbGwsIEpTVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmxvZ2ljYWxOb3QoaXNUeXBlKGNlbGwsIHR5cGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZU
TF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY09iamVjdCwgaXNOb3RP
YmplY3QoY2VsbCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdl
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSBlZGdlLCBM
VmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShj
ZWxsKSwgZWRnZSwgU3BlY0Z1bmN0aW9uLCBpc05vdEZ1bmN0aW9uKGNlbGwpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlIGVkZ2UpCi0gICAgewotICAgICAg
ICBzcGVjdWxhdGVGdW5jdGlvbihlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVy
IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBwcmltaXRpdmUgY2FzZSIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmJyYW5jaChpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1
bnN1cmUocHJpbWl0aXZlQ2FzZSksIHVuc3VyZShjZWxsQ2FzZSkpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgcHJpbWl0
aXZlQ2FzZSk7Ci0gICAgICAgIAotICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAg
IGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgaXNO
b3RPYmplY3QodmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHByaW1pdGl2ZUNhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05v
dE90aGVyKHZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlIGVk
Z2UsIExWYWx1ZSBjZWxsKQotICAgIHsKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNGaW5hbE9iamVjdCwgaXNOb3RUeXBl
KGNlbGwsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZUZpbmFsT2JqZWN0KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQotICAgIHsKLSAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLCBp
c05vdFN0cmluZyhjZWxsKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdl
IGVkZ2UsIExWYWx1ZSBzdHJpbmcsIExWYWx1ZSBzdHJpbmdJbXBsKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8
IH5TcGVjU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwgZWRnZS5ub2RlKCksIG1fb3V0
LmlzTnVsbChzdHJpbmdJbXBsKSk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsKLSAgICAgICAgbV9p
bnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ0lkZW50IHwgflNwZWNTdHJpbmcpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ0lkZW50KEVkZ2UgZWRnZSkKLSAg
ICB7Ci0gICAgICAgIGxvd1N0cmluZ0lkZW50KGVkZ2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZ09iamVjdChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RG
b3JDZWxsKGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgICAgICBtX2ludGVycHJldGVyLmZpbHRl
cihlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdP
YmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgU3RyaW5nT3JT
dHJpbmdPYmplY3Qgbm90IHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBTdHJpbmdPclN0cmlu
Z09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0
dXJlSUQgPSBtX291dC5sb2FkMzIobG93Q2VsbChlZGdlKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbChz
dHJ1Y3R1cmVJRCwgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkp
LAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RTdHJpbmcpKTsK
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
bm90U3RyaW5nLCBjb250aW51YXRpb24pOwotICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RG
b3JTdHJ1Y3R1cmVJRChlZGdlLCBzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRn
ZSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3QpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvckNlbGwoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAg
ICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKGVkZ2UsIG1f
b3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKEVkZ2UgZWRn
ZSwgTFZhbHVlIHN0cnVjdHVyZUlEKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChhYnN0cmFjdFN0cnVjdHVyZShlZGdlKS5pc1N1YnNldE9mKFN0cnVjdHVy
ZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9W
YWx1ZSgpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBz
cGVjdWxhdGVTeW1ib2woRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZU
TF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1N5bWJvbCB8IH5TcGVj
Q2VsbCwgaXNOb3RTeW1ib2woY2VsbCkpOwotICAgIH0KLQotICAgIHZvaWQgc3BlY3VsYXRlU3lt
Ym9sKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN5bWJvbChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNwZWN1bGF0ZU5vbk51bGxPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFs
dWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY09iamVjdCwgaXNOb3RPYmplY3QoY2VsbCkpOwotICAg
ICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZS5ub2RlKCksCi0gICAgICAg
ICAgICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIsIGlzTm90TnVtYmVyKHZhbHVlKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICAvLyBEbyBh
biBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJsZSgpIGNhbiBjcmVhdGUgYSBsb3Qg
b2YgY29udHJvbCBmbG93LgotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAg
ICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1
bGF0ZVJlYWxOdW1iZXIgaW50IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlUmVhbE51bWJlciBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBt
X291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAg
dXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgdHlwZUNoZWNrKAotICAgICAgICAgICAganNWYWx1
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwK
LSAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkgJiB+U3BlY0Z1bGxEb3VibGUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSBlZGdlKQotICAg
IHsKLSAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhlcmUgYmVjYXVzZSBsb3dEb3VibGUo
KSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4KLSAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGVkZ2UpOwotICAgICAgICBGVExf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0Rv
dWJsZVJlYWwsCi0gICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZh
bHVlLCB2YWx1ZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcE1h
Y2hpbmVJbnQoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgZG91YmxlVG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dEb3VibGUoZWRnZSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
bG93Qm9vbGVhbihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOb3RTdHJp
bmdWYXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIH5TcGVjU3RyaW5nVmFyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgaXMgY2Vs
bCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgaXMgc3RyaW5nIGNhc2UiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGlz
Q2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2Fz
ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UsIHZhbHVlLCBtX291dC5sb2FkUHRyKHZh
bHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRnZSBl
ZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVk
Z2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICB0
eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgflNwZWNDZWxsLCBpc0NlbGwodmFs
dWUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIHR5cGVDaGVj
ayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkKLSAgICB7
Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFs
dWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgdHlwZUNoZWNrKGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05vdE1pc2ModmFsdWUpKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3Rp
bGxWYWxpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBsb2FkQ2VsbFN0YXRlKExWYWx1ZSBiYXNlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X2NlbGxTdGF0ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBi
YXNlKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgY29u
dGludWF0aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0
Lm5vdFplcm8zMihsb2FkQ2VsbFN0YXRlKGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd1BhdGgpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIC8vIFdlIGVtaXQg
dGhlIHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRo
aXMgd2lsbCBuZXZlciBmaXJlLiBBbmQKLSAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0
IG1ha2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCBy
YXRoZXIgdGhhbgotICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9wdGltaXppbmcgaXQu
Ci0gICAgICAgIGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIo
KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQ
YXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVn
aXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3Igc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNw
YWNlRm9yQ0NhbGwpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBhdGggY2FsbCwgd2UgZG9uJ3Qg
aGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2ZSB0aGVtIGFnYWluLgotICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0KHNj
cmF0Y2gxLCBzY3JhdGNoMikpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmll
ckJ1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJp
ZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWws
IHNjcmF0Y2gyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIsIHdy
aXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJy
aWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0NhbGxIZWxwZXJz
OjpTY2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGpp
dCwgcHJlc2VydmVkU3RhdGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9u
ZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbmVl
ZFRvRmx1c2gubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0LCBwYXJh
bXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1
ZmZlciwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BS
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGJhc2Up
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLSAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5j
dGlvbiwgQXJncy4uLiBhcmdzKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbCh0eXBlLCBmdW5jdGlvbiwgYXJncy4uLik7
Ci0gICAgICAgIGNhbGxDaGVjaygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNhbGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAgIHsK
LSAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKLSAgICAgICAgbV9vdXQuc3RvcmUz
MigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAot
ICAgICAgICAgICAgdGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNhbGxQcmVmbGlnaHQoKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodChjb2Rl
T3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkpOwotICAgIH0KLQotICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
aWYgKG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIKLSAgICAgICAgICAgIHx8
IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyCi0gICAgICAgICAg
ICB8fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBhcmlzZXMgd2hlbiB5b3UgaGF2ZSBhIHNpdHVh
dGlvbiBsaWtlIHRoaXM6Ci0gICAgICAgICAgICAvLyBmb28gbWFrZXMgYSBjYWxsIHRvIGJhciwg
YmFyIGlzIGlubGluZWQgaW4gZm9vLiBiYXIgbWFrZXMgYSBjYWxsCi0gICAgICAgICAgICAvLyB0
byBiYXogYW5kIGJheiBpcyBpbmxpbmVkIGluIGJhci4gQW5kIHRoZW4gYmF6IG1ha2VzIGEgdGFp
bC1jYWxsIHRvIGpheiwKLSAgICAgICAgICAgIC8vIGFuZCBqYXogaXMgaW5saW5lZCBpbiBiYXou
IFdlIHdhbnQgdGhlIGNhbGxmcmFtZSBmb3IgamF6IHRvIGFwcGVhciB0byAKLSAgICAgICAgICAg
IC8vIGhhdmUgY2FsbGVyIGJlIGJhci4KLSAgICAgICAgICAgIGNvZGVPcmlnaW4gPSAqY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjYWxsQ2hlY2soKQotICAgIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1
enooKSkKLSAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25FeGNlcHRpb25GdXp6KSwgbV9jYWxsRnJhbWUpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGV4Y2VwdGlvbiA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSh2bSgp
LmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7Ci0gICAgICAgIExWYWx1ZSBoYWRFeGNlcHRpb24gPSBt
X291dC5ub3RaZXJvNjQoZXhjZXB0aW9uKTsKLQotICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hP
cmlnaW47Ci0gICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwotICAgICAgICBp
ZiAobV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JF
eGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKSkgewotICAgICAgICAgICAgYm9v
bCBleGl0T0sgPSB0cnVlOwotICAgICAgICAgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSB0
cnVlOwotICAgICAgICAgICAgYXBwZW5kT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBFeGNlcHRp
b25DaGVjaywgbm9WYWx1ZSgpLCBudWxscHRyLCBoYWRFeGNlcHRpb24sCi0gICAgICAgICAgICAg
ICAgbV9vcmlnaW4ud2l0aEZvckV4aXRBbmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKSwg
aXNFeGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
RXhjZXB0aW9uIGNoZWNrIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBoYWRFeGNlcHRpb24sIHJhcmVseShtX2hhbmRsZUV4Y2VwdGlvbnMpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7Ci0gICAgfQotCi0gICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhQYXRjaHBvaW50VmFsdWUqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwotICAgICAgICBIYW5kbGVySW5m
byogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgYm9vbCB3aWxsQ2F0Y2hFeGNlcHRpb24gPSBt
X2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKG1fb3JpZ2luLmZvckV4aXQs
IG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICBpZiAoIXdpbGxDYXRj
aEV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
OjpkZWZhdWx0SGFuZGxlKG1fZnRsU3RhdGUpOwotCi0gICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBQYXRjaHBvaW50IGV4
Y2VwdGlvbiBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRv
cnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxu
Iik7Ci0gICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwg
bGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGV4aXRPSyA9IHRydWU7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9v
cmlnaW4ud2l0aEZvckV4aXRBbmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKTsKLQotICAg
ICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOwotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIG9m
ZnNldCBpbnRvIHRoZSBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgd2hlcmUgd2Ugd2lsbCBmaW5k
IHRoZSBleGl0IGFyZ3VtZW50cwotICAgICAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gYXBwZW5kLiBX
ZSBuZWVkIHRvIGFjY291bnQgZm9yIGJvdGggdGhlIGNoaWxkcmVuIHdlJ3ZlIGFscmVhZHkgYWRk
ZWQsIGFuZAotICAgICAgICAvLyBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmVzdWx0IHZhbHVl
IGlmIHRoZSBwYXRjaHBvaW50IGlzIG5vdCB2b2lkLgotICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9p
ZCkKLSAgICAgICAgICAgIG9mZnNldCsrOwotCi0gICAgICAgIC8vIFVzZSBMYXRlQ29sZEFueSB0
byBlbnN1cmUgdGhhdCB0aGUgc3RhY2ttYXAgYXJndW1lbnRzIGludGVyZmVyZSB3aXRoIHRoZSBw
YXRjaHBvaW50J3MKLSAgICAgICAgLy8gcmVzdWx0IGFuZCB3aXRoIGFueSBsYXRlLWNsb2JiZXJl
ZCByZWdpc3RlcnMuCi0gICAgICAgIHZhbHVlLT5hcHBlbmRWZWN0b3JXaXRoUmVwKAotICAgICAg
ICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBvcENhdGNoT3JpZ2luLCBu
b1ZhbHVlKCkpLAotICAgICAgICAgICAgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLQotICAgICAg
ICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAotICAgICAgICAgICAg
bV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhjZXB0aW9uSGFu
ZGxlcik7Ci0gICAgfQotCi0gICAgTEJhc2ljQmxvY2sgbG93QmxvY2soREZHOjpCYXNpY0Jsb2Nr
KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwotICAg
IH0KLQotICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygKLSAgICAg
ICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRP
U1JFeGl0KAotICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwgCi0gICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQotICAgIHsKLSAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4i
KTsKLSAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBs
aXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBvcmlnaW4uZXhpdE9LKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChkb09TUkV4aXRGdXp6aW5nKCkgJiYgIWlzRXhjZXB0aW9uSGFuZGxlcikg
ewotICAgICAgICAgICAgTFZhbHVlIG51bWJlck9mRnV6ekNoZWNrcyA9IG1fb3V0LmFkZCgKLSAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUoJmdfbnVtYmVyT2ZPU1JF
eGl0RnV6ekNoZWNrcykpLAotICAgICAgICAgICAgICAgIG1fb3V0LmludDMyT25lKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihudW1iZXJPZkZ1enpDaGVja3MsIG1f
b3V0LmFic29sdXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHVuc2lnbmVkIGF0T3JBZnRlciA9IE9wdGlvbnM6OmZpcmVPU1JF
eGl0RnV6ekF0T3JBZnRlcigpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiA9IG1f
b3V0LmJpdE9yKAotICAgICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobnVtYmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5j
b25zdEludDMyKGF0T3JBZnRlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh1
bnNpZ25lZCBhdCA9IE9wdGlvbnM6OmZpcmVPU1JFeGl0RnV6ekF0KCkpIHsKLSAgICAgICAgICAg
ICAgICBmYWlsQ29uZGl0aW9uID0gbV9vdXQuYml0T3IoCi0gICAgICAgICAgICAgICAgICAgIGZh
aWxDb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKG51bWJlck9mRnV6
ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBibGVzc1NwZWN1bGF0aW9uKAotICAgICAgICAg
ICAgbV9vdXQuc3BlY3VsYXRlKGZhaWxDb25kaXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCBvcmlnaW4pOwotICAgIH0KLQotICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1Zh
bHVlKiB2YWx1ZSwgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUq
IGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4pCi0gICAgewotICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1
ZSwgaGlnaFZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlLT5hcHBlbmRDb2xkQW55cyhi
dWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9yaWdpbi5mb3JFeGl0LCBsb3dWYWx1
ZSkpOwotCi0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICB2YWx1
ZS0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgZXhpdERlc2NyaXB0b3ItPmVtaXRPU1JFeGl0KAotICAgICAgICAgICAgICAgICAgICAqc3Rh
dGUsIGtpbmQsIG9yaWdpbiwgaml0LCBwYXJhbXMsIDApOwotICAgICAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAg
ICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCi0gICAgICAgIHVuc2lnbmVkIG9mZnNldE9mRXhp
dEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMgPSAwKQotICAgIHsKLSAgICAgICAgU3RhY2tt
YXBBcmd1bWVudExpc3QgcmVzdWx0OwotICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoCi0gICAg
ICAgICAgICBleGl0RGVzY3JpcHRvciwgZXhpdE9yaWdpbiwgcmVzdWx0LCBsb3dWYWx1ZSwgb2Zm
c2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAg
ICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsCi0gICAgICAgIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMgPSAwKQotICAgIHsKLSAgICAgICAgaWYgKCEhbG93VmFsdWUpCi0gICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgQXZh
aWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpOwot
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmVCeUxpdmVuZXNzKG1fZ3JhcGgsIGV4aXRPcmln
aW4pOwotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qPiBtYXA7Ci0gICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxh
YmlsaXR5KAotICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQo
bm9kZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9k
ZS0+b3AoKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBv
cGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fsc1tpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsCi0gICAgICAg
ICAgICAgICAgICAgICghKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkpIHx8IG1fZ3Jh
cGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7Ci0gICAgICAgICAgICBpZiAoZXhpdFZhbHVl
Lmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQotICAgICAgICAgICAgICAgIGV4aXRWYWx1
ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJndW1l
bnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+bV92
YWx1ZXNbaV0gPSBleGl0VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAo
YXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOwotICAgICAgICAgICAgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7Ci0gICAg
ICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFy
Z3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZXhpdFZhbHVl
Lmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQotICAgICAgICAgICAgICAgIGV4aXRWYWx1
ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJndW1l
bnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFk
ZCgKLSAgICAgICAgICAgICAgICBoZWFwUGFpci5rZXkuZGVzY3JpcHRvcigpLAotICAgICAgICAg
ICAgICAgIGV4aXRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
RXhpdCB2YWx1ZXM6ICIsIGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcywgIlxuIik7Ci0gICAgICAg
ICAgICBpZiAoIWV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBNYXRlcmlhbGl6YXRpb25zOiBcbiIp
OwotICAgICAgICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1h
dGVyaWFsaXphdGlvbiA6IGV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgICIsIHBvaW50ZXJEdW1wKG1hdGVy
aWFsaXphdGlvbiksICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eSgKLSAgICAgICAgU3RhY2ttYXBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5KQotICAgIHsKLSAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNo
ZWRBdCgpOwotICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgIGNhc2Ug
RGVhZEZsdXNoOgotICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAgICAgICAgICBp
ZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZh
bHVlRm9yTm9kZShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4g
SXQgY291bGQgYmUgZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCi0gICAgICAgICAg
ICAvLyBiZWVuIGtpbGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhp
bmdzIGV2ZW4gaWYgdGhleSB3ZXJlIGxpdmUgaW4KLSAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgot
ICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwotCi0gICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6Ci0gICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgIGNhc2UgRmx1
c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZs
dXNoZWRJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFj
a0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpp
bkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNo
IGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgfQotICAg
IAotICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKAotICAgICAgICBTdGFja21hcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbio+JiBtYXAsCi0gICAgICAgIE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICAvLyBOT1RFOiBJbiBGVEwtPkIzLCB3ZSBjYW5ub3QgZ2VuZXJhdGUgY29kZSBoZXJlLCBiZWNh
dXNlIG1fb3V0cHV0IGlzIHBvc2l0aW9uZWQgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIHN0YWNrbWFw
IHZhbHVlLiBMaWtlIGFsbCB2YWx1ZXMsIHRoZSBzdGFja21hcCB2YWx1ZSBjYW5ub3QgdXNlIGEg
Y2hpbGQgdGhhdCBpcyBkZWZpbmVkIGFmdGVyCi0gICAgICAgIC8vIGl0LgotICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICBBU1NFUlQobm9k
ZS0+aGFzUmVzdWx0KCkpOwotCi0gICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6Ci0gICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBpbiBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4g
SSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxkLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBp
dCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFs
dWU6OmNvbnN0YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzUGhhbnRvbUFsbG9j
YXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxp
emVOZXdPYmplY3QobWFwLmdldChub2RlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2F2YWlsYWJsZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IEF2YWlsYWJsZVJlY292ZXJ5IHJlY292ZXJ5ID0gbV9hdmFpbGFibGVSZWNvdmVyaWVzW2ldOwot
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5Lm5vZGUoKSAhPSBub2RlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9IEV4aXRWYWx1ZTo6cmVj
b3ZlcnkoCi0gICAgICAgICAgICAgICAgcmVjb3Zlcnkub3Bjb2RlKCksIGFyZ3VtZW50cy5zaXpl
KCksIGFyZ3VtZW50cy5zaXplKCkgKyAxLAotICAgICAgICAgICAgICAgIHJlY292ZXJ5LmZvcm1h
dCgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkubGVmdCgpKTsKLSAg
ICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkucmlnaHQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBE
YXRhRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgdmFsdWUg
PSBtX2ludDUyVmFsdWVzLmdldChub2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRJbnQ1
MiwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50
NTJWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdFN0cmljdEludDUy
LCB2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFs
dWVzLmdldChub2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29sZWFuLCB2YWx1ZS52
YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChu
b2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4
aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgdmFsdWUudmFsdWUoKSk7Ci0gICAg
ICAgIAotICAgICAgICB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChub2RlKTsKLSAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1
bWVudHMsIERhdGFGb3JtYXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwotCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5v
ZGU6ICIsIG5vZGUpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsK
LSAgICB9Ci0KLSAgICBFeGl0VmFsdWUgZXhpdEFyZ3VtZW50KFN0YWNrbWFwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIERhdGFGb3JtYXQgZm9ybWF0LCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBFeGl0VmFsdWUgcmVzdWx0ID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoRXhpdEFyZ3Vt
ZW50KGZvcm1hdCwgYXJndW1lbnRzLnNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yVGFpbENhbGwoU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
LSAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKLQotICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBjYXNlIEludDUy
Q29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgICAgICByZXR1
cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgTG93ZXJlZE5v
ZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRz
LCBEYXRhRm9ybWF0SlMsIHZhbHVlLnZhbHVlKCkpOwotCi0gICAgICAgIHZhbHVlID0gbV9pbnQz
MlZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIGJveEludDMy
KHZhbHVlLnZhbHVlKCkpKTsKLQotICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQo
bm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBl
eGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIGJveEJvb2xlYW4odmFsdWUudmFs
dWUoKSkpOwotCi0gICAgICAgIC8vIERvdWJsZXMgYW5kIEludDUyIGhhdmUgYmVlbiBjb252ZXJ0
ZWQgYnkgVmFsdWVSZXAoKQotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NT
dHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRhKCkpOwotICAg
IH0KLSAgICAKLSAgICBib29sIGRvZXNLaWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGlm
IChlZGdlLmRvZXNOb3RLaWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQg
YWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgIE5vZGUqIG5vZGUsIFJlY292ZXJ5T3Bjb2Rl
IG9wY29kZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgRGF0YUZvcm1hdCBmb3JtYXQpCi0g
ICAgewotICAgICAgICBtX2F2YWlsYWJsZVJlY292ZXJpZXMuYXBwZW5kKEF2YWlsYWJsZVJlY292
ZXJ5KG5vZGUsIG9wY29kZSwgbGVmdCwgcmlnaHQsIGZvcm1hdCkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAotICAgICAgICBFZGdlIGVkZ2UsIFJlY292ZXJ5
T3Bjb2RlIG9wY29kZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgRGF0YUZvcm1hdCBmb3Jt
YXQpCi0gICAgewotICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeShlZGdlLm5vZGUoKSwgb3Bj
b2RlLCBsZWZ0LCByaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRJbnQz
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBtX2ludDMyVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0K
LSAgICB2b2lkIHNldEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIG1faW50NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7Ci0gICAgfQotICAgIHZvaWQgc2V0U3RyaWN0SW50NTIoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9zdHJpY3RJbnQ1MlZhbHVlcy5zZXQobm9kZSwg
TG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBz
ZXRJbnQ1MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUsIEludDUyS2luZCBraW5kKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAgICAg
ICBzZXRJbnQ1Mihub2RlLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MjoKLSAgICAgICAgICAgIHNldFN0cmljdEludDUy
KG5vZGUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW50NTIga2luZCIp
OwotICAgIH0KLSAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVl
KHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0KLSAgICB2b2lkIHNldEJvb2xlYW4oTm9kZSog
bm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLnNldChu
b2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0KLSAgICB2
b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
bV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hC
bG9jaykpOwotICAgIH0KLSAgICB2b2lkIHNldERvdWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBtX2RvdWJsZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEludDMyKExW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldEludDMyKG1fbm9kZSwgdmFsdWUpOwotICAg
IH0KLSAgICB2b2lkIHNldEludDUyKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldElu
dDUyKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICB2b2lkIHNldFN0cmljdEludDUyKExWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldFN0cmljdEludDUyKG1fbm9kZSwgdmFsdWUpOwot
ICAgIH0KLSAgICB2b2lkIHNldEludDUyKExWYWx1ZSB2YWx1ZSwgSW50NTJLaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVlLCBraW5kKTsKLSAgICB9Ci0gICAg
dm9pZCBzZXRKU1ZhbHVlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9ub2RlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHZvaWQgc2V0Qm9vbGVhbihMVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXRCb29sZWFuKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICB2
b2lkIHNldFN0b3JhZ2UoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZSht
X25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGlzVmFsaWQoY29uc3QgTG93ZXJlZE5vZGVWYWx1ZSYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IW1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXModmFsdWUuYmxvY2soKSwgbV9oaWdoQmxv
Y2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgbV9ncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHRhcmdl
dCk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGxvYWRTdHJ1Y3R1cmUoTFZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHRhYmxlSW5kZXggPSBtX291dC5sb2FkMzIodmFsdWUsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgTFZhbHVlIHRhYmxlQmFzZSA9IG1fb3V0
LmxvYWRQdHIoCi0gICAgICAgICAgICBtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmJhc2UoKSkpOwotICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0
LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuc3RydWN0dXJlVGFibGUsIHRhYmxlQmFz
ZSwgbV9vdXQuemVyb0V4dFB0cih0YWJsZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiBtX291dC5s
b2FkUHRyKGFkZHJlc3MpOwotICAgIH0KLQotICAgIExWYWx1ZSB3ZWFrUG9pbnRlcihKU0NlbGwq
IHBvaW50ZXIpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKHBvaW50ZXIpOwotICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIocG9pbnRlcik7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHdlYWtTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IGFkZFdlYWtSZWZlcmVuY2Uoc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0
SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHdlYWtTdHJ1
Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gd2Vha1Bv
aW50ZXIoc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29w
ZXJhbmRdLCBvZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0Zvcihi
YXNlLCBvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRh
Z0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRk
cmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNl
dCk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9w
ZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgfQotICAgIFR5cGVkUG9p
bnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBUYWdPZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBBYnN0cmFjdFZhbHVlIGFi
c3RyYWN0VmFsdWUoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLmZv
ck5vZGUobm9kZSk7Ci0gICAgfQotICAgIEFic3RyYWN0VmFsdWUgYWJzdHJhY3RWYWx1ZShFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShlZGdlLm5vZGUoKSk7
Ci0gICAgfQotICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUoTm9kZSogbm9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKG5vZGUpLm1fdHlwZTsKLSAgICB9
Ci0gICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAg
ICByZXR1cm4gcHJvdmVuVHlwZShlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIEpTVmFs
dWUgcHJvdmVuVmFsdWUoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFj
dFZhbHVlKG5vZGUpLm1fdmFsdWU7Ci0gICAgfQotICAgIEpTVmFsdWUgcHJvdmVuVmFsdWUoRWRn
ZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZlblZhbHVlKGVkZ2Uubm9kZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFN0cnVjdHVy
ZShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUobm9kZSku
bV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYWJzdHJhY3RT
dHJ1Y3R1cmUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFic3RyYWN0U3RydWN0
dXJlKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0g
ICAgdm9pZCBwcm9iZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJvYmVDb250
ZXh0Kik+IHByb2JlRnVuYykKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShwcm9iZUZ1bmMp
OwotICAgIH0KLSNlbmRpZgotCi0gICAgdm9pZCBjcmFzaCgpCi0gICAgewotICAgICAgICBjcmFz
aChtX2hpZ2hCbG9jay0+aW5kZXgsIG1fbm9kZS0+aW5kZXgoKSk7Ci0gICAgfQotICAgIHZvaWQg
Y3Jhc2goQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25lZCBub2RlSW5kZXgpCi0gICAgewot
I2lmIEFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBt
X291dC5vcGVyYXRpb24oZnRsVW5yZWFjaGFibGUpKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGJs
b2NrSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKLSNlbHNlCi0gICAg
ICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKGZ0bFVucmVhY2hhYmxlKSwKLSAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKGNvZGVCbG9jaygpKSwgbV9vdXQuY29uc3RJbnQzMihibG9ja0luZGV4KSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIobm9kZUluZGV4KSk7Ci0jZW5kaWYKLSAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICB9Ci0KLSAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWls
YWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eTsgfQotICAgIAotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQotICAg
IENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQot
ICAgIAotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIFN0YXRlJiBtX2Z0bFN0YXRlOwotICAgIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkgbV9oZWFwczsKLSAgICBPdXRwdXQgbV9vdXQ7Ci0gICAgUHJv
Y2VkdXJlJiBtX3Byb2M7Ci0gICAgCi0gICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKLSAgICBM
QmFzaWNCbG9jayBtX2hhbmRsZUV4Y2VwdGlvbnM7Ci0gICAgSGFzaE1hcDxERkc6OkJhc2ljQmxv
Y2sqLCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7Ci0gICAgCi0gICAgTFZhbHVlIG1fY2FsbEZyYW1l
OwotICAgIExWYWx1ZSBtX2NhcHR1cmVkOwotICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7Ci0g
ICAgTFZhbHVlIG1fdGFnTWFzazsKLSAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fc3RyaWN0SW50NTJWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9pbnQ1MlZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2pzVmFsdWVWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9ib29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
c3RvcmFnZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Rv
dWJsZVZhbHVlczsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJl
dmVudHMgTExWTSBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMu
Ci0gICAgLy8gSXQncyBuaWNlIHRvIGhhdmUgdGhlc2Ugb3B0aW1pemF0aW9ucyBvbiBvdXIgZW5k
IGJlY2F1c2Ugd2UgY2FuIGd1YXJhbnRlZSB0aGVtIGEgYml0IGJldHRlci4KLSAgICAvLyBQcm9i
YWJseSBhbHNvIHNhdmVzIExMVk0gY29tcGlsZSB0aW1lLgotICAgIEhhc2hNYXA8Tm9kZSosIExW
YWx1ZT4gbV9sb2FkZWRBcmd1bWVudFZhbHVlczsKLSAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBM
VmFsdWU+IG1fcGhpczsKLSAgICAKLSAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Ig
bV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yOwotICAgIAotICAgIFZlY3RvcjxBdmFpbGFibGVSZWNv
dmVyeSwgMz4gbV9hdmFpbGFibGVSZWNvdmVyaWVzOwotICAgIAotICAgIEluUGxhY2VBYnN0cmFj
dFN0YXRlIG1fc3RhdGU7Ci0gICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RT
dGF0ZT4gbV9pbnRlcnByZXRlcjsKLSAgICBERkc6OkJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwot
ICAgIERGRzo6QmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwotICAgIExCYXNpY0Jsb2NrIG1f
bmV4dExvd0Jsb2NrOwotCi0gICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKLSAgICB1bnNpZ25lZCBt
X25vZGVJbmRleDsKLSAgICBOb2RlKiBtX25vZGU7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1l
c3BhY2UKLQotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCi17Ci0gICAgTG93ZXJE
RkdUb0xMVk0gbG93ZXJpbmcoc3RhdGUpOwotICAgIGxvd2VyaW5nLmxvd2VyKCk7Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCShy
ZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTExvd2VyREZHVG9MTFZN
X2gKLSNkZWZpbmUgRlRMTG93ZXJERkdUb0xMVk1faAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0K
LSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOwot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
LQotI2VuZGlmIC8vIEZUTExvd2VyREZHVG9MTFZNX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTk2NzQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
CiAgICAgICAgICAgICByZWdpc3RlclNjcmF0Y2gsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7
CiAgICAgfTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3Rh
Y2sgdXNlZCB0byBiZSBhcyBMTFZNIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQg
cHVzaFRvU2F2ZSgpLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBjb21lIGluIGhlcmUsIHRoZSBzdGFj
ayB1c2VkIHRvIGJlIGFzIEIzIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQgcHVz
aFRvU2F2ZSgpLgogICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIHRoZXkgc2F2
ZWQuIEJ1dCwgd2UgZG8gYXBwcmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGl0LCBiZWNh
dXNlIHdlIHVzZQogICAgIC8vIHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJlZ2lzdGVycygpLgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFdlaWdodC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgJKHJldmlzaW9uIDE5Njc0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDE4ICs1Myw2IEBAIHB1YmxpYzoKIAogICAgIEIzOjpGcmVxdWVuY3lDbGFzcyBmcmVx
dWVuY3lDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkgPyBCMzo6RnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbCA6IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsgfQogICAgIAotICAgIHVuc2lnbmVk
IHNjYWxlVG9Ub3RhbChkb3VibGUgdG90YWwpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBMTFZN
IGFjY2VwdHMgMzItYml0IHVuc2lnbmVkIGJyYW5jaCB3ZWlnaHRzIGJ1dCBpbiBkdW1wcyBpdCBt
aWdodCBkaXNwbGF5IHRoZW0KLSAgICAgICAgLy8gYXMgc2lnbmVkIHZhbHVlcy4gV2UgZG9uJ3Qg
bmVlZCBhbGwgMzIgYml0cywgc28gd2UganVzdCB1c2UgdGhlIDMxIGJpdHMuCi0gICAgICAgIGRv
dWJsZSByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpICogSU5UX01BWCAvIHRv
dGFsOwotICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBpZiAocmVzdWx0ID4gSU5UX01BWCkKLSAgICAgICAgICAgIHJldHVybiBJTlRfTUFYOwot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7Ci0gICAgfQotICAg
IAogICAgIC8vIEludmVyc2Ugd2VpZ2h0IGZvciBhIHR3by10YXJnZXQgYnJhbmNoLgogICAgIFdl
aWdodCBpbnZlcnNlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFdlaWdodGVkVGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExXZWlnaHRlZFRhcmdldC5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFdlaWdodGVkVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDkgKzczLDggQEAgaW5saW5lIFdlaWdodGVkVGFyZ2V0IHJhcmVseShMQmFzaWNCbG9jawog
ICAgIHJldHVybiBXZWlnaHRlZFRhcmdldChibG9jaywgMCk7CiB9CiAKLS8vIFRoaXMgbWVhbnMg
d2UgbGV0IExMVk0gZmlndXJlIGl0IG91dCBiYXNpYyBvbiBpdHMgc3RhdGljIGVzdGltYXRlcy4g
TExWTSdzIHN0YXRpYwotLy8gZXN0aW1hdGVzIGFyZSB1c3VhbGx5IHByZXR0eSBkYXJuIGdvb2Qs
IHNvIHRoZXJlJ3MgZ2VuZXJhbGx5IG5vdGhpbmcgd3Jvbmcgd2l0aAotLy8gdXNpbmcgdGhpcy4K
Ky8vIEN1cnJlbnRseSBpbiBCMyB0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mICJ1c3VhbGx5Iiwg
YnV0IHdlIGxpa2UgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24gaW4KKy8vIGNhc2Ugd2UgZXZlciBt
YWtlIEIzIHN1cHBvcnQgcHJvcGVyIGJyYW5jaCB3ZWlnaHRzLiBXZSB1c2VkIHRvIGRvIHRoYXQg
aW4gTExWTS4KIGlubGluZSBXZWlnaHRlZFRhcmdldCB1bnN1cmUoTEJhc2ljQmxvY2sgYmxvY2sp
CiB7CiAgICAgcmV0dXJuIFdlaWdodGVkVGFyZ2V0KGJsb2NrLCBXZWlnaHQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAJ
KHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENh
bGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjCiAgICAgICAgIC8vIGFic29sdXRlbHkg
bmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgaW50bwogICAgICAgICAvLyBk
aWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBlbm91Z2ggcHJlc3N1cmUgdG8KICAgICAg
ICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0aGVtLiBBbmQgZXZlbiBpbiB0aGF0IGNh
c2UsCi0gICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggTExWTSBzYXZl
cyB0aGUKKyAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBvcmRlciBpbiB3aGljaCBCMyBzYXZl
cyB0aGUKICAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3ZSB3aWxsIHByb2JhYmx5IHN0aWxsIGJl
IHNhZmUuIEFueXdheSwKICAgICAgICAgLy8gdGhlIGNvdXBsZSBleHRyYSBtb3ZlIGluc3RydWN0
aW9ucyBjb21wYXJlZCB0byBhbgogICAgICAgICAvLyBlZmZpY2llbnQgY3ljbGUtYmFzZWQgYWxn
b3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNyArMjc4
LDcgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZQogICAgIHJlc3Vs
dC5zZXQoR1BSSW5mbzo6cmVnQ1MzKTsKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNCk7
CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgLy8gTExWTSBtaWdodCBzYXZlIGFuZCB1c2UgYWxsIEFS
TTY0IGNhbGxlZSBzYXZlcyBzcGVjaWZpZWQgaW4gdGhlIEFCSS4KKyAgICAvLyBCMyBtaWdodCBz
YXZlIGFuZCB1c2UgYWxsIEFSTTY0IGNhbGxlZSBzYXZlcyBzcGVjaWZpZWQgaW4gdGhlIEFCSS4K
ICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CiAgICAgcmVzdWx0LnNldChHUFJJbmZv
OjpyZWdDUzEpOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTGludXguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNTGludXguY3BwCShy
ZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9Jbml0aWFsaXpl
TExWTUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5J
VkVSU0lUWSBPRiBTWkVHRUQuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbml0aWFsaXplTExWTS5oIgot
Ci0jaWYgSEFWRShMTFZNKQotCi0jaW5jbHVkZSAiSW5pdGlhbGl6ZUxMVk1QT1NJWC5oIgotCi0j
aWYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNlbmRp
ZgotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExWTUluaXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUlu
aXRpYWxpemVyRnVuY3Rpb24oYm9vbCB2ZXJib3NlKQotewotI2lmIFBMQVRGT1JNKEdUSykKLSNp
ZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCi0gICAgTExWTUluaXRpYWxpemVyRnVuY3Rpb24gZnVu
Y3Rpb24gPSBnZXRMTFZNSW5pdGlhbGl6ZXJGdW5jdGlvblBPU0lYKCJsaWJsbHZtRm9ySlNDLnNv
IiwgdmVyYm9zZSk7Ci0gICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZnVuY3Rpb247
Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29uc3QgY2hhciogbGlibGx2bUZvckpTQ0luc3RhbGxlZFBh
dGggPSBMSUJESVIgR19ESVJfU0VQQVJBVE9SX1MgImphdmFzY3JpcHRjb3JlZ3RrLSIgV0VCS0lU
R1RLX0FQSV9WRVJTSU9OX1NUUklORyBHX0RJUl9TRVBBUkFUT1JfUzsKLSAgICBHVW5pcXVlUHRy
PGNoYXI+IGxpYmxsdm1Gb3JKU0NGaWxlbmFtZShnX2J1aWxkX2ZpbGVuYW1lKGxpYmxsdm1Gb3JK
U0NJbnN0YWxsZWRQYXRoLCAibGlibGx2bUZvckpTQy5zbyIsIG51bGxwdHIpKTsKLSAgICByZXR1
cm4gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb25QT1NJWChsaWJsbHZtRm9ySlNDRmlsZW5hbWUu
Z2V0KCksIHZlcmJvc2UpOwotI2Vsc2UKLSAgICByZXR1cm4gZ2V0TExWTUluaXRpYWxpemVyRnVu
Y3Rpb25QT1NJWCgibGlibGx2bUZvckpTQy5zbyIsIHZlcmJvc2UpOwotI2VuZGlmCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL0luaXRpYWxpemVMTFZNV2luLmNwcAkocmV2aXNpb24g
MTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vSW5pdGlhbGl6ZUxMVk1XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkluaXRpYWxpemVMTFZNLmgiCi0KLSNpbmNsdWRlICJMTFZNQVBJLmgiCi0jaW5jbHVk
ZSA8V2luZG93cy5oPgotCi0jaWYgSEFWRShMTFZNKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotTExW
TUluaXRpYWxpemVyRnVuY3Rpb24gZ2V0TExWTUluaXRpYWxpemVyRnVuY3Rpb24oYm9vbCAvKiB2
ZXJib3NlICovKQotewotICAgIGNvbnN0IHdjaGFyX3QqIGxpYnJhcnlOYW1lID0gTCJsaWJsbHZt
Rm9ySlNDLmRsbCI7Ci0KLSAgICBITU9EVUxFIGxpYnJhcnkgPSA6OkxvYWRMaWJyYXJ5KGxpYnJh
cnlOYW1lKTsKLQotICAgIGlmICghbGlicmFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBjb25zdCBjaGFyKiBzeW1ib2xOYW1lID0gImluaXRpYWxpemVBbmRHZXRKU0NMTFZNQVBJ
IjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PExMVk1Jbml0aWFsaXplckZ1bmN0aW9uPihHZXRQ
cm9jQWRkcmVzcyhsaWJyYXJ5LCBzeW1ib2xOYW1lKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gSEFWRShMTFZNKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
dm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxiYWNrLmgJKHJldmlzaW9uIDE5Njc0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbHZtL2xpYnJhcnkvTExWTVRyYXBDYWxsYmFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMTFZNVHJhcENhbGxiYWNrX2gKLSNk
ZWZpbmUgTExWTVRyYXBDYWxsYmFja19oCi0KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
Ci1leHRlcm4gdm9pZCAoKmdfbGx2bVRyYXBDYWxsYmFjaykoY29uc3QgY2hhciogbWVzc2FnZSwg
Li4uKSBOT19SRVRVUk47Ci0KLSNlbmRpZiAvLyBMTFZNVHJhcENhbGxiYWNrX2gKLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9saWJsbHZt
Rm9ySlNDLnZlcnNpb24JKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbHZtL2xpYnJhcnkvbGlibGx2bUZvckpTQy52ZXJzaW9uCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDQgKzAsMCBAQAotTExWTUZPUkpTQyB7Ci0gICAgZ2xvYmFsOiBpbml0aWFsaXplQW5kR2V0SlND
TExWTUFQSTsKLSAgICBsb2NhbDogKjsKLX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGx2bS9saWJyYXJ5L0xMVk1UcmFwQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L0xMVk1UcmFwQ2FsbGJhY2suaAkocmV2aXNpb24gMTk2
NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsdm0vbGlicmFyeS9MTFZNVHJhcENhbGxi
YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIExMVk1UcmFwQ2FsbGJhY2tfaAot
I2RlZmluZSBMTFZNVHJhcENhbGxiYWNrX2gKLQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
Ci0KLWV4dGVybiB2b2lkICgqZ19sbHZtVHJhcENhbGxiYWNrKShjb25zdCBjaGFyKiBtZXNzYWdl
LCAuLi4pIE5PX1JFVFVSTjsKLQotI2VuZGlmIC8vIExMVk1UcmFwQ2FsbGJhY2tfaAotCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2xpYmxsdm1Gb3JKU0MudmVyc2lv
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGx2bS9saWJyYXJ5L2xpYmxs
dm1Gb3JKU0MudmVyc2lvbgkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsdm0vbGlicmFyeS9saWJsbHZtRm9ySlNDLnZlcnNpb24JKHdvcmtpbmcgY29weSkKQEAg
LTEsNCArMCwwIEBACi1MTFZNRk9SSlNDIHsKLSAgICBnbG9iYWw6IGluaXRpYWxpemVBbmRHZXRK
U0NMTFZNQVBJOwotICAgIGxvY2FsOiAqOwotfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQwLDE2ICsz
NDAsNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICAgICAg
T3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgpID0gZmFsc2U7CiAgICAgfQogCi0jaWYgQ1BVKEFS
TTY0KQotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUyNTEwCi0gICAgLy8gV2UncmUgcnVubmluZyBpbnRvIGEgYnVnIHdoZXJlIHNvbWUgQVJN
NjQgdGVzdHMgYXJlIGZhaWxpbmcgaW4gdGhlIEZUTAotICAgIC8vIHdpdGggd2hhdCBhcHBlYXJz
IHRvIGJlIGFuIGxsdm0gYnVnIHdoZXJlIGxsdm0gaXMgbWlzY2FsY3VsYXRpbmcgdGhlCi0gICAg
Ly8gbGl2ZS1vdXQgdmFyaWFibGVzIG9mIGEgcGF0Y2hwb2ludC4gVGhpcyBjYXVzZXMgdXMgdG8g
bm90IGtlZXAgYSAKLSAgICAvLyB2b2xhdGlsZSByZWdpc3RlciBhbGl2ZSBhY3Jvc3MgYSBDIGNh
bGwgaW4gYSBwYXRjaHBvaW50LCBldmVuIHRob3VnaCAKLSAgICAvLyB0aGF0IHJlZ2lzdGVyIGlz
IHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhdGNocG9pbnQuCi0gICAgT3B0aW9uczo6YXNz
dW1lQWxsUmVnc0luRlRMSUNBcmVMaXZlKCkgPSB0cnVlOwotI2VuZGlmCi0KICAgICAvLyBDb21w
dXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSByZW9wdGltaXphdGlvbiByZXRyeSBjb3VudGVy
LiBUaGlzIGlzIHNpbXBseQogICAgIC8vIHRoZSBsYXJnZXN0IHZhbHVlIGF0IHdoaWNoIHdlIGRv
bid0IG92ZXJmbG93IHRoZSBleGVjdXRlIGNvdW50ZXIsIHdoZW4gdXNpbmcgaXQKICAgICAvLyB0
byBsZWZ0LXNoaWZ0IHRoZSBleGVjdXRpb24gY291bnRlciBieSB0aGlzIGFtb3VudC4gQ3VycmVu
dGx5IHRoZSB2YWx1ZSBlbmRzCkBAIC0zNzYsMTIgKzM2Niw3IEBAIHZvaWQgT3B0aW9uczo6aW5p
dGlhbGl6ZSgpCiAgICAgICAgICAgICBuYW1lXyMjRGVmYXVsdCgpID0gZGVmYXVsdFZhbHVlXzsK
ICAgICAgICAgICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikKICN1bmRlZiBGT1JfRUFD
SF9PUFRJT04KLSAgICAKLSAgICAgICAgICAgICAgICAvLyBJdCAqcHJvYmFibHkqIG1ha2VzIHNl
bnNlIGZvciBvdGhlciBwbGF0Zm9ybXMgdG8gZW5hYmxlIHRoaXMuCi0jaWYgUExBVEZPUk0oSU9T
KSAmJiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgdXNlTExWTUZhc3RJU2VsKCkgPSB0cnVl
OwotI2VuZGlmCi0gICAgICAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQWxs
b3cgZW52aXJvbm1lbnQgdmFycyB0byBvdmVycmlkZSBvcHRpb25zIGlmIGFwcGxpY2FibGUuCiAg
ICAgICAgICAgICAvLyBUaGUgZXZuIHZhciBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIG9wdGlv
biBwcmVmaXhlZCB3aXRoCiAgICAgICAgICAgICAvLyAiSlNDXyIuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCwy
MiArMTgwLDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAg
ICB2KGJvb2wsIHVzZUZUTEpJVCwgdHJ1ZSwgImFsbG93cyB0aGUgRlRMIEpJVCB0byBiZSB1c2Vk
IGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVlLCBudWxscHRyKSBcCi0g
ICAgdihib29sLCB1c2VMTFZNRmFzdElTZWwsIGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29s
LCB1c2VMTFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29sLCBk
dW1wTExWTUlSLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVGVExPU1JF
eGl0TGl2ZW5lc3MsIGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29sLCBsbHZtQWx3YXlzRmFp
bHNCZWZvcmVDb21waWxlLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgbGx2bUFsd2F5
c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGxsdm1TaW1w
bGVPcHQsIHRydWUsIG51bGxwdHIpIFwKLSAgICB2KHVuc2lnbmVkLCBsbHZtQmFja2VuZE9wdGlt
aXphdGlvbkxldmVsLCAyLCBudWxscHRyKSBcCi0gICAgdih1bnNpZ25lZCwgbGx2bU9wdGltaXph
dGlvbkxldmVsLCAyLCBudWxscHRyKSBcCi0gICAgdih1bnNpZ25lZCwgbGx2bVNpemVMZXZlbCwg
MCwgbnVsbHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1NYXhTdGFja1NpemUsIDEyOCAqIEtC
LCBudWxscHRyKSBcCi0gICAgdihib29sLCBsbHZtRGlzYWxsb3dBVlgsIHRydWUsIG51bGxwdHIp
IFwKKyAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgbnVsbHB0
cikgXAorICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUxpbmssIGZhbHNlLCBudWxscHRy
KSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgbnVsbHB0cikgLyogZm9vbC1wcm9v
ZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhlIEZUTC4gOy0pICovXAot
ICAgIHYoYm9vbCwgZnRsQ3Jhc2hlc0lmQ2FudEluaXRpYWxpemVMTFZNLCBmYWxzZSwgbnVsbHB0
cikgXAogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGgsICFBU1NFUlRf
RElTQUJMRUQsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGFzc3VtZUFsbFJlZ3NJbkZUTElDQXJl
TGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUFjY2Vzc0lubGluaW5nLCB0
cnVlLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNzVmFyaWFudExpc3RTaXpl
LCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VQb2x5dmFyaWFudERldmlydHVhbGl6YXRp
b24sIHRydWUsIG51bGxwdHIpIFwKQEAgLTIyMCw5ICsyMDksNiBAQCB0eXBlZGVmIGNvbnN0IGNo
YXIqIG9wdGlvblN0cmluZzsKICAgICBcCiAgICAgdihib29sLCB1c2VQcm9maWxlciwgZmFsc2Us
IG51bGxwdHIpIFwKICAgICBcCi0gICAgdihib29sLCBmb3JjZVVEaXM4NkRpc2Fzc2VtYmxlciwg
ZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGZvcmNlTExWTURpc2Fzc2VtYmxlciwgZmFs
c2UsIG51bGxwdHIpIFwKLSAgICBcCiAgICAgdihib29sLCB1c2VBcmNoaXRlY3R1cmVTcGVjaWZp
Y09wdGltaXphdGlvbnMsIHRydWUsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCBicmVh
a09uVGhyb3csIGZhbHNlLCBudWxscHRyKSBcCkBAIC0zNzgsNyArMzY0LDYgQEAgZW51bSBPcHRp
b25FcXVpdmFsZW5jZSB7CiAgICAgdihhbHdheXNEb0Z1bGxDb2xsZWN0aW9uLCB1c2VHZW5lcmF0
aW9uYWxHQywgSW52ZXJ0ZWRPcHRpb24pIFwKICAgICB2KGVuYWJsZU9TUkVudHJ5VG9ERkcsIHVz
ZU9TUkVudHJ5VG9ERkcsIFNhbWVPcHRpb24pIFwKICAgICB2KGVuYWJsZU9TUkVudHJ5VG9GVEws
IHVzZU9TUkVudHJ5VG9GVEwsIFNhbWVPcHRpb24pIFwKLSAgICB2KGVuYWJsZUxMVk1GYXN0SVNl
bCwgdXNlTExWTUZhc3RJU2VsLCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVBY2Nlc3NJbmxp
bmluZywgdXNlQWNjZXNzSW5saW5pbmcsIFNhbWVPcHRpb24pIFwKICAgICB2KGVuYWJsZVBvbHl2
YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgdXNlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uLCBT
YW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCB1c2VQ
b2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCBTYW1lT3B0aW9uKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5o
CShyZXZpc2lvbiAxOTY3MzEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oOjE5NjczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKKyNkZWZpbmUgV0FTTUZ1bmN0
aW9uTExWTUlSR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkgJiYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVzLmgiCisKKyNkZWZpbmUg
VU5VU0VEIDAKKworbmFtZXNwYWNlIEpTQyB7CisKK3VzaW5nIEZUTDo6TEJhc2ljQmxvY2s7Cit1
c2luZyBGVEw6OkxWYWx1ZTsKKworY2xhc3MgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIExWYWx1ZSBFeHByZXNzaW9uOworICAgIHR5cGVkZWYgaW50
IFN0YXRlbWVudDsKKyAgICB0eXBlZGVmIFZlY3RvcjxMVmFsdWU+IEV4cHJlc3Npb25MaXN0Owor
ICAgIHN0cnVjdCBNZW1vcnlBZGRyZXNzIHsKKyAgICAgICAgTWVtb3J5QWRkcmVzcyh2b2lkKikg
eyB9CisgICAgICAgIE1lbW9yeUFkZHJlc3MoTFZhbHVlIGluZGV4LCB1aW50MzJfdCBvZmZzZXQp
CisgICAgICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAgICAgICAgLCBvZmZzZXQob2Zmc2V0
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgTFZhbHVlIGluZGV4OworICAgICAgICB1
aW50MzJfdCBvZmZzZXQ7CisgICAgfTsKKyAgICB0eXBlZGVmIExCYXNpY0Jsb2NrIEp1bXBUYXJn
ZXQ7CisgICAgZW51bSBjbGFzcyBKdW1wQ29uZGl0aW9uIHsgWmVybywgTm9uWmVybyB9OworCisg
ICAgdm9pZCBzdGFydEZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cywg
dWludDMyX3QgbnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxlcywgdWludDMyX3QgbnVtYmVyT2ZGMzJM
b2NhbFZhcmlhYmxlcywgdWludDMyX3QgbnVtYmVyT2ZGNjRMb2NhbFZhcmlhYmxlcykKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNF
RF9QQVJBTShhcmd1bWVudHMpOworICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZJMzJMb2Nh
bFZhcmlhYmxlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkYzMkxvY2FsVmFyaWFi
bGVzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpOwor
ICAgIH0KKworICAgIHZvaWQgZW5kRnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRTZXRMb2Nh
bChXQVNNT3BLaW5kIG9wS2luZCwgdWludDMyX3QgbG9jYWxJbmRleCwgTFZhbHVlIHZhbHVlLCBX
QVNNVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wS2luZCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShsb2NhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExW
YWx1ZSBidWlsZFNldEdsb2JhbChXQVNNT3BLaW5kIG9wS2luZCwgdWludDMyX3QgZ2xvYmFsSW5k
ZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsSW5kZXgpOworICAgICAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgICAgIHJldHVybiBVTlVT
RUQ7CisgICAgfQorCisgICAgdm9pZCBidWlsZFJldHVybihMVmFsdWUgdmFsdWUsIFdBU01FeHBy
ZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZEltbWVkaWF0
ZUkzMih1aW50MzJfdCBpbW1lZGlhdGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKKyAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRJbW1lZGlhdGVGMzIo
ZmxvYXQgaW1tZWRpYXRlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7CisgICAgICAgIHJldHVy
biBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRlRjY0KGRvdWJsZSBp
bW1lZGlhdGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorICAgICAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNF
RDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRHZXRMb2NhbCh1aW50MzJfdCBsb2NhbEluZGV4
LCBXQVNNVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxvY2FsSW5kZXgpOworICAgICAgICBVTlVT
RURfUEFSQU0odHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZh
bHVlIGJ1aWxkR2V0R2xvYmFsKHVpbnQzMl90IGdsb2JhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwor
ICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZENvbnZlcnRU
eXBlKExWYWx1ZSB2YWx1ZSwgV0FTTUV4cHJlc3Npb25UeXBlIGZyb21UeXBlLCBXQVNNRXhwcmVz
c2lvblR5cGUgdG9UeXBlLCBXQVNNVHlwZUNvbnZlcnNpb24gY29udmVyc2lvbikKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShmcm9tVHlwZSk7CisgICAgICAgIFVO
VVNFRF9QQVJBTSh0b1R5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0oY29udmVyc2lvbik7Cisg
ICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkTG9hZChjb25z
dCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5cGUgZXhwcmVz
c2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIE1lbW9yeUFjY2Vzc0NvbnZlcnNp
b24gY29udmVyc2lvbikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlBZGRyZXNzKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGV4cHJlc3Npb25UeXBlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG1lbW9yeVR5
cGUpOworICAgICAgICBVTlVTRURfUEFSQU0oY29udmVyc2lvbik7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkU3RvcmUoV0FTTU9wS2luZCBvcEtpbmQs
IGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MsIFdBU01FeHByZXNzaW9uVHlwZSBl
eHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwgTFZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAg
VU5VU0VEX1BBUkFNKG9wS2luZCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlBZGRyZXNz
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25UeXBlKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG1lbW9yeVR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAg
ICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZFVuYXJ5STMyKExWYWx1
ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQor
CisgICAgTFZhbHVlIGJ1aWxkVW5hcnlGMzIoTFZhbHVlIHZhbHVlLCBXQVNNT3BFeHByZXNzaW9u
RjMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4K
KyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsK
KyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRVbmFyeUY2
NChMVmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0odmFs
dWUpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOwor
ICAgIH0KKworICAgIExWYWx1ZSBidWlsZEJpbmFyeUkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJp
Z2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAg
ICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAg
ICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZEJpbmFyeUYzMihMVmFs
dWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uRjMyIG9wKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BB
UkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURf
UEFSQU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBi
dWlsZEJpbmFyeUY2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9u
RjY0IG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4K
KyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQp
OworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAg
IH0KKworICAgIExWYWx1ZSBidWlsZFJlbGF0aW9uYWxJMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRSZWxhdGlvbmFsRjMy
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCisgICAg
eworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZh
bHVlIGJ1aWxkUmVsYXRpb25hbEY2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BF
eHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFS
QU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4gVU5V
U0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4STMyKExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7
CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7
CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkTWluT3JN
YXhGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgYnVpbGRDYWxsSW50ZXJuYWwodWludDMyX3QgZnVuY3Rpb25JbmRleCwgY29uc3Qg
VmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0
dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShmdW5jdGlv
bkluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlzdCk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShzaWduYXR1cmUpOworICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7
CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkQ2FsbElu
ZGlyZWN0KHVpbnQzMl90IGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgsIExWYWx1ZSBpbmRleCwg
Y29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNpZ25hdHVyZSYg
c2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShm
dW5jdGlvblBvaW50ZXJUYWJsZUluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGluZGV4KTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlzdCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzaWduYXR1cmUpOworICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7CisgICAgICAg
IHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkQ2FsbEltcG9ydCh1aW50
MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4LCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgYXJndW1lbnRM
aXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSBy
ZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhv
ZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uSW1wb3J0SW5kZXgpOworICAgICAgICBV
TlVTRURfUEFSQU0oYXJndW1lbnRMaXN0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpZ25hdHVy
ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKKyAgICAgICAgcmV0dXJuIFVO
VVNFRDsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEV4cHJlc3Npb25MaXN0KFZlY3RvcjxMVmFs
dWU+JiBleHByZXNzaW9uTGlzdCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Np
b25MaXN0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IGRpc2NhcmQoTFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGxpbmtUYXJnZXQoTEJh
c2ljQmxvY2sgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7CisgICAgfQorCisgICAgdm9p
ZCBqdW1wVG9UYXJnZXQoTEJhc2ljQmxvY2sgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
CisgICAgfQorCisgICAgdm9pZCBqdW1wVG9UYXJnZXRJZihKdW1wQ29uZGl0aW9uLCBMVmFsdWUg
dmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdldCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQgc3RhcnRMb29wKCkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgfQorCisg
ICAgdm9pZCBlbmRMb29wKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCisgICAgfQorCisgICAgdm9pZCBzdGFydFN3aXRjaCgpCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKworICAgIHZvaWQgZW5k
U3dpdGNoKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
CisgICAgfQorCisgICAgdm9pZCBzdGFydExhYmVsKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgfQorCisgICAgdm9pZCBlbmRMYWJlbCgpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0KKwor
ICAgIExCYXNpY0Jsb2NrIGJyZWFrVGFyZ2V0KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisg
ICAgTEJhc2ljQmxvY2sgY29udGludWVUYXJnZXQoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisK
KyAgICBMQmFzaWNCbG9jayBicmVha0xhYmVsVGFyZ2V0KHVpbnQzMl90IGxhYmVsSW5kZXgpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBV
TlVTRURfUEFSQU0obGFiZWxJbmRleCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQor
CisgICAgTEJhc2ljQmxvY2sgY29udGludWVMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGxhYmVsSW5kZXgpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAg
IH0KKworICAgIHZvaWQgYnVpbGRTd2l0Y2goTFZhbHVlIHZhbHVlLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGNhc2VzLCBjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiB0YXJnZXRzLCBMQmFzaWNC
bG9jayBkZWZhdWx0VGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGNhc2VzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldHMpOworICAgICAgICBV
TlVTRURfUEFSQU0oZGVmYXVsdFRhcmdldCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNlbmRpZiAvLyBXQVNNRnVu
Y3Rpb25MTFZNSVJHZW5lcmF0b3JfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKLSNkZWZpbmUgV0FTTUZ1bmN0
aW9uTExWTUlSR2VuZXJhdG9yX2gKKyNpZm5kZWYgV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcl9o
CisjZGVmaW5lIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAogCiAjaWYgRU5BQkxFKFdFQkFT
U0VNQkxZKSAmJiBFTkFCTEUoRlRMX0pJVCkKIApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIHVzaW5nIEZUTDo6TEJhc2ljQmxvY2s7CiB1c2luZyBGVEw6OkxWYWx1ZTsKIAotY2xh
c3MgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yIHsKK2NsYXNzIFdBU01GdW5jdGlvbkIzSVJH
ZW5lcmF0b3IgewogcHVibGljOgogICAgIHR5cGVkZWYgTFZhbHVlIEV4cHJlc3Npb247CiAgICAg
dHlwZWRlZiBpbnQgU3RhdGVtZW50OwpAQCAtMzkxLDQgKzM5MSw0IEBAIHB1YmxpYzoKIAogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2VuZGlmIC8vIFdBU01GdW5jdGlvbkxMVk1J
UkdlbmVyYXRvcl9oCisjZW5kaWYgLy8gV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvcl9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25M
TFZNSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvcl9oCi0jZGVmaW5lIFdBU01G
dW5jdGlvbkxMVk1JUkdlbmVyYXRvcl9oCi0KLSNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpICYmIEVO
QUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRUeXBlcy5oIgotCi0jZGVm
aW5lIFVOVVNFRCAwCi0KLW5hbWVzcGFjZSBKU0MgewotCi11c2luZyBGVEw6OkxCYXNpY0Jsb2Nr
OwotdXNpbmcgRlRMOjpMVmFsdWU7Ci0KLWNsYXNzIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBMVmFsdWUgRXhwcmVzc2lvbjsKLSAgICB0eXBlZGVm
IGludCBTdGF0ZW1lbnQ7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TFZhbHVlPiBFeHByZXNzaW9uTGlz
dDsKLSAgICBzdHJ1Y3QgTWVtb3J5QWRkcmVzcyB7Ci0gICAgICAgIE1lbW9yeUFkZHJlc3Modm9p
ZCopIHsgfQotICAgICAgICBNZW1vcnlBZGRyZXNzKExWYWx1ZSBpbmRleCwgdWludDMyX3Qgb2Zm
c2V0KQotICAgICAgICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAgICAgICwgb2Zmc2V0KG9m
ZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIExWYWx1ZSBpbmRleDsKLSAgICAg
ICAgdWludDMyX3Qgb2Zmc2V0OwotICAgIH07Ci0gICAgdHlwZWRlZiBMQmFzaWNCbG9jayBKdW1w
VGFyZ2V0OwotICAgIGVudW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFplcm8sIE5vblplcm8gfTsK
LQotICAgIHZvaWQgc3RhcnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FTTVR5cGU+JiBhcmd1bWVu
dHMsIHVpbnQzMl90IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9m
RjMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9jYWxWYXJpYWJsZXMpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBV
TlVTRURfUEFSQU0oYXJndW1lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mSTMy
TG9jYWxWYXJpYWJsZXMpOwotICAgICAgICBVTlVTRURfUEFSQU0obnVtYmVyT2ZGMzJMb2NhbFZh
cmlhYmxlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkY2NExvY2FsVmFyaWFibGVz
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkU2V0
TG9jYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGxvY2FsSW5kZXgsIExWYWx1ZSB2YWx1
ZSwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURf
UEFSQU0obG9jYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAg
ICBMVmFsdWUgYnVpbGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGdsb2Jh
bEluZGV4LCBMVmFsdWUgdmFsdWUsIFdBU01UeXBlIHR5cGUpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0ob3BLaW5k
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICByZXR1cm4g
VU5VU0VEOwotICAgIH0KLQotICAgIHZvaWQgYnVpbGRSZXR1cm4oTFZhbHVlIHZhbHVlLCBXQVNN
RXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRJbW1l
ZGlhdGVJMzIodWludDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0g
ICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkSW1tZWRpYXRl
RjMyKGZsb2F0IGltbWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlhdGUpOwotICAgICAgICBy
ZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEltbWVkaWF0ZUY2NChkb3Vi
bGUgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0gICAgICAgIHJldHVybiBV
TlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkR2V0TG9jYWwodWludDMyX3QgbG9jYWxJ
bmRleCwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExWYWx1ZSBidWlsZEdldEdsb2JhbCh1aW50MzJfdCBnbG9iYWxJbmRleCwgV0FTTVR5cGUgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBl
KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRDb252
ZXJ0VHlwZShMVmFsdWUgdmFsdWUsIFdBU01FeHByZXNzaW9uVHlwZSBmcm9tVHlwZSwgV0FTTUV4
cHJlc3Npb25UeXBlIHRvVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24pCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oZnJvbVR5cGUpOwotICAgICAg
ICBVTlVTRURfUEFSQU0odG9UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24p
OwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZExvYWQo
Y29uc3QgTWVtb3J5QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4cHJlc3Npb25UeXBlIGV4
cHJlc3Npb25UeXBlLCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBNZW1vcnlBY2Nlc3NDb252
ZXJzaW9uIGNvbnZlcnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShtZW1v
cnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24pOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFN0b3JlKFdBU01PcEtpbmQgb3BL
aW5kLCBjb25zdCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVzc2lvblR5
cGUgZXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIExWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRk
cmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRVbmFyeUkzMihM
VmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUp
OwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAg
IH0KLQotICAgIExWYWx1ZSBidWlsZFVuYXJ5RjMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVz
c2lvbkYzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShv
cCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkVW5h
cnlGNjQoTFZhbHVlIHZhbHVlLCBXQVNNT3BFeHByZXNzaW9uRjY0IG9wKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFN
KHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlJMzIoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlGMzIo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNF
RF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5V
U0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFs
dWUgYnVpbGRCaW5hcnlGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVz
c2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJp
Z2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRSZWxhdGlvbmFsSTMyKExWYWx1ZSBsZWZ0LCBMVmFs
dWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0g
ICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25h
bEYzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAg
VU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAg
ICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExWYWx1ZSBidWlsZFJlbGF0aW9uYWxGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FT
TU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJu
IFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1heEkzMihMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxl
ZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0o
b3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZE1p
bk9yTWF4RjY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25GNjQg
b3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQot
Ci0gICAgTFZhbHVlIGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1bmN0aW9uSW5kZXgsIGNv
bnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNp
Z25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oZnVu
Y3Rpb25JbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAg
ICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5
cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENh
bGxJbmRpcmVjdCh1aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCBMVmFsdWUgaW5k
ZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdBU01TaWduYXR1
cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFS
QU0oZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpbmRl
eCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwotICAgICAgICBVTlVTRURf
UEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOwotICAg
ICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZENhbGxJbXBvcnQo
dWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3Vt
ZW50TGlzdCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5
cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbkltcG9ydEluZGV4KTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlzdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzaWdu
YXR1cmUpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7Ci0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlzdChWZWN0b3I8
TFZhbHVlPiYgZXhwcmVzc2lvbkxpc3QsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShleHBy
ZXNzaW9uTGlzdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgfQotCi0gICAg
dm9pZCBkaXNjYXJkKExWYWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBsaW5rVGFyZ2V0
KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIH0KLQotICAg
IHZvaWQganVtcFRvVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0SWYoSnVtcENvbmRpdGlvbiwgTFZh
bHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAg
ICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2b2lkIHN0YXJ0TG9vcCgp
Ci0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0K
LQotICAgIHZvaWQgZW5kTG9vcCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRTd2l0Y2goKQotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9Ci0KLSAgICB2b2lk
IGVuZFN3aXRjaCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRMYWJlbCgpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgZW5kTGFiZWwo
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICB9
Ci0KLSAgICBMQmFzaWNCbG9jayBicmVha1RhcmdldCgpCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0K
LQotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVlVGFyZ2V0KCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAg
fQotCi0gICAgTEJhc2ljQmxvY2sgYnJlYWtMYWJlbFRhcmdldCh1aW50MzJfdCBsYWJlbEluZGV4
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGxhYmVsSW5kZXgpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAg
IH0KLQotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVlTGFiZWxUYXJnZXQodWludDMyX3QgbGFiZWxJ
bmRleCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShsYWJlbEluZGV4KTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsK
LSAgICB9Ci0KLSAgICB2b2lkIGJ1aWxkU3dpdGNoKExWYWx1ZSB2YWx1ZSwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBjYXNlcywgY29uc3QgVmVjdG9yPExCYXNpY0Jsb2NrPiYgdGFyZ2V0cywgTEJh
c2ljQmxvY2sgZGVmYXVsdFRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShjYXNlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXRzKTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRUYXJnZXQpOwotICAgIH0KLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQotCi0jZW5kaWYgLy8gV0FT
TUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAkocmV2aXNpb24gMTk2NzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCiAjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uQ29tcGls
ZXIuaCIKLSNpbmNsdWRlICJXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaCIKKyNpbmNsdWRl
ICJXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiV0FTTUZ1bmN0aW9uU3lu
dGF4Q2hlY2tlci5oIgogCiAjZGVmaW5lIFBST1BBR0FURV9FUlJPUigpIGRvIHsgaWYgKCFtX2Vy
cm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJuIDA7IH0gd2hpbGUgKDApCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271635</attachid>
            <date>2016-02-17 22:25:53 -0800</date>
            <delta_ts>2016-02-17 23:18:28 -0800</delta_ts>
            <desc>redacted patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>960280</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMSBA
QAorMjAxNi0wMi0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFJlbW92ZSByZW1haW5pbmcgcmVmZXJlbmNlcyB0byBMTFZNLCBhbmQgbWFrZSBzdXJlIGNvbW1l
bnRzIHJlZmVyIHRvIHRoZSBiYWNrZW5kIGFzICJCMyIgbm90ICJMTFZNIgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBkaWQgYSBncmVwIC1pIGxsdm0g
b2YgYWxsIG9mIG91ciBjb2RlIGFuZCBkaWQgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9yIGVhY2gg
b2NjdXJlbmNlOgorCisgICAgICAgIC0gUmVuYW1lZCBpdCB0byBCMy4gVGhpcyBpcyBhcHByb3By
aWF0ZSB3aGVuIHdlIHdlcmUgdXNpbmcgIkxMVk0iIHRvIG1lYW4gInRoZSBGVEwKKyAgICAgICAg
ICBiYWNrZW5kIi4KKworICAgICAgICAtIFJlbW92ZWQgdGhlIHJlZmVyZW5jZSBiZWNhdXNlIEkg
Zm91bmQgaXQgdG8gYmUgZGVhZC4gSW4gc29tZSBjYXNlcyBpdCB3YXMgYSBkZWFkCisgICAgICAg
ICAgY29tbWVudDogaXQgd2FzIHRlbGxpbmcgdXMgdGhpbmdzIGFib3V0IHdoYXQgTExWTSBkaWQg
YW5kIHRoYXQncyBqdXN0IG5vdCByZWxldmFudAorICAgICAgICAgIGFueW1vcmUuIEluIG90aGVy
IGNhc2VzIGl0IHdhcyBkZWFkIGNvZGUgdGhhdCBJIGZvcmdvdCB0byBkZWxldGUgaW4gYSBwcmV2
aW91cyBwYXRjaC4KKworICAgICAgICAtIEVkaXRlZCB0aGUgY29tbWVudCBpbiBzb21lIHNtYXJ0
IHdheS4gVGhlcmUgd2VyZSBjb21tZW50cyB0YWxraW5nIGFib3V0IHdoYXQgTExWTSBkaWQKKyAg
ICAgICAgICB0aGF0IHdlcmUgc3RpbGwgb2YgaW50ZXJlc3QuIEluIHNvbWUgY2FzZXMsIEkgYWRk
ZWQgYSBGSVhNRSB0byBjb25zaWRlciBjaGFuZ2luZyB0aGUKKyAgICAgICAgICBjb2RlIGJlbG93
IHRoZSBjb21tZW50IG9uIHRoZSBncm91bmRzIHRoYXQgaXQgd2FzIHdyaXR0ZW4gaW4gYSB3ZWly
ZCB3YXkgdG8gcGxhY2F0ZQorICAgICAgICAgIExMVk0gYW5kIHNvIHdlIGNhbiBkbyBpdCBiZXR0
ZXIgbm93LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZHQXJndW1l
bnRzRWxpbWluYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
Ojpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxl
VGltZVN0YXRzKToKKyAgICAgICAgKiBkZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDoKKyAgICAgICAgKiBkZmcvREZH
VW5pZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VW5pZmljYXRpb25QaGFz
ZTo6cnVuKToKKyAgICAgICAgKiBkaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwOgor
ICAgICAgICAoSlNDOjp0cnlUb0Rpc2Fzc2VtYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkaXNh
c3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5VG9EaXNhc3Nl
bWJsZSk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6SW5kZXhlZEFic3RyYWN0SGVhcDo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZnRsL0ZU
TEFic3RyYWN0SGVhcC5oOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAg
ICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZp
bmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTExpbmsuY3BwOgor
ICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExMb2NhdGlvbi5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246OnJlc3RvcmVJbnRvKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0IzLmNwcDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpmdGxV
bnJlYWNoYWJsZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Okxvd2Vy
REZHVG9CMyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVC
bG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVBcml0
aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVN
dWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6aXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9CMzo6dW5ib3hCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6ZW1pdFN0b3JlQmFycmllcik6CisgICAgICAgIChKU0M6OkZUTDo6bG93ZXJERkdUb0IzKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUJsb2NrKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQXJpdGhOZWdhdGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlT3ZlcnJpZGVzSGFzSW5z
dGFuY2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06
OmlzQm9vbGVhbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6dW5ib3hCb29sZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9MTFZNOjplbWl0U3RvcmVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
RlRMOjpsb3dlckRGR1RvTExWTSk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmguCisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
dGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1
Yik6CisgICAgICAgICogZnRsL0ZUTFdlaWdodC5oOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdo
dDo6ZnJlcXVlbmN5Q2xhc3MpOgorICAgICAgICAoSlNDOjpGVEw6OldlaWdodDo6aW52ZXJzZSk6
CisgICAgICAgIChKU0M6OkZUTDo6V2VpZ2h0OjpzY2FsZVRvVG90YWwpOiBEZWxldGVkLgorICAg
ICAgICAqIGZ0bC9GVExXZWlnaHRlZFRhcmdldC5oOgorICAgICAgICAoSlNDOjpGVEw6OnJhcmVs
eSk6CisgICAgICAgIChKU0M6OkZUTDo6dW5zdXJlKToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlz
cGxhY2UpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJl
Z2lzdGVyU2V0OjpmdGxDYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbHZtOiBSZW1v
dmVkLgorICAgICAgICAqIGxsdm0vSW5pdGlhbGl6ZUxMVk1MaW51eC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogbGx2bS9Jbml0aWFsaXplTExWTVdpbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
bGx2bS9saWJyYXJ5OiBSZW1vdmVkLgorICAgICAgICAqIGxsdm0vbGlicmFyeS9MTFZNVHJhcENh
bGxiYWNrLmg6IFJlbW92ZWQuCisgICAgICAgICogbGx2bS9saWJyYXJ5L2xpYmxsdm1Gb3JKU0Mu
dmVyc2lvbjogUmVtb3ZlZC4KKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpyZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKToKKyAgICAgICAgKEpTQzo6T3B0aW9u
czo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmg6IENvcGllZCBmcm9tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oLgorICAgICAgICAq
IHdhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorCiAyMDE2LTAyLTE3ICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIEFSTTY0OiBTdXBwb3J0
IHRoZSBpbW1lZGlhdGUgZm9ybWF0IHVzZWQgZm9yIGJpdCBvcGVyYXRpb25zIGluIEFpcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTk2NzQ0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDE2LDcgKzEwMTYsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExMYXp5
U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9j
YXRpb24uY3BwCi0gICAgICAgIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKKyAgICAgICAgZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkVudHJ5LmNwcAogICAgICAg
ICBmdGwvRlRMT1NSRXhpdC5jcHAKICAgICAgICAgZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY3NDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzMyLDggKzczMiw4IEBACiAJCTBGRUEwQTBDMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEw
QTBEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTAyMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMEUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEpJ
VENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUEwQTAzMTcwNTEzREIwMEJCNzIyQyAvKiBGVExKSVRDb2RlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5jcHAgKi87IH07Ci0JCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRG
R1RvTExWTS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93
ZXJERkdUb0IzLmNwcCAqLzsgfTsKKwkJMEZFQTBBMTAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9CMy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTEyMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMTYx
NzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0
ZS5jcHAgKi87IH07CiAJCTBGRUEwQTFDMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhl
YXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
QTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgKi87IH07CkBAIC0x
Mjk2LDcgKzEyOTYsNyBAQAogCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBGQjQgLyogV0FTTU1vZHVs
ZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
N0IzOUY3NkExQjYyREUyMjAwMzYwRkI0IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjM5Rjc3MDFCNjJERTMy
MDAzNjBGQjQgLyogV0FTTVJlYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QjM5Rjc3
MjFCNjM1NzREMDAzNjBGQjQgLyogV0FTTVJlYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQgLyogV0FT
TVJlYWRlci5jcHAgKi87IH07Ci0JCTdCODMyOUJGMUJCMjFGRTMwMDY0OUE2RSAvKiBXQVNNRnVu
Y3Rpb25MTFZNSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdCODMyOUJFMUJCMjFGRDEwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25MTFZN
SVJHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3QjgzMjlCRjFCQjIxRkUzMDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uQjNJUkdlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0I4
MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Qjk4RDEzNjFC
NjBDRDVGMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdCOThEMTM0MUI2MENENUEwMDIzQjFBNCAvKiBKU1dB
U01Nb2R1bGUuY3BwICovOyB9OwogCQk3Qjk4RDEzNzFCNjBDRDYyMDAyM0IxQTQgLyogSlNXQVNN
TW9kdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
Qjk4RDEzNTFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0JDNTQ3RDMxQjY5NTlBMTAwOTU5
QjU4IC8qIFdBU01Gb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI4ODYsOCArMjg4
Niw4IEBACiAJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTENvbXBpbGUuaDsgcGF0aCA9IGZ0bC9GVExD
b21waWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTAyMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEpJVENvZGUuY3BwOyBwYXRoID0gZnRsL0ZUTEpJVENvZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEwMzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMSklU
Q29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKSVRDb2RlLmg7IHBh
dGggPSBmdGwvRlRMSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVB
MEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG93ZXJERkdUb0xMVk0uY3BwOyBwYXRoID0g
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExvd2VyREZHVG9MTFZNLmg7IHBhdGggPSBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBB
MDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb3dlckRGR1RvQjMuY3BwOyBwYXRoID0gZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUEwQTA1
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvQjMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRlRMTG93ZXJERkdUb0IzLmg7IHBhdGggPSBmdGwvRlRMTG93ZXJERkdU
b0IzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTA3MTcwNTEzREIwMEJC
NzIyQyAvKiBGVExTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExT
dGF0ZS5oOyBwYXRoID0gZnRsL0ZUTFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTdGF0ZS5jcHA7IHBhdGggPSBmdGwvRlRMU3Rh
dGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEExNzE3MDhCMDA3MDBC
QjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEZUTEFic3RyYWN0SGVhcC5jcHA7IHBhdGggPSBmdGwvRlRMQWJzdHJhY3RIZWFw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0NDksNyArMzQ0OSw3IEBACiAJ
CTdCMzlGNzZBMUI2MkRFMjIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQYXJzZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJN0IzOUY3NkMxQjYyREUyMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3QjM5Rjc3MTFCNjM1NzRCMDAzNjBGQjQgLyogV0FTTVJl
YWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNUmVhZGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5
QTZFIC8qIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJN0I4MzI5QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlv
bkIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTUZ1
bmN0aW9uQjNJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Qjk4
RDEzNDFCNjBDRDVBMDAyM0IxQTQgLyogSlNXQVNNTW9kdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV0FTTU1vZHVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTdCOThEMTM1MUI2MENENUEwMDIzQjFBNCAvKiBKU1dBU01Nb2R1bGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXQVNNTW9kdWxlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9y
bWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Gb3JtYXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ1NTUsOCArNDU1NSw4IEBACiAJCQkJMEY4RjJC
OTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLywKIAkJCQkwRkNFRkFERDE4MDczOEMw
MDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovLAogCQkJCTBGQ0VGQURFMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oICovLAotCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAv
KiBGVExMb3dlckRGR1RvTExWTS5jcHAgKi8sCi0JCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9MTFZNLmggKi8sCisJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9CMy5jcHAgKi8sCisJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJD
IC8qIEZUTExvd2VyREZHVG9CMy5oICovLAogCQkJCUE3RDg5RDAxMTdBMEI5MDQwMDc3M0FEOCAv
KiBGVExMb3dlcmVkTm9kZVZhbHVlLmggKi8sCiAJCQkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1
IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovLAogCQkJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExPcGVyYXRpb25zLmggKi8sCkBAIC01Mzc0LDcgKzUzNzQsNyBAQAogCQkJCTdCMDI0NzUy
MUI4NjgyRDUwMDU0MjQ0MCAvKiBXQVNNQ29uc3RhbnRzLmggKi8sCiAJCQkJN0JDNTQ3RDIxQjY5
NTk5QjAwOTU5QjU4IC8qIFdBU01Gb3JtYXQuaCAqLywKIAkJCQk3QjJFMDEwRDFCOTdBQTU4MDBF
RjVENUMgLyogV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaCAqLywKLQkJCQk3QjgzMjlCRTFCQjIxRkQx
MDA2NDlBNkUgLyogV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmggKi8sCisJCQkJN0I4MzI5
QkUxQkIyMUZEMTAwNjQ5QTZFIC8qIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaCAqLywKIAkJ
CQk3QjAyNDc1MzFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcCAqLywK
IAkJCQk3QjAyNDc1NDFCODY4MkQ1MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uUGFyc2VyLmggKi8s
CiAJCQkJN0IwMjQ3NTgxQjg2OEVBRTAwNTQyNDQwIC8qIFdBU01GdW5jdGlvblN5bnRheENoZWNr
ZXIuaCAqLywKQEAgLTczNTQsNyArNzM1NCw3IEBACiAJCQkJMEZCNEZCNzUxQkM4NDMxNDAwMjVD
QTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2
MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFF
MDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTBG
RUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQTBBMTAxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9CMy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdEODlEMDIxN0EwQjkwNDAwNzczQUQ4IC8qIEZUTExvd2VyZWRO
b2RlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjMzOEUxMDFCRjAyNzZDMDAx
M0M4OEYgLyogQjNNb3ZlQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKQEAgLTc5OTEsNyArNzk5
MSw3IEBACiAJCQkJN0IwMjQ3NTUxQjg2ODJERDAwNTQyNDQwIC8qIFdBU01Db25zdGFudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTdCQzU0N0QzMUI2OTU5QTEwMDk1OUI1OCAvKiBXQVNNRm9ybWF0
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjJFMDEwRTFCOTdBQTY5MDBFRjVENUMgLyogV0FTTUZ1
bmN0aW9uQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTdCODMyOUJGMUJCMjFGRTMwMDY0
OUE2RSAvKiBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdCODMyOUJGMUJCMjFGRTMwMDY0OUE2RSAvKiBXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1NzFCODY4MkU0MDA1NDI0NDAgLyogV0FTTUZ1bmN0
aW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCOEFERDFDNEVGQUMzMDA5NjkwNTIg
LyogQjNTU0FDYWxjdWxhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjAyNDc1OTFCODY4RUI3
MDA1NDI0NDAgLyogV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCkBA
IC04ODgwLDcgKzg4ODAsNyBAQAogCQkJCTBGQjRGQjczMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExM
YXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RC
REE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhDMDAw
NDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGRUEwQTBGMTcw
NTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0IzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JF
bnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDI4LDcgKzQyOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBGb3IgQ2xvbmVkQXJndW1l
bnRzLCB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgZG9uZSBhIHNlcGFyYXRlIGJvdW5kcyBjaGVjay4K
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjb2RlIHdpbGwgY2F1c2UgdXMgdG8gaGF2ZSB0
d28gYm91bmRzIGNoZWNrcyAtIHRoZSBvcmlnaW5hbCBvbmUgdGhhdCB3ZQogICAgICAgICAgICAg
ICAgICAgICAvLyBhbHJlYWR5IGZhY3RvcmVkIG91dCBpbiBTU0FMb3dlcmluZ1BoYXNlLCBhbmQg
dGhlIG5ldyBvbmUgd2UgaW5zZXJ0IGhlcmUsIHdoaWNoIGlzCi0gICAgICAgICAgICAgICAgICAg
IC8vIG9mdGVuIGltcGxpY2l0bHkgcGFydCBvZiBHZXRNeUFyZ3VtZW50QnlWYWwuIExMVk0gd2ls
bCBwcm9iYWJseSBlbGltaW5hdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mdGVuIGlt
cGxpY2l0bHkgcGFydCBvZiBHZXRNeUFyZ3VtZW50QnlWYWwuIEIzIHdpbGwgcHJvYmFibHkgZWxp
bWluYXRlIHRoZQogICAgICAgICAgICAgICAgICAgICAvLyBzZWNvbmQgYm91bmRzIGNoZWNrLCBi
dXQgc3RpbGwgLSB0aGF0J3MganVzdCBzaWxseS4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzA3NgogICAgICAgICAgICAg
ICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSQXZhaWxhYmls
aXR5QW5hbHlzaXNQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSQXZhaWxhYmlsaXR5QW5hbHlzaXNQaGFzZS5oCShyZXZpc2lvbiAxOTY3NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBHcmFwaDsKIAogLy8g
Q29tcHV0ZXMgQmFzaWNCbG9jazo6c3NhLT5hdmFpbGFiaWx0aXlBdEhlYWQvVGFpbC4gVGhpcyBp
cyBhIGZvcndhcmQgZmxvdyB0eXBlIGluZmVyZW5jZQogLy8gb3ZlciBNb3ZIaW50cyBhbmQgU2V0
TG9jYWxzLiBUaGlzIGFuYWx5c2lzIGlzIHJ1biBkaXJlY3RseSBieSB0aGUgUGxhbiBmb3IgcHJl
cGFyaW5nIGZvcgotLy8gbG93ZXJpbmcgdG8gTExWTSBJUiwgYnV0IGl0IGNhbiBhbHNvIGJlIHVz
ZWQgYXMgYSB1dGlsaXR5LiBOb3RlIHRoYXQgaWYgeW91IHJ1biBpdCBiZWZvcmUKKy8vIGxvd2Vy
aW5nIHRvIEIzIElSLCBidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBhcyBhIHV0aWxpdHkuIE5vdGUg
dGhhdCBpZiB5b3UgcnVuIGl0IGJlZm9yZQogLy8gc3RhY2sgbGF5b3V0LCBhbGwgb2YgdGhlIGZs
dXNoIGF2YWlsYWJpbGl0eSB3aWxsIG9taXQgdGhlIHZpcnR1YWwgcmVnaXN0ZXIgLSBidXQgaXQg
d2lsbAogLy8gdGVsbCB5b3UgdGhlIGZvcm1hdC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBACiAjaW5j
bHVkZSAiRlRMQ29tcGlsZS5oIgogI2luY2x1ZGUgIkZUTEZhaWwuaCIKICNpbmNsdWRlICJGVExM
aW5rLmgiCi0jaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xMVk0uaCIKKyNpbmNsdWRlICJGVExMb3dl
ckRGR1RvQjMuaCIKICNpbmNsdWRlICJGVExTdGF0ZS5oIgogI2VuZGlmCiAKQEAgLTk4LDcgKzk4
LDcgQEAgbmFtZXNwYWNlIHsKIGRvdWJsZSB0b3RhbERGR0NvbXBpbGVUaW1lOwogZG91YmxlIHRv
dGFsRlRMQ29tcGlsZVRpbWU7CiBkb3VibGUgdG90YWxGVExERkdDb21waWxlVGltZTsKLWRvdWJs
ZSB0b3RhbEZUTExMVk1Db21waWxlVGltZTsKK2RvdWJsZSB0b3RhbEZUTEIzQ29tcGlsZVRpbWU7
CiAKIHZvaWQgZHVtcEFuZFZlcmlmeUdyYXBoKEdyYXBoJiBncmFwaCwgY29uc3QgY2hhciogdGV4
dCwgYm9vbCBmb3JjZUR1bXAgPSBmYWxzZSkKIHsKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIFBs
YW46OmNvbXBpbGVJblRocmVhZChMb25nTGl2ZWRTdGF0CiAgICAgICAgIGlmIChpc0ZUTChtb2Rl
KSkgewogICAgICAgICAgICAgdG90YWxGVExDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsK
ICAgICAgICAgICAgIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUgKz0gbV90aW1lQmVmb3JlRlRMIC0g
YmVmb3JlOwotICAgICAgICAgICAgdG90YWxGVExMTFZNQ29tcGlsZVRpbWUgKz0gYWZ0ZXIgLSBt
X3RpbWVCZWZvcmVGVEw7CisgICAgICAgICAgICB0b3RhbEZUTEIzQ29tcGlsZVRpbWUgKz0gYWZ0
ZXIgLSBtX3RpbWVCZWZvcmVGVEw7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdG90YWxE
RkdDb21waWxlVGltZSArPSBhZnRlciAtIGJlZm9yZTsKICAgICB9CkBAIC00NjMsMTIgKzQ2Mywx
MiBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgICAgICAg
ICByZXR1cm4gQ2FuY2VsUGF0aDsKIAogICAgICAgICBGVEw6OlN0YXRlIHN0YXRlKGRmZyk7Ci0g
ICAgICAgIEZUTDo6bG93ZXJERkdUb0xMVk0oc3RhdGUpOworICAgICAgICBGVEw6Omxvd2VyREZH
VG9CMyhzdGF0ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoY29tcHV0ZUNvbXBpbGVUaW1lcygp
KQogICAgICAgICAgICAgbV90aW1lQmVmb3JlRlRMID0gbW9ub3RvbmljYWxseUluY3JlYXNpbmdU
aW1lTVMoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChPcHRpb25zOjpsbHZtQWx3YXlzRmFpbHNC
ZWZvcmVDb21waWxlKCkpIHsKKyAgICAgICAgaWYgKE9wdGlvbnM6OmIzQWx3YXlzRmFpbHNCZWZv
cmVDb21waWxlKCkpIHsKICAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CiAgICAgICAgICAg
ICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQpAQCAtNDc3LDcgKzQ3Nyw3IEBAIFBsYW46OkNv
bXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgaWYgKHNhZmVwb2ludFJl
c3VsdC5kaWRHZXRDYW5jZWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybiBDYW5jZWxQYXRoOwog
ICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6Omxsdm1BbHdheXNGYWlsc0JlZm9yZUxpbmso
KSkgeworICAgICAgICBpZiAoT3B0aW9uczo6YjNBbHdheXNGYWlsc0JlZm9yZUxpbmsoKSkgewog
ICAgICAgICAgICAgRlRMOjpmYWlsKHN0YXRlKTsKICAgICAgICAgICAgIHJldHVybiBGVExQYXRo
OwogICAgICAgICB9CkBAIC02NjYsNyArNjY2LDcgQEAgSGFzaE1hcDxDU3RyaW5nLCBkb3VibGU+
IFBsYW46OmNvbXBpbGVUaQogICAgICAgICByZXN1bHQuYWRkKCJERkcgQ29tcGlsZSBUaW1lIiwg
dG90YWxERkdDb21waWxlVGltZSk7CiAgICAgICAgIHJlc3VsdC5hZGQoIkZUTCBDb21waWxlIFRp
bWUiLCB0b3RhbEZUTENvbXBpbGVUaW1lKTsKICAgICAgICAgcmVzdWx0LmFkZCgiRlRMIChERkcp
IENvbXBpbGUgVGltZSIsIHRvdGFsRlRMREZHQ29tcGlsZVRpbWUpOwotICAgICAgICByZXN1bHQu
YWRkKCJGVEwgKEIzKSBDb21waWxlIFRpbWUiLCB0b3RhbEZUTExMVk1Db21waWxlVGltZSk7Cisg
ICAgICAgIHJlc3VsdC5hZGQoIkZUTCAoQjMpIENvbXBpbGUgVGltZSIsIHRvdGFsRlRMQjNDb21w
aWxlVGltZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogICAgICAgICAvLyBmb3Igc3Vua2VuIFB1dFN0YWNrcyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50
ZXJlc3RpbmcgY29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQogICAgICAgICAvLyB2
YWx1ZSBiZWluZyBQdXRTdGFjaydkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBj
b2RlLiBXZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGlzCiAgICAgICAgIC8vIGJ5IGRvaW5nIHRoZSBz
aW5raW5nIG92ZXIgQ1BTLCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBzbWFydCBob2lz
dGluZy4gSXQncyBhbHNvCi0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQ
aGkgZ3JhcGggY2FuIGJlIGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBiZSBiZXN0IGlm
IHdlCisgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQaGkgZ3JhcGggY2Fu
IGJlIGRlZHVwbGljYXRlZCBieSBCMy4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQogICAgICAgICAv
LyBjb3VsZCBvYnNlcnZlIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSBncmFwaCBpbiBwbGFj
ZSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBJbgogICAgICAgICAvLyBwcmluY2lwbGUgaWYgd2Ug
aGF2ZSBhIHJlcXVlc3QgdG8gcGxhY2UgYSBQaGkgYXQgYSBwYXJ0aWN1bGFyIHBsYWNlLCB3ZSBj
b3VsZCBqdXN0IGNoZWNrCiAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgdGhh
dCBkb2VzIHdoYXQgd2Ugd2FudC4gQmVjYXVzZSBQdXRTdGFja1NpbmtpbmdQaGFzZSBydW5zIGp1
c3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtODEsMTIgKzgxLDYg
QEAgY2xhc3MgR3JhcGg7CiAvLyAgIHRoZSBjYXZlYXQgdGhhdCB0aGUgUGhpIHByZWRlY2Vzc29y
IGJsb2NrIGxpc3RzIHdvdWxkIGhhdmUgdG8gYmUKIC8vICAgdXBkYXRlZCkuCiAvLwotLy8gICBU
aGUgZWFzaWVzdCB3YXkgdG8gY29udmVydCBmcm9tIHRoaXMgU1NBIGZvcm0gaW50byBhIGRpZmZl
cmVudCBTU0EKLS8vICAgZm9ybSBpcyB0byByZWRvIFNTQSBjb252ZXJzaW9uIGZvciBQaGkgZnVu
Y3Rpb25zLiBUaGF0IGlzLCB0cmVhdCBlYWNoCi0vLyAgIFBoaSBpbiBvdXIgSVIgYXMgYSBub24t
U1NBIHZhcmlhYmxlIGluIHRoZSBmb3JlaWduIElSIChzbywgYXMgYW4KLS8vICAgYWxsb2NhIGlu
IExMVk0gSVIsIGZvciBleGFtcGxlKTsgdGhlIFVwc2lsb25zIHRoYXQgcmVmZXIgdG8gdGhlIFBo
aQotLy8gICBiZWNvbWUgc3RvcmVzIGFuZCB0aGUgUGhpcyB0aGVtc2VsdmVzIGJlY29tZSBsb2Fk
cy4KLS8vCiAvLyAgIEZ1biBmYWN0OiBVcHNpbG9uIGlzIHNvIG5hbWVkIGJlY2F1c2UgaXQgY29t
ZXMgYmVmb3JlIFBoaSBpbiB0aGUKIC8vICAgYWxwaGFiZXQuIEl0IGNhbiBiZSB3cml0dGVuIGFz
ICJZIi4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaAkocmV2aXNp
b24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGF0aWNFeGVjdXRp
b25Db3VudEVzdGltYXRpb25QaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsNiBA
QCBjbGFzcyBHcmFwaDsKIC8vIGFiaWxpdHkgdG8gZG8gYWNjdXJhdGUgc3RhdGljIGVzdGltYXRp
b25zLiBIZW5jZSB3ZSBsb2NrIGluIHRoZSBlc3RpbWF0ZXMgZWFybHkuCiAvLyBJZGVhbGx5LCB3
ZSB3b3VsZCBoYXZlIGR5bmFtaWMgaW5mb3JtYXRpb24sIGJ1dCB3ZSBkb24ndCByaWdodCBub3cs
IHNvIHRoaXMgaXMgYXMKIC8vIGdvb2QgYXMgaXQgZ2V0cy4KLS8vCi0vLyBJdCdzIHdvcnRoIG5v
dGluZyB0aGF0IGlmIHdlIGRpZG4ndCBoYXZlIHRoaXMgcGhhc2UsIHRoZW4gdGhlIHN0YXRpYyBl
c3RpbWF0aW9uCi0vLyB3b3VsZCBiZSBwZXJmb21lZCBieSBMTFZNIGluc3RlYWQuIEl0J3Mgd29y
dGggdHJ5aW5nIHRvIG1ha2UgdGhpcyBwaGFzZSBwZXJmb3JtCi0vLyB0aGUgZXN0aW1hdGVzIHVz
aW5nIHRoZSBzYW1lIGhldXJpc3RpY3MgdGhhdCBMTFZNIHdvdWxkIHVzZS4KIAogYm9vbCBwZXJm
b3JtU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uKEdyYXBoJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVW5pZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVbmlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDggQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBpZiAoIXBoaS0+Y2hpbGRyZW4uY2hpbGQoY2hpbGRJZHgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Un
ZCBsaWtlIHRvIHJldmVyc2UgdGhlIG9yZGVyIG9mIHVuaWZpY2F0aW9uIGJlY2F1c2UgaXQgaGVs
cHMgdG8gcmV2ZWFsCi0gICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgYnVncyBvbiBvdXIgZW5k
LCB0aG91Z2ggaXQncyBvdGhlcndpc2Ugbm90IG9ic2VydmFibGUuIEJ1dCB3ZSBkbyBpdAotICAg
ICAgICAgICAgICAgICAgICAvLyB0aGlzIHdheSBiZWNhdXNlIGl0IHdvcmtzIGFyb3VuZCBhIGJ1
ZyBpbiBvcGVuIHNvdXJjZSBMTFZNJ3MgbGl2ZS1vdXRzCi0gICAgICAgICAgICAgICAgICAgIC8v
IGNvbXB1dGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgcmV2
ZXJzaW5nIHRoZSBvcmRlciBvZiB0aGlzIHVuaWZpY2F0aW9uLCBzaW5jZSB0aGUgb3RoZXIKKyAg
ICAgICAgICAgICAgICAgICAgLy8gb3JkZXIgd2lsbCByZXZlYWwgbW9yZSBidWdzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzY4CiAgICAgICAgICAgICAgICAg
ICAgIHBoaS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnVuaWZ5KHBoaS0+Y2hpbGRyZW4uY2hpbGQo
Y2hpbGRJZHgpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rpc2Fzc2VtYmxlci9BUk02
NERpc2Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rp
c2Fzc2VtYmxlci9BUk02NERpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvQVJNNjREaXNhc3NlbWJsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NiwxNyArNTYsMyBAQCBib29sIHRyeVRvRGlzYXNzZW1ibGUoY29u
c3QgTWFjcm9Bc3NlbWJsCiAKICNlbmRpZiAvLyBVU0UoQVJNNjRfRElTQVNTRU1CTEVSKQogCi0j
aWYgVVNFKExMVk1fRElTQVNTRU1CTEVSKSAmJiBDUFUoQVJNNjQpCi0KLSNpbmNsdWRlICJMTFZN
RGlzYXNzZW1ibGVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1ib29sIHRyeVRvRGlzYXNzZW1i
bGUoY29uc3QgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyJiBjb2RlUHRyLCBzaXplX3Qgc2l6ZSwgY29u
c3QgY2hhciogcHJlZml4LCBQcmludFN0cmVhbSYgb3V0LCBJbnN0cnVjdGlvblN1YnNldEhpbnQg
aGludCkKLXsKLSAgICByZXR1cm4gdHJ5VG9EaXNhc3NlbWJsZVdpdGhMTFZNKGNvZGVQdHIsIHNp
emUsIHByZWZpeCwgb3V0LCBoaW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBVU0UoTExWTV9ESVNBU1NFTUJMRVIpICYmIENQVShBUk02NCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJsZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGlzYXNzZW1ibGVyL1g4NkRpc2Fzc2VtYmxlci5j
cHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kaXNhc3NlbWJs
ZXIvWDg2RGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkRpc2Fzc2VtYmxlci5oIgogCiAjaWYgRU5BQkxFKERJU0FTU0VNQkxFUikKLSNp
ZiBVU0UoVURJUzg2KSB8fCAoVVNFKExMVk1fRElTQVNTRU1CTEVSKSAmJiAoQ1BVKFg4Nl82NCkg
fHwgQ1BVKFg4NikpKQorI2lmIFVTRShVRElTODYpCiAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKICNpbmNsdWRlICJPcHRpb25zLmgiCkBAIC0zNSwxMyArMzUsNiBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotLy8gVGhpcyBob3JyaWZ5aW5nIG1vbnN0ZXIgaXMgbmVlZGVkIGJl
Y2F1c2UgbmVpdGhlciBvZiBvdXIgZGlzYXNzZW1ibGVycyBzdXBwb3J0cwotLy8gYWxsIG9mIHg4
NiwgYW5kIHVzaW5nIHRoZW0gdG9nZXRoZXIgdG8gZGlzYXNzZW1ibGUgdGhlIHNhbWUgaW5zdHJ1
Y3Rpb24gc3RyZWFtCi0vLyB3b3VsZCByZXN1bHQgaW4gYSBmYWlybHkgamFycmluZyBwcmludC1v
dXQgc2luY2UgdGhleSBwcmludCBpbiBkaWZmZXJlbnQKLS8vIHN0eWxlcy4gTWF5YmUgd2UgY2Fu
IGRvIGJldHRlciBpbiB0aGUgZnV0dXJlLCBidXQgZm9yIG5vdyB0aGUgY2FsbGVyIGhpbnRzCi0v
LyB3aGV0aGVyIGhlJ3MgdXNpbmcgdGhlIHN1YnNldCBvZiB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQg
b3VyIE1hY3JvQXNzZW1ibGVyCi0vLyBzdXBwb3J0cyAoaW4gd2hpY2ggY2FzZSB3ZSBnbyB3aXRo
IFVEaXM4Nikgb3IgaWYgaGUncyB1c2luZyB0aGUgTExWTSBzdWJzZXQuCi0KIGJvb2wgdHJ5VG9E
aXNhc3NlbWJsZShjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHImIGNvZGVQdHIsIHNpemVfdCBz
aXplLCBjb25zdCBjaGFyKiBwcmVmaXgsIFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgcmV0dXJu
IHRyeVRvRGlzYXNzZW1ibGVXaXRoVURpczg2KGNvZGVQdHIsIHNpemUsIHByZWZpeCwgb3V0KTsK
QEAgLTQ5LDUgKzQyLDUgQEAgYm9vbCB0cnlUb0Rpc2Fzc2VtYmxlKGNvbnN0IE1hY3JvQXNzZW1i
bAogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAotI2VuZGlmIC8vIFVTRShVRElTODYpIHx8IFVTRShM
TFZNX0RJU0FTU0VNQkxFUikKKyNlbmRpZiAvLyBVU0UoVURJUzg2KQogI2VuZGlmIC8vIEVOQUJM
RShESVNBU1NFTUJMRVIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXAuY3BwCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNSw3ICsxMTUs
OSBAQCB2b2lkIEluZGV4ZWRBYnN0cmFjdEhlYXA6OmluaXRpYWxpemUoQWJzCiAgICAgLy8KICAg
ICAvLyAgICBCbGFoX25lZ19BCiAgICAgLy8KLSAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNh
dXNlIExMVk0gdXNlcyB0aGUgc3RyaW5nIHRvIGRpc3Rpbmd1aXNoIHRoZSB0eXBlcy4KKyAgICAv
LyBUaGlzIHVzZWQgdG8gYmUgaW1wb3J0YW50IGJlY2F1c2Ugd2UgdXNlZCB0byB1c2UgdGhlIHN0
cmluZyB0byBkaXN0aW5ndWlzaCB0aGUgdHlwZXMuIFRoaXMgaXMKKyAgICAvLyBub3QgcmVsZXZh
bnQgYW55bW9yZSwgYW5kIHRoaXMgY29kZSB3aWxsIGJlIHJlbW92ZWQgZXZlbnR1YWxseS4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDMx
OQogICAgIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBuZWdTcGxpdCA9ICJfbmVnXyI7CiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHBvc1NwbGl0ID0gIl8iOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw5ICszOSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotLy8g
VGhlIEZUTCBKSVQgdHJpZXMgdG8gYWlkIExMVk0ncyBUQkFBLiBUaGUgRlRMJ3Mgbm90aW9uIG9m
IGhvdyB0aGlzCi0vLyBoYXBwZW5zIGlzIHRoZSBBYnN0cmFjdEhlYXAuIEFic3RyYWN0SGVhcHMg
YXJlIGEgc2ltcGxlIHR5cGUgc3lzdGVtCi0vLyB3aXRoIHN1Yi10eXBpbmcuCisvLyBUaGlzIGlz
IGhlcmUgYmVjYXVzZSB3ZSB1c2VkIHRvIGdlbmVyYXRlIExMVk0ncyBUQkFBLiBJbiB0aGUgZnV0
dXJlIHdlIHdpbGwgd2FudCB0byBnZW5lcmF0ZQorLy8gQjMgSGVhcFJhbmdlcyBpbnN0ZWFkLgor
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQzMTkK
IAogY2xhc3MgQWJzdHJhY3RIZWFwUmVwb3NpdG9yeTsKIGNsYXNzIE91dHB1dDsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHJldmlzaW9u
IDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogCiAvLyBUaGlzIGNsYXNzIGlzIG1vc3RseSB1c2VkIGZvciBPU1I7IGl0J3Mg
YSB3YXkgb2Ygc3BlY2lmeWluZyBob3cgYSB2YWx1ZSBpcyBmb3JtYXR0ZWQKIC8vIGluIGNhc2Vz
IHdoZXJlIGl0IHdvdWxkbid0IGhhdmUgYmVlbiBvYnZpb3VzIGZyb20gbG9va2luZyBhdCBvdGhl
ciBpbmRpY2F0b3JzIChsaWtlCi0vLyB0aGUgdHlwZSBvZiB0aGUgTExWTVZhbHVlUmVmIG9yIHRo
ZSB0eXBlIG9mIHRoZSBERkc6Ok5vZGUpLiBUeXBpY2FsbHkgdGhpcyBhcmlzZXMKLS8vIGJlY2F1
c2UgTExWTVZhbHVlUmVmIGRvZXNuJ3QgZ2l2ZSB1cyB0aGUgZ3JhbnVsYXJpdHkgd2UgbmVlZCB0
byBiZWdpbiB3aXRoLCBhbmQgd2UKLS8vIHVzZSB0aGlzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhl
cmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9kZSB0aGUgdmFsdWUgY2FtZQotLy8gZnJv
bS4KKy8vIHRoZSB0eXBlIG9mIHRoZSBCMzo6VmFsdWUqIG9yIHRoZSB0eXBlIG9mIHRoZSBERkc6
Ok5vZGUpLgogCiBjbGFzcyBGb3JtYXR0ZWRWYWx1ZSB7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgIGppdENvZGUtPmluaXRpYWxpemVBcml0eUNoZWNrRW50cnlwb2ludCgK
ICAgICAgICAgRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIGR1bXBEaXNhc3NlbWJseSwg
KmVudHJ5cG9pbnRMaW5rQnVmZmVyLAotICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVu
ayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEo
KSwgZnVuY3Rpb24pKSk7CisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAl
cyB3aXRoIEIzIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhK
SVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rp
b24pKSk7CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShqaXRDb2RlKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBncmFwaC5tX2NvZGVCbG9jazsKICAgICBWTSYgdm0gPSBncmFwaC5t
X3ZtOwogICAgIAotICAgIC8vIExMVk0gd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBh
cyBuZWVkZWQuCisgICAgLy8gQjMgd2lsbCBjcmVhdGUgaXRzIG93biBqdW1wIHRhYmxlcyBhcyBu
ZWVkZWQuCiAgICAgY29kZUJsb2NrLT5jbGVhclN3aXRjaEp1bXBUYWJsZXMoKTsKIAogICAgIHN0
YXRlLmppdENvZGUtPmNvbW1vbi5yZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0ID0gZ3JhcGgu
cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQg
bGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIC8vIFdlIGp1bXAgdG8gaGVyZSBzdHJhaWdodCBm
cm9tIERGRyBjb2RlLCBhZnRlciBoYXZpbmcgYm94ZWQgdXAgYWxsIG9mIHRoZQogICAgICAgICAv
LyB2YWx1ZXMgaW50byB0aGUgc2NyYXRjaCBidWZmZXIuIEV2ZXJ5dGhpbmcgc2hvdWxkIGJlIGdv
b2QgdG8gZ28gLSBhdCB0aGlzCiAgICAgICAgIC8vIHBvaW50IHdlJ3ZlIGV2ZW4gZG9uZSB0aGUg
c3RhY2sgY2hlY2suIEJhc2ljYWxseSB3ZSBqdXN0IGhhdmUgdG8gbWFrZSB0aGUKLSAgICAgICAg
Ly8gY2FsbCB0byB0aGUgTExWTS1nZW5lcmF0ZWQgY29kZS4KKyAgICAgICAgLy8gY2FsbCB0byB0
aGUgQjMtZ2VuZXJhdGVkIGNvZGUuCiAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnQg
PSBqaXQubGFiZWwoKTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBtYWluUGF0aEp1bXAgPSBqaXQuanVtcCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDE5Njc0
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBMb2NhdGlvbjo6cmVzdG9yZUludG8oTWFj
cm9Bc3NlbWJsZQogICAgIAogICAgIHN3aXRjaCAoa2luZCgpKSB7CiAgICAgY2FzZSBSZWdpc3Rl
cjoKLSAgICAgICAgLy8gTExWTSB1c2VkIHNvbWUgcmVnaXN0ZXIgdGhhdCB3ZSBkb24ndCBrbm93
IGFib3V0IQorICAgICAgICAvLyBCMyB1c2VkIHNvbWUgcmVnaXN0ZXIgdGhhdCB3ZSBkb24ndCBr
bm93IGFib3V0IQogICAgICAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgbG9jYXRpb246ICIsICp0
aGlzLCAiXG4iKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTUxLDggKzE1MSw2IEBAIHZvaWQgTG9jYXRpb246OnJlc3RvcmVJbnRv
KE1hY3JvQXNzZW1ibGUKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIFVucHJv
Y2Vzc2VkOgotICAgICAgICAvLyBTaG91bGQgbmV2ZXIgc2VlIHRoaXMgLSBpdCdzIGFuIGVudW1l
cmF0aW9uIGVudHJ5IG9uIExMVk0ncyBzaWRlIHRoYXQgbWVhbnMgdGhhdAotICAgICAgICAvLyBp
dCBoYXNuJ3QgcHJvY2Vzc2VkIHRoaXMgbG9jYXRpb24uCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAxOTY3MzEp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOjE5
NjczMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzLTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTExvd2VyREZHVG9MTFZNLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuaCIK
KyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhK
SVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCIKKyNp
bmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuaCIKKyNpbmNsdWRlICJERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiCisjaW5j
bHVkZSAiREZHT1NSRXhpdEZ1enouaCIKKyNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMQXZhaWxh
YmxlUmVjb3ZlcnkuaCIKKyNpbmNsdWRlICJGVExFeGNlcHRpb25UYXJnZXQuaCIKKyNpbmNsdWRl
ICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5o
IgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJGVExMb3dlcmVk
Tm9kZVZhbHVlLmgiCisjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTE91
dHB1dC5oIgorI2luY2x1ZGUgIkZUTFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGUuaCIKKyNpbmNs
dWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExXZWlnaHRlZFRhcmdldC5oIgorI2luY2x1
ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVEJpdEFuZEdlbmVyYXRvci5oIgor
I2luY2x1ZGUgIkpJVEJpdE9yR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUQml0WG9yR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSklUSW5saW5l
Q2FjaGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCIKKyNp
bmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xleGlj
YWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU2V0dXBWYXJh
cmdzRnJhbWUuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlICJXYXRj
aGRvZy5oIgorI2luY2x1ZGUgPGF0b21pYz4KKyNpZiAhT1MoV0lORE9XUykKKyNpbmNsdWRlIDxk
bGZjbi5oPgorI2VuZGlmCisjaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KKyNpbmNsdWRlIDx3dGYv
Qm94Lmg+CisjaW5jbHVkZSA8d3RmL1Byb2Nlc3NJRC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBCMzsKK3VzaW5nIG5hbWVzcGFjZSBERkc7
CisKK25hbWVzcGFjZSB7CisKK3N0ZDo6YXRvbWljPGludD4gY29tcGlsZUNvdW50ZXI7CisKKyNp
ZiBBU1NFUlRfRElTQUJMRUQKK05PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgZnRs
VW5yZWFjaGFibGUoKQoreworICAgIENSQVNIKCk7Cit9CisjZWxzZQorTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25lZCBub2RlSW5kZXgpCit7CisgICAg
ZGF0YUxvZygiQ3Jhc2hpbmcgaW4gdGhvdWdodC10by1iZS11bnJlYWNoYWJsZSBGVEwtZ2VuZXJh
dGVkIGNvZGUgZm9yICIsIHBvaW50ZXJEdW1wKGNvZGVCbG9jayksICIgYXQgYmFzaWMgYmxvY2sg
IyIsIGJsb2NrSW5kZXgpOworICAgIGlmIChub2RlSW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAg
IGRhdGFMb2coIiwgbm9kZSBAIiwgbm9kZUluZGV4KTsKKyAgICBkYXRhTG9nKCIuXG4iKTsKKyAg
ICBDUkFTSCgpOworfQorI2VuZGlmCisKKy8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hl
Y2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKKy8vIHNp
Z25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLX1dJVEhf
RVhJVF9LSU5EKGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBfZnRjX2xv
d1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBFZGdl
IF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCA9ICh0
eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAorICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNU
eXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoKSkgXAorICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB0eXBlQ2hlY2soX2Z0Y19sb3dWYWx1ZSwgX2Z0Y19oaWdo
VmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoLCAoZmFpbENvbmRpdGlvbiksIGV4aXRLaW5k
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1Zh
bHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgXAorICAg
IEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikKKworY2xhc3MgTG93ZXJERkdU
b0xMVk0geworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExvd2VyREZHVG9MTFZNKTsKK3B1Ymxp
YzoKKyAgICBMb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCisgICAgICAgIDogbV9ncmFwaChz
dGF0ZS5ncmFwaCkKKyAgICAgICAgLCBtX2Z0bFN0YXRlKHN0YXRlKQorICAgICAgICAsIG1fb3V0
KHN0YXRlKQorICAgICAgICAsIG1fcHJvYygqc3RhdGUucHJvYykKKyAgICAgICAgLCBtX3N0YXRl
KHN0YXRlLmdyYXBoKQorICAgICAgICAsIG1faW50ZXJwcmV0ZXIoc3RhdGUuZ3JhcGgsIG1fc3Rh
dGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvd2VyKCkKKyAgICB7CisgICAgICAg
IFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAgICAKKyAgICAgICAgQ1N0cmluZyBu
YW1lOworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAg
ICAgICBuYW1lID0gdG9DU3RyaW5nKAorICAgICAgICAgICAgICAgICJqc0JvZHlfIiwgKytjb21w
aWxlQ291bnRlciwgIl8iLCBjb2RlQmxvY2soKS0+aW5mZXJyZWROYW1lKCksCisgICAgICAgICAg
ICAgICAgIl8iLCBjb2RlQmxvY2soKS0+aGFzaCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBuYW1lID0gImpzQm9keSI7CisgICAgICAgIAorICAgICAgICBtX2dyYXBoLmVuc3VyZURv
bWluYXRvcnMoKTsKKworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQor
ICAgICAgICAgICAgZGF0YUxvZygiRnVuY3Rpb24gcmVhZHksIGJlZ2lubmluZyBsb3dlcmluZy5c
biIpOworCisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9oZWFwcyk7CisKKyAgICAgICAgLy8g
V2UgdXNlIHByb2xvZ3VlIGZyZXF1ZW5jeSBmb3IgYWxsIG9mIHRoZSBpbml0aWFsaXphdGlvbiBj
b2RlLgorICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7CisgICAgICAgIAorICAgICAgICBt
X3Byb2xvZ3VlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQcm9sb2d1ZSIpKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc3RhY2tPdmVyZmxvdyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RhY2sg
b3ZlcmZsb3ciKSk7CisgICAgICAgIG1faGFuZGxlRXhjZXB0aW9ucyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSGFuZGxlIEV4Y2VwdGlvbnMiKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBjaGVja0FyZ3VtZW50cyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2sgYXJndW1l
bnRzIikpOworCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJ
bmRleCA8IG1fZ3JhcGgubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgeworICAgICAgICAgICAg
bV9oaWdoQmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFtX2hpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1f
b3V0LnNldEZyZXF1ZW5jeShtX2hpZ2hCbG9jay0+ZXhlY3V0aW9uQ291bnQpOworICAgICAgICAg
ICAgbV9ibG9ja3MuYWRkKG1faGlnaEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2Nr
ICIsICptX2hpZ2hCbG9jaykpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJhY2sgdG8gcHJv
bG9ndWUgZnJlcXVlbmN5IGZvciBhbnkgYm9ja3MgdGhhdCBnZXQgc25lYWtpbHkgY3JlYXRlZCBp
biB0aGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KDEp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgc3RhY2tPdmVy
Zmxvdyk7CisgICAgICAgIG1fb3V0LmluaXRpYWxpemVDb25zdGFudHMobV9wcm9jLCBtX3Byb2xv
Z3VlKTsKKyAgICAgICAgY3JlYXRlUGhpVmFyaWFibGVzKCk7CisKKyAgICAgICAgc2l6ZV90IHNp
emVPZkNhcHR1cmVkID0gc2l6ZW9mKEpTVmFsdWUpICogbV9ncmFwaC5tX25leHRNYWNoaW5lTG9j
YWw7CisgICAgICAgIEIzOjpTbG90QmFzZVZhbHVlKiBjYXB0dXJlZEJhc2UgPSBtX291dC5sb2Nr
ZWRTdGFja1Nsb3Qoc2l6ZU9mQ2FwdHVyZWQpOworICAgICAgICBtX2NhcHR1cmVkID0gbV9vdXQu
YWRkKGNhcHR1cmVkQmFzZSwgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZU9mQ2FwdHVyZWQpKTsKKyAg
ICAgICAgc3RhdGUtPmNhcHR1cmVkVmFsdWUgPSBjYXB0dXJlZEJhc2UtPnNsb3QoKTsKKworICAg
ICAgICBhdXRvIHByZU9yZGVyID0gbV9ncmFwaC5ibG9ja3NJblByZU9yZGVyKCk7CisKKyAgICAg
ICAgLy8gV2Ugc2hvdWxkIG5vdCBjcmVhdGUgYW55IGFsbG9jYSdzIGFmdGVyIHRoaXMgcG9pbnQs
IHNpbmNlIHRoZXkgd2lsbCBjZWFzZSB0bworICAgICAgICAvLyBiZSBtZW0ycmVnIGNhbmRpZGF0
ZXMuCisgICAgICAgIAorICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LmZyYW1lUG9pbnRlcigp
OworICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1i
ZXIpOworICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOworCisg
ICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IEIzIGtub3dzIHRoYXQgd2UgcmVhbGx5IGNhcmUgYWJv
dXQgdGhlIG1hc2sgcmVnaXN0ZXJzLiBUaGlzIGZvcmNlcyB0aGUKKyAgICAgICAgLy8gY29uc3Rh
bnRzIHRvIGJlIG1hdGVyaWFsaXplZCBpbiByZWdpc3RlcnMuCisgICAgICAgIG1fcHJvYy5hZGRG
YXN0Q29uc3RhbnQobV90YWdUeXBlTnVtYmVyLT5rZXkoKSk7CisgICAgICAgIG1fcHJvYy5hZGRG
YXN0Q29uc3RhbnQobV90YWdNYXNrLT5rZXkoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5z
dG9yZVB0cihtX291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSksIGFkZHJlc3NGb3IoSlNTdGFj
azo6Q29kZUJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBkaWRPdmVyZmxvd1N0YWNrKCksIHJhcmVseShzdGFja092ZXJmbG93KSwgdXN1YWxseShj
aGVja0FyZ3VtZW50cykpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RhY2tP
dmVyZmxvdywgbV9oYW5kbGVFeGNlcHRpb25zKTsKKyAgICAgICAgbV9vdXQuY2FsbChtX291dC52
b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0Vycm9y
KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGNvZGVCbG9jaygpKSk7CisgICAgICAg
IG1fb3V0LnBhdGNocG9pbnQoVm9pZCktPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAg
ICAgICAgICAgICAgICAvLyBXZSBhcmUgdGVybWluYWwsIHNvIHdlIGNhbiBjbG9iYmVyIGV2ZXJ5
dGhpbmcuIFRoYXQncyB3aHkgd2UgZG9uJ3QgY2xhaW0gdG8KKyAgICAgICAgICAgICAgICAvLyBj
bG9iYmVyIHNjcmF0Y2guCisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3Rl
clVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5jb3B5Q2FsbGVlU2F2ZXNUb1ZNQ2FsbGVlU2F2ZXNCdWZmZXIoKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LnZtKCkpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6Q2FsbCBjYWxsID0gaml0LmNhbGwoKTsKKyAgICAgICAgICAgICAg
ICBqaXQuanVtcFRvRXhjZXB0aW9uSGFuZGxlcigpOworCisgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhjYWxsLCBGdW5j
dGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hh
YmxlKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhtX2hhbmRsZUV4Y2VwdGlv
bnMsIGNoZWNrQXJndW1lbnRzKTsKKyAgICAgICAgQm94PENDYWxsSGVscGVyczo6TGFiZWw+IGV4
Y2VwdGlvbkhhbmRsZXIgPSBzdGF0ZS0+ZXhjZXB0aW9uSGFuZGxlcjsKKyAgICAgICAgbV9vdXQu
cGF0Y2hwb2ludChWb2lkKS0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gaml0Lmp1bXAoKTsKKyAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5r
KGp1bXAsIGxpbmtCdWZmZXIubG9jYXRpb25PZigqZXhjZXB0aW9uSGFuZGxlcikpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tBcmd1bWVudHMs
IGxvd0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
Y2xlYXIoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMgPSBPcGVyYW5kczxB
dmFpbGFiaWxpdHk+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCksIDApOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7Cisg
ICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CisgICAg
ICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKKyAgICAgICAgfQorICAgICAgICBtX25vZGUgPSBu
dWxscHRyOworICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29k
ZU9yaWdpbigwKSwgdHJ1ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygp
LT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dy
YXBoLm1fYXJndW1lbnRzW2ldOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQg
PSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcGVyYW5kID09IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgp
LT5tYWNoaW5lTG9jYWwpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgYSBoYWNrLCBidXQgaXQncyBhbiBlZmZlY3RpdmUgb25lLiBJdCBhbGxvd3MgdXMgdG8g
ZG8gQ1NFIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vIHByaW1vcmRpYWwgbG9hZCBvZiBhcmd1
bWVudHMuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBHZXRMb2NhbCB0aGF0IGdvdCBwdXQgaW4KKyAg
ICAgICAgICAgICAgICAvLyBwbGFjZSBvZiB0aGUgb3JpZ2luYWwgU2V0QXJndW1lbnQgZG9lc24n
dCBoYXZlIGFueSBlZmZlY3RzIGJlZm9yZSBpdC4gVGhpcworICAgICAgICAgICAgICAgIC8vIHNo
b3VsZCBob2xkIHRydWUuCisgICAgICAgICAgICAgICAgbV9sb2FkZWRBcmd1bWVudFZhbHVlcy5h
ZGQobm9kZSwganNWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9ncmFwaC5tX2FyZ3VtZW50Rm9ybWF0c1tpXSkgeworICAgICAgICAgICAg
Y2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpz
VmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUs
IGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQgZm9yIGFyZ3VtZW50
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgbV9vdXQuanVtcChsb3dCbG9jayhtX2dyYXBoLmJsb2NrKDApKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKERGRzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcmVPcmRlcikKKyAgICAgICAg
ICAgIGNvbXBpbGVCbG9jayhibG9jayk7CisKKyAgICAgICAgLy8gV2UgY3JlYXRlIGFsbCBQaGkn
cyB1cCBmcm9udCwgYnV0IHdlIG1heSB0aGVuIGRlY2lkZSBub3QgdG8gY29tcGlsZSB0aGUgYmFz
aWMgYmxvY2sKKyAgICAgICAgLy8gdGhhdCB3b3VsZCBoYXZlIGNvbnRhaW5lZCBvbmUgb2YgdGhl
bS4gU28gdGhpcyBjcmVhdGVzIG9ycGhhbnMsIHdoaWNoIHRyaWdnZXJzIEIzCisgICAgICAgIC8v
IHZhbGlkYXRpb24gZmFpbHVyZXMuIENhbGxpbmcgdGhpcyBmaXhlcyB0aGUgaXNzdWUuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCB5b3Ugc2hvdWxkIGF2b2lkIHRoZSB0ZW1wdGF0
aW9uIHRvIG1ha2UgdGhpcyBjYWxsIGNvbmRpdGlvbmFsIHVwb24KKyAgICAgICAgLy8gdmFsaWRh
dGlvbiBiZWluZyBlbmFibGVkLiBCMyBtYWtlcyBubyBndWFyYW50ZWVzIG9mIGFueSBraW5kIG9m
IGNvcnJlY3RuZXNzIHdoZW4KKyAgICAgICAgLy8gZGVhbGluZyB3aXRoIElSIHRoYXQgd291bGQg
aGF2ZSBmYWlsZWQgdmFsaWRhdGlvbi4gRm9yIGV4YW1wbGUsIGl0IHdvdWxkIGJlIHZhbGlkIHRv
CisgICAgICAgIC8vIHdyaXRlIGEgQjMgcGhhc2UgdGhhdCBzbyBhZ2dyZXNzaXZlbHkgYXNzdW1l
cyB0aGUgbGFjayBvZiBvcnBoYW5zIHRoYXQgaXQgd291bGQgY3Jhc2gKKyAgICAgICAgLy8gaWYg
YW55IG9ycGhhbnMgd2VyZSBhcm91bmQuIFdlIG1pZ2h0IGV2ZW4gaGF2ZSBzdWNoIHBoYXNlcyBh
bHJlYWR5LgorICAgICAgICBtX3Byb2MuZGVsZXRlT3JwaGFucygpOworCisgICAgICAgIC8vIFdl
IHB1dCB0aGUgYmxvY2tzIGludG8gdGhlIEIzIHByb2NlZHVyZSBpbiBhIHN1cGVyIHdlaXJkIG9y
ZGVyLiBOb3cgd2UgcmVvcmRlciB0aGVtLgorICAgICAgICBtX291dC5hcHBseUJsb2NrT3JkZXIo
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgCisgICAgdm9pZCBjcmVhdGVQaGlWYXJpYWJsZXMo
KQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51
bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBERkc6OkJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxv
Y2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3AoKSAhPSBERkc6OlBoaSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgTFR5cGUgdHlwZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlUmVzdWx0TWFzaykgeworICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdERvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmRvdWJsZVR5
cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZVJlc3VsdEludDMyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50MzI7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3Vs
dEludDUyOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50NjQ7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEJvb2xl
YW46CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5ib29sZWFuOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbV9waGlzLmFkZChub2RlLCBtX3Byb2MuYWRkPFZhbHVlPihCMzo6UGhpLCB0eXBlLCBPcmln
aW4obm9kZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVCbG9jayhERkc6OkJhc2ljQmxvY2sqIGJsb2NrKQorICAgIHsKKyAgICAgICAg
aWYgKCFibG9jaykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJDb21waWxp
bmcgYmxvY2sgIiwgKmJsb2NrLCAiXG4iKTsKKyAgICAgICAgCisgICAgICAgIG1faGlnaEJsb2Nr
ID0gYmxvY2s7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCBhbnkgYmxvY2tz
IGNyZWF0ZWQgd2hpbGUgbG93ZXJpbmcgY29kZSBpbiB0aGUgaGlnaCBibG9jayBoYXZlIHRoZSBm
cmVxdWVuY3kgb2YKKyAgICAgICAgLy8gdGhlIGhpZ2ggYmxvY2suIFRoaXMgaXMgYXBwcm9wcmlh
dGUgYmVjYXVzZSBCMyBkb2Vzbid0IG5lZWQgcHJlY2lzZSBmcmVxdWVuY2llcy4gSXQganVzdCBu
ZWVkcworICAgICAgICAvLyBzb21ldGhpbmcgcm91Z2hseSBhcHByb3hpbWF0ZSBmb3IgdGhpbmdz
IGxpa2UgcmVnaXN0ZXIgYWxsb2NhdGlvbi4KKyAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KG1f
aGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9j
ayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9jayk7CisgICAgICAgIAorICAgICAg
ICBtX25leHRIaWdoQmxvY2sgPSAwOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2Nr
SW5kZXggPSBtX2hpZ2hCbG9jay0+aW5kZXggKyAxOyBuZXh0QmxvY2tJbmRleCA8IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIG1fbmV4dEhpZ2hC
bG9jayA9IG1fZ3JhcGguYmxvY2sobmV4dEJsb2NrSW5kZXgpOworICAgICAgICAgICAgaWYgKG1f
bmV4dEhpZ2hCbG9jaykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBtX25leHRMb3dCbG9jayA9IG1fbmV4dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChtX25leHRI
aWdoQmxvY2spIDogMDsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbCBvZiB0aGlzIGVmZm9ydCB0
byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGtlZXAgdGhlCisg
ICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dyYW0gb3JkZXIuIFRoaXMgb3Vn
aHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKKyAgICAgICAgLy8gb2YgdGhlIGdlbmVyYXRl
ZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVyIHRoaW5ncykgYnV0IGl0IHdp
bGwKKyAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIgdG8gcmVhZC4KKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2NrKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChPcHRpb25zOjpmdGxDcmFzaGVzKCkpCisgICAgICAgICAgICBtX291dC50cmFwKCk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5jZmFIYXNWaXNpdGVkKSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIkJhaWxpbmcgYmVjYXVzZSBDRkEgZGlkbid0IHJlYWNoLlxuIik7CisgICAgICAg
ICAgICBjcmFzaChtX2hpZ2hCbG9jay0+aW5kZXgsIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9hdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLmJlZ2luQmxvY2sobV9oaWdoQmxvY2spOworICAgICAgICAKKyAgICAgICAgbV9zdGF0ZS5y
ZXNldCgpOworICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKG1fbm9kZUluZGV4ID0gMDsgbV9ub2RlSW5kZXggPCBtX2hp
Z2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIWNvbXBp
bGVOb2RlKG1fbm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgc2FmZWx5SW52YWxpZGF0ZUFmdGVyVGVybWluYXRpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAg
IGRhdGFMb2coIkJhaWxpbmcuXG4iKTsKKyAgICAgICAgY3Jhc2goKTsKKworICAgICAgICAvLyBJ
bnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHdl
IHdvdWxkIGV4cGVjdAorICAgICAgICAvLyB0aGVtIHRvIGJlIGludmFsaWRhdGVkIGFscmVhZHku
IEJ1dCB5b3UgY2FuIGhhdmUgdGhlIENGQSBiZWNvbWUgbW9yZQorICAgICAgICAvLyBwcmVjaXNl
IG92ZXIgdGltZSBiZWNhdXNlIHRoZSBzdHJ1Y3R1cmVzIG9mIG9iamVjdHMgY2hhbmdlIG9uIHRo
ZSBtYWluCisgICAgICAgIC8vIHRocmVhZC4gRmFpbGluZyB0byBkbyB0aGlzIHdvdWxkIHJlc3Vs
dCBpbiB3ZWlyZCBjcmFzaGVzIGR1ZSB0byBhIHZhbHVlCisgICAgICAgIC8vIGJlaW5nIHVzZWQg
YnV0IG5vdCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRXIQorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogdGFyZ2V0ID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghdGFyZ2V0KQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXMobV9o
aWdoQmxvY2ssIHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJCbG9jayAiLCAqdGFy
Z2V0LCAiIHdpbGwgYmFpbCBhbHNvLlxuIik7CisgICAgICAgICAgICAgICAgdGFyZ2V0LT5jZmFI
YXNWaXNpdGVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBib29sIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRl
clRlcm1pbmF0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOworICAg
ICAgICBtX29yaWdpbiA9IG1fbm9kZS0+b3JpZ2luOworICAgICAgICBtX291dC5zZXRPcmlnaW4o
bV9ub2RlKTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVk
KCkpCisgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIpOworICAg
ICAgICAKKyAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnJlc2l6ZSgwKTsKKyAgICAgICAg
CisgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKKyAgICAgICAgCisgICAg
ICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgREZHOjpVcHNpbG9uOgor
ICAgICAgICAgICAgY29tcGlsZVVwc2lsb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERGRzo6UGhpOgorICAgICAgICAgICAgY29tcGlsZVBoaSgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgorICAgICAgICAgICAgY29tcGlsZURvdWJsZUNvbnN0
YW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50Ogor
ICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIERvdWJsZVJlcDoKKyAgICAgICAgICAgIGNvbXBpbGVEb3VibGVSZXAoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAg
ICAgICBjb21waWxlRG91YmxlQXNJbnQzMigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgREZHOjpWYWx1ZVJlcDoKKyAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVJlcCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50NTJSZXA6CisgICAgICAgICAgICBjb21w
aWxlSW50NTJSZXAoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlVG9J
bnQzMjoKKyAgICAgICAgICAgIGNvbXBpbGVWYWx1ZVRvSW50MzIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKKyAgICAgICAgICAgIGNvbXBpbGVC
b29sZWFuVG9OdW1iZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgorICAgICAgICAgICAgY29tcGlsZUV4dHJhY3RPU1JFbnRyeUxvY2Fs
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRTdGFjaygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0U3RhY2s6CisgICAgICAgICAgICBjb21waWxlUHV0U3RhY2soKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERGRzo6Q2hlY2s6CisgICAgICAgICAgICBjb21waWxlTm9PcCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVG9UaGlzOgorICAgICAgICAgICAg
Y29tcGlsZVRvVGhpcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVB
ZGQ6CisgICAgICAgICAgICBjb21waWxlVmFsdWVBZGQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgICAgIGNvbXBpbGVTdHJDYXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIEFyaXRo
U3ViOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoQWRkT3JTdWIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEFyaXRoQ2x6MzI6CisgICAgICAgICAgICBjb21waWxlQXJpdGhD
bHozMigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAg
ICAgICAgICBjb21waWxlQXJpdGhNdWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFyaXRoRGl2OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoRGl2KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aE1vZDoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0
aE1vZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAg
ICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgICAgICBjb21waWxlQXJpdGhNaW5Pck1heCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgICAgICBj
b21waWxlQXJpdGhBYnMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRo
U2luOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoU2luKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBcml0aENvczoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aENvcygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgICAgICBj
b21waWxlQXJpdGhQb3coKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRo
UmFuZG9tOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUmFuZG9tKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcml0aFJvdW5kOgorICAgICAgICAgICAgY29tcGlsZUFyaXRo
Um91bmQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoU3FydDoKKyAg
ICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFyaXRoTG9nOgorICAgICAgICAgICAgY29tcGlsZUFyaXRoTG9nKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aEZSb3VuZDoKKyAgICAgICAgICAgIGNvbXBp
bGVBcml0aEZSb3VuZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJpdGhO
ZWdhdGU6CisgICAgICAgICAgICBjb21waWxlQXJpdGhOZWdhdGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIERGRzo6Qml0QW5kOgorICAgICAgICAgICAgY29tcGlsZUJpdEFu
ZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpCaXRPcjoKKyAgICAg
ICAgICAgIGNvbXBpbGVCaXRPcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
REZHOjpCaXRYb3I6CisgICAgICAgICAgICBjb21waWxlQml0WG9yKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgICAgICBjb21waWxlQml0UlNo
aWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAg
ICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJpdFVSU2hpZnQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAgICAg
Y29tcGlsZVVJbnQzMlRvTnVtYmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hlY2tDZWxsOgorICAgICAgICAgICAg
Y29tcGlsZUNoZWNrQ2VsbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hl
Y2tOb3RFbXB0eToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja05vdEVtcHR5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja0JhZENlbGw6CisgICAgICAgICAgICBjb21w
aWxlQ2hlY2tCYWRDZWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVj
a0lkZW50OgorICAgICAgICAgICAgY29tcGlsZUNoZWNrSWRlbnQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldEV4ZWN1dGFibGU6CisgICAgICAgICAgICBjb21waWxlR2V0
RXhlY3V0YWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKKyAgICAgICAgICAgIGNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBjb21waWxlUHV0U3RydWN0dXJlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRCeUlkOgorICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeUlkKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbjoKKyAgICAg
ICAgICAgIGNvbXBpbGVJbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0
QnlJZDoKKyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5SWRG
bHVzaDoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRCeUlkKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBQdXRHZXR0ZXJCeUlkOgorICAgICAgICBjYXNlIFB1dFNldHRlckJ5SWQ6
CisgICAgICAgICAgICBjb21waWxlUHV0QWNjZXNzb3JCeUlkKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQdXRHZXR0ZXJTZXR0ZXJCeUlkOgorICAgICAgICAgICAgY29tcGls
ZVB1dEdldHRlclNldHRlckJ5SWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1dEdldHRlckJ5VmFsOgorICAgICAgICBjYXNlIFB1dFNldHRlckJ5VmFsOgorICAgICAgICAg
ICAgY29tcGlsZVB1dEFjY2Vzc29yQnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEJ1dHRlcmZseVJlYWRPbmx5Ogor
ICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgorICAgICAgICAgICAg
Y29tcGlsZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICBjb21waWxl
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2hlY2tBcnJheToKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0FycmF5KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAg
IGNvbXBpbGVHZXRBcnJheUxlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ2hlY2tJbkJvdW5kczoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja0luQm91bmRzKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgICAg
IGNvbXBpbGVQdXRCeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgY29tcGlsZUFycmF5UHVzaCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgICAgICBjb21waWxlQXJyYXlQb3Ao
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246Cisg
ICAgICAgICAgICBjb21waWxlQ3JlYXRlQWN0aXZhdGlvbigpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlv
bjoKKyAgICAgICAgY2FzZSBOZXdHZW5lcmF0b3JGdW5jdGlvbjoKKyAgICAgICAgICAgIGNvbXBp
bGVOZXdGdW5jdGlvbigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRl
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50
cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1l
bnRzOgorICAgICAgICAgICAgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cygpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgorICAgICAg
ICAgICAgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU5ld09iamVjdCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAg
ICBjb21waWxlTmV3QXJyYXkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5l
d0FycmF5QnVmZmVyOgorICAgICAgICAgICAgY29tcGlsZU5ld0FycmF5QnVmZmVyKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgorICAgICAgICAg
ICAgY29tcGlsZU5ld0FycmF5V2l0aFNpemUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICBjb21waWxlTmV3VHlwZWRBcnJheSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAg
ICAgICAgICAgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAg
ICAgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICBjYXNlIENhbGxTdHJpbmdDb25zdHJ1
Y3RvcjoKKyAgICAgICAgICAgIGNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVjdG9y
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZToKKyAgICAg
ICAgICAgIGNvbXBpbGVUb1ByaW1pdGl2ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICBjb21waWxlTWFrZVJvcGUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgICAgIGNvbXBp
bGVTdHJpbmdDaGFyQXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgICAg
ICAgICAgY29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEdldEdldHRlcjoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRHZXR0
ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldFNldHRlcjoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRTZXR0ZXIoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAg
ICAgICAgICBjb21waWxlUHV0QnlPZmZzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBjb21waWxlTXVsdGlQdXRCeU9m
ZnNldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0R2xvYmFsVmFyOgor
ICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRHbG9iYWxWYXJpYWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UHV0R2xvYmFsVmFyaWFibGU6CisgICAgICAgICAgICBjb21waWxlUHV0R2xvYmFsVmFyaWFibGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgICAg
ICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHZXRDYWxsZWU6CisgICAgICAgICAgICBjb21waWxlR2V0Q2FsbGVlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRBcmd1bWVudENvdW50OgorICAgICAgICAgICAg
Y29tcGlsZUdldEFyZ3VtZW50Q291bnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdldFNjb3BlOgorICAgICAgICAgICAgY29tcGlsZUdldFNjb3BlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTa2lwU2NvcGU6CisgICAgICAgICAgICBjb21waWxlU2tp
cFNjb3BlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFy
OgorICAgICAgICAgICAgY29tcGlsZUdldENsb3N1cmVWYXIoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CisgICAgICAgICAgICBjb21waWxlUHV0Q2xv
c3VyZVZhcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3Vt
ZW50czoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRGcm9tQXJndW1lbnRzKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50czoKKyAgICAgICAgICAgIGNvbXBp
bGVQdXRUb0FyZ3VtZW50cygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29t
cGFyZUVxOgorICAgICAgICAgICAgY29tcGlsZUNvbXBhcmVFcSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICAgICAgY29tcGlsZUNv
bXBhcmVTdHJpY3RFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tcGFy
ZUxlc3M6CisgICAgICAgICAgICBjb21waWxlQ29tcGFyZUxlc3MoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgICAgICBjb21waWxlQ29t
cGFyZUxlc3NFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CisgICAgICAgICAgICBjb21waWxlQ29tcGFyZUdyZWF0ZXIoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgICAgICAgICBjb21w
aWxlQ29tcGFyZUdyZWF0ZXJFcSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
TG9naWNhbE5vdDoKKyAgICAgICAgICAgIGNvbXBpbGVMb2dpY2FsTm90KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5l
ZENhbGxlcjoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICBjb21waWxlQ2Fs
bE9yQ29uc3RydWN0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bDoKKyAgICAgICAgICAgIGNvbXBpbGVUYWlsQ2FsbCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKKyAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKKyAgICAgICAgICAg
IGNvbXBpbGVMb2FkVmFyYXJncygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBjb21waWxlRm9yd2FyZFZhcmFyZ3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERGRzo6SnVtcDoKKyAgICAgICAgICAgIGNv
bXBpbGVKdW1wKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBERkc6OkJyYW5j
aDoKKyAgICAgICAgICAgIGNvbXBpbGVCcmFuY2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERGRzo6U3dpdGNoOgorICAgICAgICAgICAgY29tcGlsZVN3aXRjaCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgREZHOjpSZXR1cm46CisgICAgICAgICAgICBj
b21waWxlUmV0dXJuKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGb3JjZU9T
UkV4aXQ6CisgICAgICAgICAgICBjb21waWxlRm9yY2VPU1JFeGl0KCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUaHJvdzoKKyAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgorICAgICAgICAgICAgY29tcGlsZVRocm93KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbnZhbGlkYXRpb25Qb2ludDoKKyAgICAgICAgICAgIGNvbXBpbGVJbnZhbGlk
YXRpb25Qb2ludCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNVbmRlZmlu
ZWQ6CisgICAgICAgICAgICBjb21waWxlSXNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIElzQm9vbGVhbjoKKyAgICAgICAgICAgIGNvbXBpbGVJc0Jvb2xlYW4o
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTnVtYmVyOgorICAgICAgICAg
ICAgY29tcGlsZUlzTnVtYmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
c1N0cmluZzoKKyAgICAgICAgICAgIGNvbXBpbGVJc1N0cmluZygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXNPYmplY3Q6CisgICAgICAgICAgICBjb21waWxlSXNPYmplY3Qo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgorICAg
ICAgICAgICAgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJc0Z1bmN0aW9uOgorICAgICAgICAgICAgY29tcGlsZUlzRnVuY3Rpb24oKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVPZjoKKyAgICAgICAgICAgIGNv
bXBpbGVUeXBlT2YoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENoZWNrVHlw
ZUluZm9GbGFnczoKKyAgICAgICAgICAgIGNvbXBpbGVDaGVja1R5cGVJbmZvRmxhZ3MoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE92ZXJyaWRlc0hhc0luc3RhbmNlOgorICAg
ICAgICAgICAgY29tcGlsZU92ZXJyaWRlc0hhc0luc3RhbmNlKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICAgICAgY29tcGlsZUluc3RhbmNl
T2YoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206
CisgICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZkN1c3RvbSgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ291bnRFeGVjdXRpb246CisgICAgICAgICAgICBjb21waWxlQ291
bnRFeGVjdXRpb24oKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0b3JlQmFy
cmllcjoKKyAgICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEhhc0dlbmVyaWNQcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVIYXNHZW5lcmljUHJvcGVy
dHkoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEhhc1N0cnVjdHVyZVByb3Bl
cnR5OgorICAgICAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKKyAgICAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RQbmFtZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVu
Z3RoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1l
cmF0b3I6CisgICAgICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6
CisgICAgICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgor
ICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgICAgICAgICBjb21w
aWxlVG9JbmRleFN0cmluZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJ
bW1lZGlhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgorICAgICAgICAgICAgY29tcGlsZU1hdGVyaWFsaXplTmV3T2JqZWN0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b246CisgICAgICAgICAgICBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CisgICAg
ICAgICAgICBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDb3B5UmVzdDoKKyAgICAgICAgICAgIGNvbXBpbGVDb3B5UmVzdCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0UmVzdExlbmd0aDoKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIFBoYW50b21Mb2NhbDoKKyAgICAgICAgY2FzZSBMb29wSGludDoKKyAgICAgICAgY2Fz
ZSBNb3ZIaW50OgorICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhpdE9L
OgorICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CisgICAgICAgIGNhc2UgUGhhbnRvbU5l
d0Z1bmN0aW9uOgorICAgICAgICBjYXNlIFBoYW50b21OZXdHZW5lcmF0b3JGdW5jdGlvbjoKKyAg
ICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgY2FzZSBQaGFudG9t
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjYXNlIFBoYW50b21DbG9uZWRBcmd1bWVudHM6Cisg
ICAgICAgIGNhc2UgUHV0SGludDoKKyAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKKyAgICAgICAg
Y2FzZSBLaWxsU3RhY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29nbml6ZWQgbm9kZSBp
biBGVEwgYmFja2VuZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGlmIChtX25vZGUtPmlzVGVybWluYWwoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKKyAgICAg
ICAgICAgIHNhZmVseUludmFsaWRhdGVBZnRlclRlcm1pbmF0aW9uKCk7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0
b3IuZXhlY3V0ZU5vZGUobV9ub2RlKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlRWZm
ZWN0cyhub2RlSW5kZXgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlVXBzaWxvbigpCisgICAgeworICAgICAgICBMVmFsdWUgdXBzaWxv
blZhbHVlID0gbnVsbHB0cjsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgICAgIHVwc2lsb25W
YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CisgICAg
ICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgdXBz
aWxvblZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEtub3duQm9vbGVhblVz
ZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBj
YXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIHVwc2lsb25WYWx1ZSA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgorICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgdXBzaWxvbiA9IG1fb3V0
LmFuY2hvcih1cHNpbG9uVmFsdWUpOworICAgICAgICBMVmFsdWUgcGhpTm9kZSA9IG1fcGhpcy5n
ZXQobV9ub2RlLT5waGkoKSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocGhpTm9k
ZSwgdXBzaWxvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVBoaSgpCisgICAgewor
ICAgICAgICBMVmFsdWUgcGhpID0gbV9waGlzLmdldChtX25vZGUpOworICAgICAgICBtX291dC5t
X2Jsb2NrLT5hcHBlbmQocGhpKTsKKworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+ZmxhZ3MoKSAm
IE5vZGVSZXN1bHRNYXNrKSB7CisgICAgICAgIGNhc2UgTm9kZVJlc3VsdERvdWJsZToKKyAgICAg
ICAgICAgIHNldERvdWJsZShwaGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Tm9kZVJlc3VsdEludDMyOgorICAgICAgICAgICAgc2V0SW50MzIocGhpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE5vZGVSZXN1bHRJbnQ1MjoKKyAgICAgICAgICAgIHNldElu
dDUyKHBoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9v
bGVhbjoKKyAgICAgICAgICAgIHNldEJvb2xlYW4ocGhpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE5vZGVSZXN1bHRKUzoKKyAgICAgICAgICAgIHNldEpTVmFsdWUocGhpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRG91YmxlQ29uc3RhbnQo
KQorICAgIHsKKyAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKG1fbm9kZS0+YXNO
dW1iZXIoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnQ1MkNvbnN0YW50KCkK
KyAgICB7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBtX25vZGUtPmFzTWFjaGluZUludCgpOwor
ICAgICAgICAKKyAgICAgICAgc2V0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSA8PCBKU1Zh
bHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7CisgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LmNv
bnN0SW50NjQodmFsdWUpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVSZXAoKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gdW5ib3hEb3VibGUo
dmFsdWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAgUmVhbE51bWJlclVzZSBpbnQgY2FzZSIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiRG91YmxlUmVwIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihkb3VibGVWYWx1
ZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZhbHVlKSwKKyAgICAgICAgICAgICAgICB1c3Vh
bGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisg
ICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3Bl
Y0J5dGVjb2RlUmVhbE51bWJlciwKKyAgICAgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91YmxlKSk7CisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmludFRv
RG91YmxlKHVuYm94SW50MzIodmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZToKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkQ29udmVydE5vbk51bWJlciA9IG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE5v
dENlbGxVc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNW
YWx1ZVRvRG91YmxlIHVuYm94aW5nIGludCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91Ymxl
IHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgZG91
YmxlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub25Eb3VibGVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyB1bmRlZmluZWQgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlz
Tm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShkb3VibGVUZXN0aW5nKSwgdW5zdXJlKGludENhc2UpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
bnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2YWx1ZSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWVJ
c051bWJlciA9IGlzTnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVtYmVyLCB1c3VhbGx5KGRvdWJsZUNh
c2UpLCByYXJlbHkobm9uRG91YmxlQ2FzZSkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhkb3VibGVDYXNlLCBub25Eb3VibGVDYXNlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hEb3VibGUodmFsdWUpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgaWYgKHNob3Vs
ZENvbnZlcnROb25OdW1iZXIpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bmRlZmlu
ZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydGlu
ZyB1bmRlZmluZWQgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB0ZXN0TnVs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIG51
bGwgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBudWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgbnVsbCBjYXNlIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3RCb29sZWFuVHJ1ZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGJvb2xlYW4gdHJ1ZSBj
YXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuVHJ1ZUNh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xl
YW4gdHJ1ZSBjYXNlIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29s
ZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29u
dmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub25Eb3VibGVDYXNlLCB1bmRlZmluZWRDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWVJc1VuZGVmaW5lZCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0
KFZhbHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNV
bmRlZmluZWQsIHVuc3VyZSh1bmRlZmluZWRDYXNlKSwgdW5zdXJlKHRlc3ROdWxsQ2FzZSkpOwor
CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2FzZSwgdGVzdE51bGxD
YXNlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRVbmRlZmluZWQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHRlc3ROdWxsQ2FzZSwgbnVsbENhc2UpOworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVsbCwgdW5zdXJlKG51bGxD
YXNlKSwgdW5zdXJlKHRlc3RCb29sZWFuVHJ1ZUNhc2UpKTsKKworICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWROdWxsID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNv
bnN0RG91YmxlKDApKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0Qm9vbGVhblRydWVDYXNlLCBj
b252ZXJ0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc0Jv
b2xlYW5UcnVlID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVl
KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNCb29sZWFuVHJ1ZSwgdW5z
dXJlKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUoY29udmVydEJvb2xlYW5GYWxzZUNh
c2UpKTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZlcnRCb29sZWFuVHJ1
ZUNhc2UsIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBjb252ZXJ0ZWRUcnVlID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKDEp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSwgY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlID0g
bV9vdXQubm90RXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOworICAg
ICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+
Y2hpbGQxKCksIH5TcGVjQ2VsbCwgdmFsdWVJc05vdEJvb2xlYW5GYWxzZSk7CisgICAgICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2UgPSBtX291dC5hbmNob3IobV9vdXQu
Y29uc3REb3VibGUoMCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCwgY29udmVy
dGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFsc2UpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25E
b3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNW
YWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBt
X291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKworICAg
ICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJs
ZSwgdW5ib3hlZERvdWJsZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAgc2V0RG91
YmxlKHN0cmljdEludDUyVG9Eb3VibGUobG93U3RyaWN0SW50NTIobV9ub2RlLT5jaGlsZDEoKSkp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVz
ZSBraW5kIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVEb3VibGVBc0lu
dDMyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBjb252ZXJ0RG91Ymxl
VG9JbnQzMihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIHNob3VsZENoZWNrTmVnYXRpdmVa
ZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKTsKKyAgICAgICAgc2V0SW50MzIoaW50ZWdlclZhbHVl
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVWYWx1ZVJlcCgpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgRG91Ymxl
UmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIH5TcGVjRG91YmxlSW1wdXJlTmFOKSkgewor
ICAgICAgICAgICAgICAgIHZhbHVlID0gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVFcXVhbCh2YWx1ZSwgdmFsdWUpLCB2YWx1ZSwgbV9vdXQuY29uc3REb3Vi
bGUoUE5hTikpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKGJveERvdWJsZSh2YWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogeworICAgICAgICAgICAg
c2V0SlNWYWx1ZShzdHJpY3RJbnQ1MlRvSlNWYWx1ZShsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNo
aWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVJbnQ1MlJlcCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICBzZXRTdHJpY3RJ
bnQ1MihtX291dC5zaWduRXh0MzJUbzY0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNYWNoaW5lSW50
VXNlOgorICAgICAgICAgICAgc2V0U3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAganNWYWx1
ZVRvU3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCksIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVw
TWFjaGluZUludFVzZToKKyAgICAgICAgICAgIHNldFN0cmljdEludDUyKAorICAgICAgICAgICAg
ICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoCisgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hp
bGQxKCksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVZhbHVlVG9JbnQzMigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgp
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6CisgICAgICAgICAgICBzZXRJbnQzMihkb3VibGVUb0ludDMyKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAgIGNhc2UgTm90Q2VsbFVzZTogeworICAgICAg
ICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG1fbm9kZS0+
Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIHNldEludDMyKHZhbHVlLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB2YWx1ZSA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgc2V0SW50MzIobnVtYmVyT3JO
b3RDZWxsVG9JbnQzMihtX25vZGUtPmNoaWxkMSgpLCB2YWx1ZS52YWx1ZSgpKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFdlJ2xsIGJhc2ljYWxseSBqdXN0IGdldCBoZXJlIGZvciBjb25zdGFudHMuIEJ1dCBpdCdz
IGdvb2QgdG8gaGF2ZSB0aGlzCisgICAgICAgICAgICAvLyBjYXRjaC1hbGwgc2luY2Ugd2Ugb2Z0
ZW4gYWRkIG5ldyByZXByZXNlbnRhdGlvbnMgaW50byB0aGUgbWl4LgorICAgICAgICAgICAgc2V0
SW50MzIoCisgICAgICAgICAgICAgICAgbnVtYmVyT3JOb3RDZWxsVG9JbnQzMigKKyAgICAgICAg
ICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwKKyAgICAgICAgICAgICAgICAgICAgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVCb29sZWFuVG9OdW1iZXIoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6IHsKKyAgICAgICAg
ICAgIHNldEludDMyKG1fb3V0Lnplcm9FeHQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwg
bV9vdXQuaW50MzIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNCb29sSW50MzIgfCBTcGVjQm9vbGVhbikpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRBbmQobV9vdXQuY2FzdFRvSW50MzIodmFsdWUpLCBtX291dC5pbnQzMk9uZSkpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkJvb2xlYW5Ub051bWJlciBib29sZWFuIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xlYW5Ub051bWJlciBj
b250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5vdEJvb2xlYW5SZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZSht
X25vZGUtPmNoaWxkMSgpKSksCisgICAgICAgICAgICAgICAgdW5zdXJlKGJvb2xlYW5DYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGJvb2xlYW5DYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgYm9vbGVhblJlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0KHVuYm94Qm9vbGVh
bih2YWx1ZSksIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKSk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIGJvb2xlYW5SZXN1bHQsIG5vdEJvb2xlYW5SZXN1bHQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRXh0
cmFjdE9TUkVudHJ5TG9jYWwoKQorICAgIHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1ZhbHVlKj4oCisgICAgICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmZ0bEZvck9TUkVudHJ5KCktPmVudHJ5QnVmZmVyKCktPmRhdGFCdWZmZXIoKSk7
CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGJ1ZmZlciAr
IG1fbm9kZS0+dW5saW5rZWRMb2NhbCgpLnRvTG9jYWwoKSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0U3RhY2soKQorICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNl
IG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBhbmQgYXJndW1lbnRzLiBGb3IgYXJndW1lbnRz
LCB3ZSBtaWdodCBoYXZlCisgICAgICAgIC8vIGFscmVhZHkgbG9hZGVkIGl0LgorICAgICAgICBp
ZiAoTFZhbHVlIHZhbHVlID0gbV9sb2FkZWRBcmd1bWVudFZhbHVlcy5nZXQobV9ub2RlKSkgewor
ICAgICAgICAgICAgc2V0SlNWYWx1ZSh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+
c3RhY2tBY2Nlc3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKGRhdGEtPmxvY2FsKTsKKyAgICAgICAgCisgICAgICAgIERG
R19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0NvbmNyZXRlKGRhdGEtPmZvcm1hdCkpOworICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZGF0YS0+Zm9ybWF0ICE9IEZsdXNoZWRE
b3VibGUpOyAvLyBUaGlzIGp1c3QgaGFwcGVucyB0byBub3QgYXJpc2UgZm9yIEdldFN0YWNrcywg
cmlnaHQgbm93LiBJdCB3b3VsZCBiZSB0cml2aWFsIHRvIHN1cHBvcnQuCisgICAgICAgIAorICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkpCisgICAgICAgICAgICBz
ZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3NG
b3IoZGF0YS0+bWFjaGluZUxvY2FsKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQ
dXRTdGFjaygpCisgICAgeworICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpOworICAgICAgICBzd2l0Y2ggKGRhdGEtPmZvcm1hdCkgeworICAg
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2
YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5t
YWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUz
Mih2YWx1ZSwgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6
IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRhLT5tYWNo
aW5lTG9jYWwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBGbHVzaGVkQ2VsbDogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFs
dWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46IHsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBhZGRy
ZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU5vT3AoKQorICAgIHsK
KyAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCBzcGVjdWxh
dGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb1RoaXMoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlRvVGhpcyBpcyBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJUb1RoaXMgc2xvdyBjYXNlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvVGhpcyBjb250
aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1c3VhbGx5KGlz
Q2VsbENhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgc2xvd0Nhc2UpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZhbHVlKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzVHlwZSh2YWx1ZSwgRmluYWxPYmplY3RUeXBlKSwgdXN1YWxs
eShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBKX0pJVE9wZXJh
dGlvbl9FSiBmdW5jdGlvbjsKKyAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9u
VG9UaGlzU3RyaWN0OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJh
dGlvblRvVGhpczsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKGZ1
bmN0aW9uKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFz
dFJlc3VsdCwgc2xvd1Jlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVWYWx1
ZUFkZCgpCisgICAgeworICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxKSVRBZGRHZW5lcmF0b3I+
KG9wZXJhdGlvblZhbHVlQWRkKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlU3RyQ2F0
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgIGlmIChtX25vZGUtPmNo
aWxkMygpKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAg
bV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQzKSwgbV9jYWxsRnJh
bWUsCisgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gdm1DYWxsKAorICAgICAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyQ2F0MiksIG1fY2Fs
bEZyYW1lLAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICB9CisgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJp
dGhBZGRPclN1YigpCisgICAgeworICAgICAgICBib29sIGlzU3ViID0gIG1fbm9kZS0+b3AoKSA9
PSBBcml0aFN1YjsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewor
ICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVy
ZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIHNldEludDMyKGlz
U3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDaGVj
a1ZhbHVlKiByZXN1bHQgPQorICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3VsYXRl
U3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7CisgICAg
ICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vcmlnaW4pOworICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZTogeworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
LmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikKKyAgICAgICAgICAgICAgICAmJiAhYWJzdHJhY3RWYWx1
ZShtX25vZGUtPmNoaWxkMigpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7CisgICAgICAgICAg
ICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dX
aGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKKyAgICAgICAgICAgICAgICBM
VmFsdWUgcmlnaHQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMigpLCBraW5kKTsKKyAgICAgICAg
ICAgICAgICBzZXRJbnQ1Mihpc1N1YiA/IG1fb3V0LnN1YihsZWZ0LCByaWdodCkgOiBtX291dC5h
ZGQobGVmdCwgcmlnaHQpLCBraW5kKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0KKyAgICAgICAgICAgICAgICBp
c1N1YiA/IG1fb3V0LnNwZWN1bGF0ZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5zcGVjdWxhdGVB
ZGQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1bHQsIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIHNldElu
dDUyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgQzEgPSBs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgQzIgPSBsb3dE
b3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/
IG1fb3V0LmRvdWJsZVN1YihDMSwgQzIpIDogbV9vdXQuZG91YmxlQWRkKEMxLCBDMikpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsK
KyAgICAgICAgICAgIGlmICghaXNTdWIpIHsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVFN1YkdlbmVy
YXRvcj4ob3BlcmF0aW9uVmFsdWVTdWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aENsejMyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBv
cGVyYW5kID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNldEludDMyKG1f
b3V0LmN0bHozMihvcGVyYW5kKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFyaXRo
TXVsKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0OworCisgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5h
cml0aE1vZGUoKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubXVsKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIHNw
ZWN1bGF0aW9uID0gbV9vdXQuc3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
ICAgICBibGVzc1NwZWN1bGF0aW9uKHNwZWN1bGF0aW9uLCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX29yaWdpbik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3BlY3VsYXRpb247
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgeworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBzbG93
IGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAg
ICBtX291dC5ub3RaZXJvMzIocmVzdWx0KSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHko
c2xvd0Nhc2UpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhh
bihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBz
ZXRJbnQzMihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7CisgICAgICAgICAgICBJbnQ1MktpbmQg
a2luZDsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93V2hpY2hldmVySW50NTIobV9ub2Rl
LT5jaGlsZDEoKSwga2luZCk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQ1Miht
X25vZGUtPmNoaWxkMigpLCBvcHBvc2l0ZShraW5kKSk7CisKKyAgICAgICAgICAgIENoZWNrVmFs
dWUqIHJlc3VsdCA9IG1fb3V0LnNwZWN1bGF0ZU11bChsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwg
bV9vcmlnaW4pOworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9u
b2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNdWwgc2xvdyBjYXNlIikpOworICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhNdWwgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzY0
KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKGxl
ZnQsIG1fb3V0LmludDY0WmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2
ZVplcm8sIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0Lmlu
dDY0WmVybykpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgICAgIHNldERvdWJsZSgKKyAgICAgICAgICAgICAg
ICBtX291dC5kb3VibGVNdWwobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICBlbWl0QmluYXJ5U25pcHBldDxK
SVRNdWxHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlTXVsKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhEaXYoKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNl
OiB7CisgICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKTsKKworICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1f
bm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgemVyb051
bWVyYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgemVybyBudW1lcmF0b3Ii
KSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbnVtZXJhdG9yQ29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aERpdiBudW1lcmF0b3IgY29udGludWF0aW9uIikp
OworCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBt
X291dC5pc1plcm8zMihudW1lcmF0b3IpLAorICAgICAgICAgICAgICAgICAgICByYXJlbHkoemVy
b051bWVyYXRvciksIHVzdWFsbHkobnVtZXJhdG9yQ29udGludWF0aW9uKSk7CisKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oemVyb051
bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKKworICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0Lmxlc3NUaGFuKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMlplcm8pKTsKKworICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAobnVtZXJhdG9yQ29udGludWF0aW9uKTsKKworICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG51bWVyYXRvckNvbnRpbnVhdGlvbiwgaW5uZXJMYXN0TmV4dCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzaG91bGRDaGVj
a092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2
IHVuc2FmZSBkZW5vbWluYXRvciIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoRGl2IGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3RlZERlbm9taW5hdG9yID0gbV9vdXQu
YWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZShhZGp1c3RlZERlbm9taW5h
dG9yLCBtX291dC5pbnQzMk9uZSksCisgICAgICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGlu
dWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7CisKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9taW5hdG9yLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUzMSA9IG1fb3V0
LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9taW5hdG9yKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIs
IG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKKyAgICAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbV9vdXQuZGl2KG51bWVyYXRvciwgZGVub21pbmF0b3IpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwobV9vdXQubXVsKHJlc3VsdCwgZGVub21p
bmF0b3IpLCBudW1lcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuY2hpbGxE
aXYobnVtZXJhdG9yLCBkZW5vbWluYXRvcikpOworCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOiB7CisgICAgICAg
ICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlRGl2KAorICAgICAgICAgICAgICAgIGxvd0RvdWJs
ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogewor
ICAgICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklURGl2R2VuZXJhdG9yLCBOZWVkU2NyYXRj
aEZQUj4ob3BlcmF0aW9uVmFsdWVEaXYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhNb2QoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgbnVtZXJhdG9yID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBMVmFsdWUgZGVub21pbmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKKworICAgICAgICAgICAgTFZhbHVlIHJlbWFpbmRlcjsKKyAgICAgICAgICAgIGlmIChz
aG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKSB7CisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgdW5zYWZlRGVub21pbmF0b3IgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoTW9kIHVuc2FmZSBkZW5vbWluYXRvciIpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTW9kIGNvbnRp
bnVhdGlvbiIpKTsKKworICAgICAgICAgICAgICAgIExWYWx1ZSBhZGp1c3RlZERlbm9taW5hdG9y
ID0gbV9vdXQuYWRkKGRlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZShhZGp1c3Rl
ZERlbm9taW5hdG9yLCBtX291dC5pbnQzMk9uZSksCisgICAgICAgICAgICAgICAgICAgIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KHVuc2FmZURlbm9taW5hdG9yKSk7CisKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuc2FmZURlbm9t
aW5hdG9yLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIExWYWx1ZSBuZWcyVG9UaGUz
MSA9IG1fb3V0LmNvbnN0SW50MzIoLTIxNDc0ODM2NDctMSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzMyKGRlbm9t
aW5hdG9yKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IG51bGxwdHIsIG1fb3V0LmVxdWFsKG51bWVyYXRvciwgbmVnMlRvVGhlMzEpKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQubW9kKG51bWVyYXRvciwgZGVub21pbmF0b3IpOworICAgICAgICAg
ICAgICAgIHJlbWFpbmRlciA9IHJlc3VsdDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHJlbWFpbmRlciA9IG1fb3V0LmNoaWxsTW9kKG51bWVyYXRvciwgZGVub21pbmF0b3Ip
OworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0
aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWdhdGl2ZU51bWVyYXRv
ciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbmVnYXRpdmUgbnVtZXJhdG9yIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG51bWVyYXRvckNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgbnVtZXJhdG9yIGNvbnRpbnVhdGlvbiIpKTsK
KworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9v
dXQubGVzc1RoYW4obnVtZXJhdG9yLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAgICAg
ICAgICB1bnN1cmUobmVnYXRpdmVOdW1lcmF0b3IpLCB1bnN1cmUobnVtZXJhdG9yQ29udGludWF0
aW9uKSk7CisKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obmVnYXRpdmVOdW1lcmF0b3IsIG51bWVyYXRvckNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0LmlzWmVybzMyKHJlbWFpbmRlcikpOworCisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChu
dW1lcmF0b3JDb250aW51YXRpb24pOworCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2V0SW50MzIocmVtYWluZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKKyAgICAg
ICAgICAgIHNldERvdWJsZSgKKyAgICAgICAgICAgICAgICBtX291dC5kb3VibGVNb2QobG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhNaW5Pck1heCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5
VXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUg
cmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc2V0SW50MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuc2VsZWN0KAorICAgICAgICAg
ICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KKyAgICAgICAgICAgICAgICAgICAg
ICAgID8gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICA6IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBsZWZ0KSwKKyAgICAgICAgICAgICAgICAgICAgbGVm
dCwgcmlnaHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
QmFzaWNCbG9jayBub3RMZXNzVGhhbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNaW4v
QXJpdGhNYXggbm90IGxlc3MgdGhhbiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNaW4vQXJpdGhNYXggY29udGlu
dWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDI+IHJlc3VsdHM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5k
KG1fb3V0LmFuY2hvcihsZWZ0KSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRoTWluCisgICAgICAgICAgICAgICAgICAgID8g
bV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmlnaHQpCisgICAgICAgICAgICAgICAgICAgIDog
bV9vdXQuZG91YmxlR3JlYXRlclRoYW4obGVmdCwgcmlnaHQpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90TGVzc1RoYW4pKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RMZXNz
VGhhbiwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgbV9ub2RlLT5vcCgpID09IEFyaXRo
TWluCisgICAgICAgICAgICAgICAgICAgID8gbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFs
KGxlZnQsIHJpZ2h0KQorICAgICAgICAgICAgICAgICAgICA6IG1fb3V0LmRvdWJsZUxlc3NUaGFu
T3JFcXVhbChsZWZ0LCByaWdodCksCisgICAgICAgICAgICAgICAgcmlnaHQsIG1fb3V0LmNvbnN0
RG91YmxlKFBOYU4pKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlw
ZSwgcmVzdWx0cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQXJpdGhBYnMoKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7
CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsK
KworICAgICAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5hU2hyKHZhbHVlLCBtX291dC5jb25z
dEludDMyKDMxKSk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYml0WG9yKG1h
c2ssIG1fb3V0LmFkZChtYXNrLCB2YWx1ZSkpOworCisgICAgICAgICAgICBpZiAoc2hvdWxkQ2hl
Y2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXF1YWwocmVzdWx0LCBtX291dC5jb25z
dEludDMyKDEgPDwgMzEpKSk7CisKKyAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91
YmxlUmVwVXNlOiB7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlQWJzKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVBcml0aFNpbigpIHsgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZVNpbihsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsgfQorCisgICAgdm9p
ZCBjb21waWxlQXJpdGhDb3MoKSB7IHNldERvdWJsZShtX291dC5kb3VibGVDb3MobG93RG91Ymxl
KG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KCkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBsbHZtLnBvd2kgdG8gYmV0dGVyIHVu
ZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KKyAgICAgICAgLy8gSXQg
bWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBsb29wIGluIERGRyB0b28uCisgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkKKyAgICAgICAg
ICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgp
KSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBleHBvbmVudCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50SXNTbWFsbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aFBvdyB0ZXN0IGludGVnZXIgZXhwb25lbnQgaXMgc21hbGwu
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50UG93QmxvY2sgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIChpbnQpZG91YmxlKS4i
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIGRvdWJsZSkuIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCBjaGVjayBl
eHBvbmVudCBpcyBpbmZpbml0eS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuYW5FeGNl
cHRpb25CYXNlSXNPbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IE5hTiBFeGNl
cHRpb24sIGNoZWNrIGJhc2UgaXMgb25lLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHBv
d0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyByZWd1bGFyIHBvdyIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0aW9uLCByZXN1bHQgaXMgTmFOLiIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQXJpdGhQb3cgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBMVmFsdWUg
aW50ZWdlckV4cG9uZW50ID0gbV9vdXQuZG91YmxlVG9JbnQoZXhwb25lbnQpOworICAgICAgICAg
ICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQuaW50VG9E
b3VibGUoaW50ZWdlckV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElzSW50
ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBpbnRlZ2VyRXhwb25lbnRDb252ZXJ0
ZWRUb0RvdWJsZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goZXhwb25lbnRJc0ludGVnZXIs
IHVuc3VyZShpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2spLCB1bnN1cmUoZG91YmxlRXhwb25l
bnRQb3dCbG9ja0VudHJ5KSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFsbEJsb2NrLCBpbnRlZ2VyRXhwb25l
bnRQb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50QmVsb3cxMDAw
ID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5jb25zdEludDMyKDEwMDApKTsK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhwb25lbnRCZWxvdzEwMDAsIHVzdWFs
bHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHkoZG91YmxlRXhwb25lbnRQb3dCbG9j
a0VudHJ5KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGludGVnZXJFeHBvbmVudFBv
d0Jsb2NrLCBkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpOworICAgICAgICAgICAgVmFsdWVG
cm9tQmxvY2sgcG93RG91YmxlSW50UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVBv
d2koYmFzZSwgaW50ZWdlckV4cG9uZW50KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIC8vIElmIHkgaXMgTmFOLCB0aGUgcmVzdWx0IGlzIE5h
Ti4KKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRy
eSwgbmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KTsKKyAgICAgICAgICAgIExWYWx1ZSBl
eHBvbmVudElzTmFOOworICAgICAgICAgICAgaWYgKHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDIo
KSkgJiBTcGVjRG91YmxlTmFOKQorICAgICAgICAgICAgICAgIGV4cG9uZW50SXNOYU4gPSBtX291
dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKGV4cG9uZW50LCBleHBvbmVudCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZXhwb25lbnRJc05hTiA9IG1fb3V0LmJvb2xlYW5G
YWxzZTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChleHBvbmVudElzTmFOLCByYXJlbHkobmFu
RXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1c3VhbGx5KG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZp
bml0eSkpOworCisgICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAraW5maW5p
dHksIHRoZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlzIDEgYW5k
IHkgaXMgLWluZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5hbkV4Y2VwdGlvbkV4cG9uZW50SXNJbmZpbml0eSwgbmFuRXhjZXB0aW9uQmFzZUlz
T25lKTsKKyAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4cG9uZW50ID0gbV9vdXQuZG91Ymxl
QWJzKGV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUV4cG9uZW50SXNJbmZp
bml0eSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlRXhwb25lbnQsIG1fb3V0LmNvbnN0RG91
YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkpOworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5LCByYXJlbHkobmFuRXhj
ZXB0aW9uQmFzZUlzT25lKSwgdXN1YWxseShwb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhuYW5FeGNlcHRpb25CYXNlSXNPbmUsIHBvd0Jsb2NrKTsKKyAgICAgICAgICAg
IExWYWx1ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVBYnMoYmFzZSk7CisgICAgICAgICAg
ICBMVmFsdWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUJh
c2UsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChhYnNv
bHV0ZUJhc2VJc09uZSwgdW5zdXJlKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOKSwgdW5zdXJlKHBv
d0Jsb2NrKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBvd0Jsb2NrLCBuYW5FeGNl
cHRpb25SZXN1bHRJc05hTik7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb3dSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93KGJhc2UsIGV4cG9uZW50KSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQ
TmFOKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBwb3dEb3VibGVJbnRSZXN1bHQs
IHBvd1Jlc3VsdCwgcHVyZU5hbikpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlQXJpdGhSYW5kb20oKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsK
KworICAgICAgICAvLyBJbmxpbmVkIFdlYWtSYW5kb206OmFkdmFuY2UoKS4KKyAgICAgICAgLy8g
dWludDY0X3QgeCA9IG1fbG93OworICAgICAgICB2b2lkKiBsb3dBZGRyZXNzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0Ojp3ZWFrUmFu
ZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpsb3dPZmZzZXQoKTsKKyAgICAgICAgTFZhbHVlIGxv
dyA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZShsb3dBZGRyZXNzKSk7CisgICAgICAgIC8v
IHVpbnQ2NF90IHkgPSBtX2hpZ2g7CisgICAgICAgIHZvaWQqIGhpZ2hBZGRyZXNzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZ2xvYmFsT2JqZWN0KSArIEpTR2xvYmFsT2JqZWN0Ojp3ZWFr
UmFuZG9tT2Zmc2V0KCkgKyBXZWFrUmFuZG9tOjpoaWdoT2Zmc2V0KCk7CisgICAgICAgIExWYWx1
ZSBoaWdoID0gbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKGhpZ2hBZGRyZXNzKSk7CisgICAg
ICAgIC8vIG1fbG93ID0geTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NChoaWdoLCBtX291dC5hYnNv
bHV0ZShsb3dBZGRyZXNzKSk7CisKKyAgICAgICAgLy8geCBePSB4IDw8IDIzOworICAgICAgICBM
VmFsdWUgcGhhc2UxID0gbV9vdXQuYml0WG9yKG1fb3V0LnNobChsb3csIG1fb3V0LmNvbnN0SW50
NjQoMjMpKSwgbG93KTsKKworICAgICAgICAvLyB4IF49IHggPj4gMTc7CisgICAgICAgIExWYWx1
ZSBwaGFzZTIgPSBtX291dC5iaXRYb3IobV9vdXQubFNocihwaGFzZTEsIG1fb3V0LmNvbnN0SW50
NjQoMTcpKSwgcGhhc2UxKTsKKworICAgICAgICAvLyB4IF49IHkgXiAoeSA+PiAyNik7CisgICAg
ICAgIExWYWx1ZSBwaGFzZTMgPSBtX291dC5iaXRYb3IobV9vdXQuYml0WG9yKGhpZ2gsIG1fb3V0
LmxTaHIoaGlnaCwgbV9vdXQuY29uc3RJbnQ2NCgyNikpKSwgcGhhc2UyKTsKKworICAgICAgICAv
LyBtX2hpZ2ggPSB4OworICAgICAgICBtX291dC5zdG9yZTY0KHBoYXNlMywgbV9vdXQuYWJzb2x1
dGUoaGlnaEFkZHJlc3MpKTsKKworICAgICAgICAvLyByZXR1cm4geCArIHk7CisgICAgICAgIExW
YWx1ZSByYW5kb202NCA9IG1fb3V0LmFkZChwaGFzZTMsIGhpZ2gpOworCisgICAgICAgIC8vIEV4
dHJhY3QgcmFuZG9tIDUzYml0LiBbMCwgNTNdIGJpdCBpcyBzYWZlIGludGVnZXIgbnVtYmVyIHJh
bmdlcyBpbiBkb3VibGUgcmVwcmVzZW50YXRpb24uCisgICAgICAgIExWYWx1ZSByYW5kb201MyA9
IG1fb3V0LmJpdEFuZChyYW5kb202NCwgbV9vdXQuY29uc3RJbnQ2NCgoMVVMTCA8PCA1MykgLSAx
KSk7CisKKyAgICAgICAgTFZhbHVlIGRvdWJsZTUzSW50ZWdlciA9IG1fb3V0LmludFRvRG91Ymxl
KHJhbmRvbTUzKTsKKworICAgICAgICAvLyBDb252ZXJ0IGAoNTNiaXQgZG91YmxlIGludGVnZXIg
dmFsdWUpIC8gKDEgPDwgNTMpYCB0byBgKDUzYml0IGRvdWJsZSBpbnRlZ2VyIHZhbHVlKSAqICgx
LjAgLyAoMSA8PCA1MykpYC4KKyAgICAgICAgLy8gSW4gbGF0dGVyIGNhc2UsIGAxLjAgLyAoMSA8
PCA1MylgIHdpbGwgYmVjb21lIGEgZG91YmxlIHZhbHVlIHJlcHJlc2VudGVkIGFzIChtYW50aXNz
YSA9IDAgJiBleHAgPSA5NzAsIGl0IG1lYW5zIDFlLSgyKio1NCkpLgorICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIHNjYWxlID0gMS4wIC8gKDFVTEwgPDwgNTMpOworCisgICAgICAgIC8vIE11
bHRpcGx5aW5nIDFlLSgyKio1NCkgd2l0aCB0aGUgZG91YmxlIGludGVnZXIgZG9lcyBub3QgY2hh
bmdlIGFueXRoaW5nIG9mIHRoZSBtYW50aXNzYSBwYXJ0IG9mIHRoZSBkb3VibGUgaW50ZWdlci4K
KyAgICAgICAgLy8gSXQganVzdCByZWR1Y2VzIHRoZSBleHAgcGFydCBvZiB0aGUgZ2l2ZW4gNTNi
aXQgZG91YmxlIGludGVnZXIuCisgICAgICAgIC8vIChFeGNlcHQgZm9yIDAuMC4gVGhpcyBpcyBz
cGVjaWFsbHkgaGFuZGxlZCBhbmQgaW4gdGhpcyBjYXNlLCBleHAganVzdCBiZWNvbWVzIDAuKQor
ICAgICAgICAvLyBOb3cgd2UgZ2V0IDUzYml0IHByZWNpc2lvbiByYW5kb20gZG91YmxlIHZhbHVl
IGluIFswLCAxKS4KKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmRvdWJsZU11bChkb3Vi
bGU1M0ludGVnZXIsIG1fb3V0LmNvbnN0RG91YmxlKHNjYWxlKSk7CisKKyAgICAgICAgc2V0RG91
YmxlKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhSb3VuZCgpCisgICAg
eworICAgICAgICBMQmFzaWNCbG9jayByZWFsUGFydElzTW9yZVRoYW5IYWxmID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aFJvdW5kIHNob3VsZCByb3VuZCBkb3duIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUm91
bmQgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IG1fb3V0LmRv
dWJsZUNlaWwodmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSZXN1
bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVlKTsKKworICAgICAgICBMVmFsdWUgcmVhbFBh
cnQgPSBtX291dC5kb3VibGVTdWIoaW50ZWdlclZhbHVlLCB2YWx1ZSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQocmVhbFBhcnQsIG1f
b3V0LmNvbnN0RG91YmxlKDAuNSkpLCB1bnN1cmUocmVhbFBhcnRJc01vcmVUaGFuSGFsZiksIHVu
c3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93biA9IG1fb3V0LmRvdWJsZVN1YihpbnRl
Z2VyVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
aW50ZWdlclZhbHVlUm91bmRlZERvd25SZXN1bHQgPSBtX291dC5hbmNob3IoaW50ZWdlclZhbHVl
Um91bmRlZERvd24pOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworCisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50ZWdlclZhbHVlUmVzdWx0
LCBpbnRlZ2VyVmFsdWVSb3VuZGVkRG93blJlc3VsdCk7CisKKyAgICAgICAgaWYgKHByb2R1Y2Vz
SW50ZWdlcihtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKSB7CisgICAgICAgICAgICBMVmFs
dWUgaW50ZWdlclZhbHVlID0gY29udmVydERvdWJsZVRvSW50MzIocmVzdWx0LCBzaG91bGRDaGVj
a05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoUm91bmRpbmdNb2RlKCkpKTsKKyAgICAgICAgICAg
IHNldEludDMyKGludGVnZXJWYWx1ZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgc2V0
RG91YmxlKHJlc3VsdCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQXJpdGhTcXJ0KCkgeyBz
ZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsg
fQorCisgICAgdm9pZCBjb21waWxlQXJpdGhMb2coKSB7IHNldERvdWJsZShtX291dC5kb3VibGVM
b2cobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVBcml0aEZSb3VuZCgpCisgICAgeworICAgICAgICBzZXREb3VibGUobV9vdXQuZnJvdW5kKGxv
d0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVBcml0aE5lZ2F0ZSgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0OworICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJm
bG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0
Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICBlbHNlIGlmICghc2hvdWxkQ2hlY2tOZWdhdGl2ZVpl
cm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyAiMCAtIHgiIGlz
IHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGluIGJvdGggQjMgYW5kIExMVk0uIFRo
aXMgZ2V0cworICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQgdG8gdGhlIHJpZ2h0IHRoaW5nLgor
ICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1f
b3V0LmludDMyWmVybywgdmFsdWUpOworICAgICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
Y2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBjaGVjazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LnRlc3RJc1plcm8z
Mih2YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDdmZmZmZmZmKSkpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNldEludDMyKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKKyAgICAgICAgICAgIGlmICghYWJz
dHJhY3RWYWx1ZShtX25vZGUtPmNoaWxkMSgpKS5jb3VsZEJlVHlwZShTcGVjSW50NTIpKSB7Cisg
ICAgICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93V2hpY2hldmVySW50NTIobV9ub2RlLT5jaGlsZDEoKSwga2luZCk7CisgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9kZS0+YXJpdGhNb2RlKCkpKQorICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1f
b3V0LmlzWmVybzY0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCwg
a2luZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQuc3BlY3VsYXRlU3ViKG1f
b3V0LmludDY0WmVybywgdmFsdWUpOworICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihyZXN1
bHQsIEludDUyT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOworICAgICAg
ICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82
NChyZXN1bHQpKTsKKyAgICAgICAgICAgIHNldEludDUyKHJlc3VsdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNl
OiB7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlTmVnKGxvd0RvdWJsZShtX25v
ZGUtPmNoaWxkMSgpKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0QW5kKCkKKyAgICB7CisgICAgICAgIGlmICht
X25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAgICAgICAgZW1pdEJp
bmFyeUJpdE9wU25pcHBldDxKSVRCaXRBbmRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0QW5k
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAg
ICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRPckdlbmVyYXRvcj4ob3BlcmF0aW9u
VmFsdWVCaXRPcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0
SW50MzIobV9vdXQuYml0T3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUJpdFhvcigp
CisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkp
IHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlCaXRPcFNuaXBwZXQ8SklUQml0WG9yR2VuZXJhdG9y
PihvcGVyYXRpb25WYWx1ZUJpdFhvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgc2V0SW50MzIobV9vdXQuYml0WG9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVCaXRSU2hpZnQoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFVudHlwZWRVc2UpKSB7CisgICAgICAgICAgICBlbWl0UmlnaHRTaGlmdFNuaXBwZXQoSklU
UmlnaHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIHNldEludDMyKG1fb3V0LmFTaHIoCisgICAgICAgICAgICBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCisgICAgeworICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQ8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdExTaGlm
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2V0SW50MzIobV9v
dXQuc2hsKAorICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0
SW50MzIoMzEpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRVUlNoaWZ0KCkK
KyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkg
eworICAgICAgICAgICAgZW1pdFJpZ2h0U2hpZnRTbmlwcGV0KEpJVFJpZ2h0U2hpZnRHZW5lcmF0
b3I6OlVuc2lnbmVkU2hpZnQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHNldEludDMyKG1fb3V0LmxTaHIoCisgICAgICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwKKyAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVVJbnQzMlRvTnVtYmVyKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGlmIChkb2VzT3ZlcmZsb3cobV9ub2Rl
LT5hcml0aE1vZGUoKSkpIHsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRv
RG91YmxlKHZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhh
bih2YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgIHNldEludDMyKHZhbHVlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAg
ICAgRXhpdEtpbmQgZXhpdEtpbmQ7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXND
b25zdGFudCgpKQorICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOworCisgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBDZWxsVXNl
OgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZTogeworICAgICAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBj
aGVja1N0cnVjdHVyZSgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFw
cy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUoY2VsbCksCisgICAgICAgICAgICAg
ICAgZXhpdEtpbmQsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCisgICAgICAgICAgICAgICAgWyZd
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a1N0cnVjdHVyZUlEKHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIENlbGxPck90aGVyVXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVz
ZSBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2Ugbm90IGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tTdHJ1Y3R1cmUgQ2VsbE9yT3RoZXJVc2UgY29udGludWF0
aW9uIikpOworCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgaXND
ZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNlbGxDYXNl
KSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKyAgICAgICAgICAg
IGNoZWNrU3RydWN0dXJlKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMih2YWx1ZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBqc1ZhbHVlVmFsdWUodmFsdWUpLAorICAgICAgICAg
ICAgICAgIGV4aXRLaW5kLCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgICAg
IFsmXSAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NI
RUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNDZWxsIHwgU3Bl
Y090aGVyLCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVDaGVja0NlbGwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAg
ICAgICAgQmFkQ2VsbCwganNWYWx1ZVZhbHVlKGNlbGwpLCBtX25vZGUtPmNoaWxkMSgpLm5vZGUo
KSwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGwsIHdlYWtQb2ludGVyKG1fbm9kZS0+
Y2VsbE9wZXJhbmQoKS0+Y2VsbCgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVD
aGVja0JhZENlbGwoKQorICAgIHsKKyAgICAgICAgdGVybWluYXRlKEJhZENlbGwpOworICAgIH0K
KworICAgIHZvaWQgY29tcGlsZUNoZWNrTm90RW1wdHkoKQorICAgIHsKKyAgICAgICAgc3BlY3Vs
YXRlKFREWkZhaWx1cmUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQobG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUNoZWNr
SWRlbnQoKQorICAgIHsKKyAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fbm9kZS0+
dWlkT3BlcmFuZCgpOworICAgICAgICBpZiAodWlkLT5pc1N5bWJvbCgpKSB7CisgICAgICAgICAg
ICBMVmFsdWUgc3ltYm9sID0gbG93U3ltYm9sKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN5bWJvbCwgbV9oZWFwcy5TeW1i
b2xfcHJpdmF0ZU5hbWUpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50UHRy
KHVpZCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBs
b3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdHJp
bmdJbXBsID0gbV9vdXQubG9hZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlKEJhZElkZW50LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0
Lm5vdEVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCkpKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEV4ZWN1dGFibGUoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzcGVj
dWxhdGVGdW5jdGlvbihtX25vZGUtPmNoaWxkMSgpLCBjZWxsKTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUoKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBMVmFsdWUgcHJvcGVydHkgPSAhIW1fbm9kZS0+Y2hpbGQyKCkgPyBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKSA6IDA7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayB1bmV4cGVjdGVk
U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheWlmeVRvU3RydWN0dXJlIHVu
ZXhwZWN0ZWQgc3RydWN0dXJlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1Y3R1cmUgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMy
KGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZUlELCB3ZWFr
U3RydWN0dXJlSUQobV9ub2RlLT5zdHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgcmFyZWx5KHVu
ZXhwZWN0ZWRTdHJ1Y3R1cmUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh1bmV4cGVjdGVkU3Ry
dWN0dXJlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKHByb3BlcnR5KSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRlKAorICAgICAgICAgICAgICAgICAgICBVbmNvdW50YWJsZSwgbm9WYWx1ZSgpLCAw
LAorICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHJvcGVydHksIG1fb3V0
LmNvbnN0SW50MzIoTUlOX1NQQVJTRV9BUlJBWV9JTkRFWCkpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAg
ICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1
cmVJbnQzMiksIG1fY2FsbEZyYW1lLCBjZWxsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVEb3VibGUpLCBtX2NhbGxGcmFtZSwgY2Vs
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoK
KyAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkVuc3VyZUNvbnRpZ3VvdXMpLCBtX2NhbGxGcmFtZSwgY2VsbCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgICAgICBjYXNlIEFy
cmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgorICAgICAgICAgICAgdm1DYWxsKG1fb3V0LnZvaWRU
eXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQXJyYXlTdG9yYWdlKSwgbV9jYWxs
RnJhbWUsIGNlbGwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgIEJhZEluZGV4aW5nVHlwZSwganNWYWx1ZVZhbHVl
KGNlbGwpLCAwLAorICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmVJRChtX25vZGUtPnN0cnVjdHVyZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlUHV0U3RydWN0dXJl
KCkKKyAgICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNvbXBp
bGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBtX25v
ZGUpOworCisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9k
ZS0+dHJhbnNpdGlvbigpLT5uZXh0OworICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVjdHVy
ZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVU
eXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkp
OworICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBuZXdT
dHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKKworICAgICAgICBMVmFsdWUgY2VsbCA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7IAorICAgICAgICBtX291dC5zdG9yZTMyKAorICAgICAg
ICAgICAgd2Vha1N0cnVjdHVyZUlEKG5ld1N0cnVjdHVyZSksCisgICAgICAgICAgICBjZWxsLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUdldEJ5SWQoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgeworICAgICAgICBjYXNlIENlbGxVc2U6IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
Z2V0QnlJZChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHdlaXJkLCBzaW5jZSB3ZSBkdXBsaWNhdGUgdGhl
IHNsb3cgcGF0aCBib3RoIGhlcmUgYW5kIGluIHRoZQorICAgICAgICAgICAgLy8gY29kZSBnZW5l
cmF0ZWQgYnkgdGhlIElDLiBXZSBzaG91bGQgaW52ZXN0aWdhdGUgbWFraW5nIHRoaXMgbGVzcyBi
YWQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI3ODMwCisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5cGVkIGNlbGwgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJHZXRCeUlkIHVudHlwZWQgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlJZCB1bnR5
cGVkIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNo
aWxkMSgpKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjZWxs
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdldEJ5SWQodmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKKyAgICAgICAgICAgICAg
ICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5SWRHZW5lcmljKSwK
KyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIobV9ncmFwaC5pZGVudGlmaWVycygpW21fbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgY2VsbFJl
c3VsdCwgbm90Q2VsbFJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKCkKKyAgICB7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBTZWUgYWJvdmU7
IENlbGxVc2UgaXMgZWFzaWVyIHNvIHdlIGRvIG9ubHkgdGhhdCBmb3Igbm93LgorICAgICAgICBB
U1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpOworCisgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBhdXRvIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworCisgICAgICAgIEIz
OjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwor
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoYmFzZSk7CisgICAgICAgIHBh
dGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rlcih2YWx1ZSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKKworICAgICAg
ICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIFB1dEJ5SWRGbHVzaCwgd2UgbWlnaHQgd2FudCB0byBs
YXRlLWNsb2JiZXIgdm9sYXRpbGUgcmVnaXN0ZXJzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4CisKKyAgICAgICAgUmVmUHRyPFBhdGNo
cG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVw
YXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgU3RhdGUq
IHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIEVDTUFNb2RlIGVjbWFNb2RlID0gbV9ncmFw
aC5leGVjdXRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmVjbWFNb2RlKCk7CisgICAg
ICAgIAorICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxv
d1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5p
cXVlQ2FsbFNpdGVJbmRleChub2RlLT5vcmlnaW4uc2VtYW50aWMpOworCisgICAgICAgICAgICAg
ICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQorICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1
bXBzKGppdCk7CisKKyAgICAgICAgICAgICAgICAvLyBKUyBzZXR0ZXIgY2FsbCBJQ3MgZ2VuZXJh
dGVkIGJ5IHRoZSBQdXRCeUlkIElDIHdpbGwgbmVlZCB0aGlzLgorICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxs
U2l0ZUluZGV4KTsKKworICAgICAgICAgICAgICAgIGF1dG8gZ2VuZXJhdG9yID0gQm94PEpJVFB1
dEJ5SWRHZW5lcmF0b3I+OjpjcmVhdGUoCisgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxv
Y2soKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLCBjYWxsU2l0ZUluZGV4LAorICAgICAgICAgICAg
ICAgICAgICBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgSlNWYWx1ZVJlZ3MocGFyYW1z
WzBdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdw
cigpKSwgR1BSSW5mbzo6cGF0Y2hwb2ludFNjcmF0Y2hSZWdpc3RlciwgZWNtYU1vZGUsCisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gUHV0QnlJZERpcmVjdCA/IERpcmVjdCA6IE5v
dERpcmVjdCk7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdlbmVyYXRlRmFzdFBhdGgo
aml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAg
ICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVtcCgpLmxpbmsoJmpp
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRo
QmVnaW4gPSBqaXQubGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
bnMuZ2V0KCksIGdlbmVyYXRvci0+c2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BSUmVnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihn
ZW5lcmF0b3ItPnN0dWJJbmZvKCkpLCBwYXJhbXNbMV0uZ3ByKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
dWlkKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8o
ZG9uZSwgJmppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0
U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVnaW4sIHNsb3dQYXRoQ2FsbCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLT5maW5hbGl6ZShsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlR2V0QnV0dGVyZmx5KCkKKyAgICB7Cisg
ICAgICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHlSZWFk
T25seSgpCisgICAgeworICAgICAgICBzZXRTdG9yYWdlKGxvYWRCdXR0ZXJmbHlSZWFkT25seShs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoKQorICAgIHsKKyAgICAgICAgc2V0U3RvcmFnZShtX291
dC5jb25zdEludFB0cihtX25vZGUtPnN0b3JhZ2VQb2ludGVyKCkpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSgpCisgICAgeworICAgICAg
ICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykgewor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UgU3RyaW5nIHNsb3cgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
SW5kZXhlZFByb3BlcnR5U3RvcmFnZSBTdHJpbmcgY29udGludWF0aW9uIikpOworCisgICAgICAg
ICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBz
LkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdE51bGwoZmFzdFJlc3Vs
dFZhbHVlKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVJvcGUp
LCBtX2NhbGxGcmFtZSwgY2VsbCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
ZXRTdG9yYWdlKG1fb3V0LmxvYWRQdHIobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCksIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldFN0b3JhZ2UobG9hZFZlY3Rv
cldpdGhCYXJyaWVyKGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2hlY2tB
cnJheSgpCisgICAgeworICAgICAgICBFZGdlIGVkZ2UgPSBtX25vZGUtPmNoaWxkMSgpOworICAg
ICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
bV9ub2RlLT5hcnJheU1vZGUoKS5hbHJlYWR5Q2hlY2tlZChtX2dyYXBoLCBtX25vZGUsIGFic3Ry
YWN0VmFsdWUoZWRnZSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
c3BlY3VsYXRlKAorICAgICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2Vs
bCksIDAsCisgICAgICAgICAgICBtX291dC5sb2dpY2FsTm90KGlzQXJyYXlUeXBlKGNlbGwsIG1f
bm9kZS0+YXJyYXlNb2RlKCkpKSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0VHlwZWRB
cnJheUJ5dGVPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2VQdHIgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOyAgICAKKworICAgICAgICBMQmFzaWNCbG9jayBzaW1wbGVDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWxl
c3MgdHlwZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdhc3RlZnVsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgd2FzdGVmdWwgdHlw
ZWQgYXJyYXkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQgY29udGludWF0aW9uIikpOwor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBtX291dC5sb2FkMzIoYmFzZVB0ciwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgbV9vdXQubm90RXF1YWwobW9kZSwgbV9vdXQuY29uc3RJbnQzMihXYXN0ZWZ1bFR5
cGVkQXJyYXkpKSwKKyAgICAgICAgICAgIHVuc3VyZShzaW1wbGVDYXNlKSwgdW5zdXJlKHdhc3Rl
ZnVsQ2FzZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oc2ltcGxlQ2FzZSwgd2FzdGVmdWxDYXNlKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
aW1wbGVPdXQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworCisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyh3YXN0
ZWZ1bENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHZlY3RvclB0ciA9IGxv
YWRWZWN0b3JSZWFkT25seShiYXNlUHRyKTsKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVB0ciA9
IGxvYWRCdXR0ZXJmbHlSZWFkT25seShiYXNlUHRyKTsKKyAgICAgICAgTFZhbHVlIGFycmF5QnVm
ZmVyUHRyID0gbV9vdXQubG9hZFB0cihidXR0ZXJmbHlQdHIsIG1faGVhcHMuQnV0dGVyZmx5X2Fy
cmF5QnVmZmVyKTsKKyAgICAgICAgTFZhbHVlIGRhdGFQdHIgPSBtX291dC5sb2FkUHRyKGFycmF5
QnVmZmVyUHRyLCBtX2hlYXBzLkFycmF5QnVmZmVyX2RhdGEpOworCisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHdhc3RlZnVsT3V0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LnN1Yih2ZWN0b3JQdHIsIGRh
dGFQdHIpKTsKKworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworCisgICAgICAgIHNldEludDMy
KG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHNpbXBsZU91dCwgd2Fz
dGVmdWxPdXQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3Ro
KCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
KyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nLCBtX2hlYXBzLkpT
U3RyaW5nX2xlbmd0aCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CisgICAgICAgICAg
ICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVl
KCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5sb2FkUHRy
KGFyZ3VtZW50cywgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOworICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogewor
ICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMiht
X291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292
ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVn
YXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzU29tZVR5cGVkQXJy
YXlWaWV3KCkpIHsKKyAgICAgICAgICAgICAgICBzZXRJbnQzMigKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9o
ZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNoZWNrSW5Cb3VuZHMoKQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIG5vVmFsdWUo
KSwgMCwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxv
d1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIElu
ZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6SW50MzIgPworICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVy
dGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAg
ICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFw
LCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAgICAgIExW
YWx1ZSBpc0hvbGUgPSBtX291dC5pc1plcm82NChyZXN1bHQpOworICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmFycmF5TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG1fbm9kZSwg
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICAgICAgICAg
ICAgICBpc0hvbGUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLCBpc0hvbGUpOworICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2lj
QmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250
aWd1b3VzIGZhc3QgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBpbnQvY29udGlndW91cyBzbG93IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0
LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpLAorICAg
ICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoZmFzdENhc2UpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhmYXN0Q2FzZSwgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZh
bHVlID0gbV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2Rl
LT5jaGlsZDIoKSkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzY0KGZhc3RSZXN1bHRWYWx1ZSksIHJhcmVseShz
bG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAg
ICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbEFy
cmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7CisgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5j
aGlsZDMoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAm
IGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZSgKKyAgICAgICAgICAg
ICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigp
KSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5
TW9kZSgpLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3Vs
dCwgcmVzdWx0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNldERvdWJs
ZShyZXN1bHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgaW4gYm91bmRzIikpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgYm94UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlW
YWwgZG91YmxlIGJveGluZyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgc2xvdyBjYXNlIikpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBkb3VibGUgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAor
ICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShpbkJvdW5kcykpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBib3hQ
YXRoKTsKKyAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IG1fb3V0LmxvYWREb3VibGUo
CisgICAgICAgICAgICAgICAgYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUt
PmNoaWxkMigpKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
bV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUp
LAorICAgICAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoYm94UGF0aCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhib3hQYXRoLCBzbG93Q2Fz
ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGJveERvdWJsZShkb3VibGVWYWx1ZSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxBcnJheUludCksIG1fY2FsbEZyYW1lLCBiYXNl
LCBpbmRleCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgICAgICBzcGVjdWxhdGUoT3V0
T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQu
aW50MzJaZXJvKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoVmFs
dWVVbmRlZmluZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogeworICAgICAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBu
b1ZhbHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChtX291dC5s
b2FkUHRyKGJhc2UsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcykpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1Zh
bHVlKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAorICAg
ICAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMy
Tm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfbGVuZ3RoKSkpOworCisg
ICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56
ZXJvRXh0UHRyKGluZGV4KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChh
ZGRyZXNzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKKyAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1
ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5v
bk5lZ2F0aXZlKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RvdGFsTGVuZ3RoKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgdGFibGUgPSBtX291dC5sb2FkUHRyKGJh
c2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3RhYmxlKTsKKyAgICAgICAgICAgIExWYWx1ZSBu
YW1lZExlbmd0aCA9IG1fb3V0LmxvYWQzMih0YWJsZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNU
YWJsZV9sZW5ndGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBuYW1l
ZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFNjb3BlZEFyZ3VtZW50cyBu
YW1lZCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgb3ZlcmZsb3dDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTY29wZWRBcmd1bWVudHMgb3ZlcmZsb3cgY2Fz
ZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIGNvbnRpbnVhdGlvbiIpKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbmFtZWRMZW5ndGgpLCB1bnN1cmUob3ZlcmZsb3dDYXNl
KSwgdW5zdXJlKG5hbWVkQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5hbWVkQ2FzZSwgb3ZlcmZsb3dDYXNlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHNjb3BlID0gbV9vdXQubG9hZFB0cihi
YXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19zY29wZSk7CisgICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbV9vdXQubG9hZFB0cih0YWJsZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNU
YWJsZV9hcmd1bWVudHMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBUeXBlZFBvaW50ZXIg
YWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLnNjb3Bl
ZEFyZ3VtZW50c1RhYmxlQXJndW1lbnRzLCBhcmd1bWVudHMsIG1fb3V0Lnplcm9FeHRQdHIoaW5k
ZXgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzY29wZU9mZnNldCA9IG1fb3V0LmxvYWQzMihhZGRy
ZXNzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAg
ICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICBtX291dC5lcXVhbChzY29wZU9mZnNldCwgbV9vdXQuY29uc3RJbnQzMihTY29wZU9mZnNldDo6
aW52YWxpZE9mZnNldCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWRkcmVzcyA9IG1f
b3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJvbm1lbnRSZWNv
cmRfdmFyaWFibGVzLCBzY29wZSwgbV9vdXQuemVyb0V4dFB0cihzY29wZU9mZnNldCkpOworICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
bG9hZDY0KGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZsb3dDYXNlLCBj
b250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRyZXNzID0gbV9vdXQu
YmFzZUluZGV4KAorICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJm
bG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1fb3V0
LnN1YihpbmRleCwgbmFtZWRMZW5ndGgpKSk7CisgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dW
YWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShFeG90
aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KG92ZXJmbG93
VmFsdWUpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG92ZXJmbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG92ZXJmbG93VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0
LmludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0
LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2NhbGxGcmFtZSwK
KyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKKyAgICAgICAgICAgIGNv
bXBpbGVTdHJpbmdDaGFyQXQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlw
ZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaXNUeXBlZFZpZXcodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IFR5cGVkUG9pbnRlcigKKyAg
ICAgICAgICAgICAgICAgICAgbV9oZWFwcy50eXBlZEFycmF5UHJvcGVydGllcywKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC56ZXJvRXh0UHRyKGluZGV4KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIExWYWx1ZSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWxl
bWVudFNpemUodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNTaWduZWQodHlwZSkgPyBtX291dC5sb2FkOFNpZ25F
eHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkOFplcm9FeHQzMihwb2ludGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpc1NpZ25lZCh0eXBlKSA/IG1fb3V0LmxvYWQx
NlNpZ25FeHQzMihwb2ludGVyKSA6ICBtX291dC5sb2FkMTZaZXJvRXh0MzIocG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZDMyKHBvaW50ZXIp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGVsZW1lbnQgc2l6ZSIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0
IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnQzMihy
ZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+c2hvdWxkU3BlY3VsYXRl
SW50MzIoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFu
KHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRJ
bnQzMihyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVNYWNoaW5lSW50KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0Lnplcm9FeHQocmVzdWx0LCBtX291dC5pbnQ2
NCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQudW5zaWduZWRUb0RvdWJsZShyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEFT
U0VSVChpc0Zsb2F0KHR5cGUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBM
VmFsdWUgcmVzdWx0OworICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAg
ICAgICAgIGNhc2UgVHlwZUZsb2F0MzI6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0LmZsb2F0VG9Eb3VibGUobV9vdXQubG9hZEZsb2F0KHBvaW50ZXIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZERvdWJsZShwb2ludGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB0eXBlZCBhcnJheSB0
eXBlIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gfQor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQorICAgIHsK
KyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPmNoaWxk
MSgpLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgbGltaXQ7CisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYgIWlubGlu
ZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpCisgICAgICAgICAgICBsaW1pdCA9IG1fb3V0LmNvbnN0
SW50MzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsK
KyAgICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50Q291bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0
ZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKKyAgICAgICAgICAg
IGxpbWl0ID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKGFyZ3VtZW50Q291bnRS
ZWdpc3RlcikpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHNwZWN1bGF0ZShFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmFib3ZlT3JF
cXVhbChpbmRleCwgbGltaXQpKTsKKyAgICAgICAgCisgICAgICAgIFR5cGVkUG9pbnRlciBiYXNl
OworICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoaW5saW5l
Q2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGV4aXRlZCBkdWUgdG8gdGhlIGJvdW5kcyBjaGVjaywgYWJv
dmUuIEp1c3QgdGVsbCB0aGUKKyAgICAgICAgICAgICAgICAvLyBjb21waWxlciB0aGF0IGFueXRo
aW5nIGRvbWluYXRlZCBieSB0aGlzIGluc3RydWN0aW9uIGlzIG5vdCByZWFjaGFibGUsIHNvCisg
ICAgICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCB3YXN0ZSB0aW1lIGdlbmVyYXRpbmcgc3Vj
aCBjb2RlLiBUaGlzIHdpbGwgYWxzbyBwbGFudCBzb21lCisgICAgICAgICAgICAgICAgLy8ga2lu
ZCBvZiBjcmFzaGluZyBpbnN0cnVjdGlvbiBzbyB0aGF0IGlmIGJ5IHNvbWUgZmx1a2UgdGhlIGJv
dW5kcyBjaGVjayBkaWRuJ3QKKyAgICAgICAgICAgICAgICAvLyB3b3JrLCB3ZSdsbCBjcmFzaCBp
biBhbiBlYXN5LXRvLXNlZSB3YXkuCisgICAgICAgICAgICAgICAgZGlkQWxyZWFkeVRlcm1pbmF0
ZSgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJhc2UgPSBhZGRyZXNzRm9yKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzWzFdLnZpcnR1YWxS
ZWdpc3RlcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBiYXNlID0gYWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxKSk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgIGJhc2UudmFsdWUoKSwg
bV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwgU2NhbGVFaWdodCk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KFR5cGVkUG9pbnRlcihtX2hlYXBzLnZhcmlhYmxlcy5h
dEFueUluZGV4KCksIHBvaW50ZXIpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVB1
dEJ5VmFsKCkKKyAgICB7CisgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApOworICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKTsKKyAgICAgICAgRWRnZSBjaGlsZDMgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMik7CisgICAgICAgIEVkZ2UgY2hpbGQ0ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDMpOworICAgICAgICBFZGdlIGNoaWxkNSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCA0KTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICAgICAgVl9KSVRP
cGVyYXRpb25fRUpKSiBvcGVyYXRpb247CisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09
IFB1dEJ5VmFsRGlyZWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNTdHJpY3RN
b2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3Q7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbERp
cmVjdE5vblN0cmljdDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaXNTdHJpY3RNb2RlRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxTdHJpY3Q7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRp
b25QdXRCeVZhbE5vblN0cmljdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUoY2hpbGQxKSwgbG93SlNWYWx1ZShjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dDZWxsKGNoaWxkMSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGNo
aWxkMik7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShjaGlsZDQpOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAg
ICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGNvbnRpbnVhdGlv
biIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhtX291dC5tX2Jsb2NrLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
KyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxkMywgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKQorICAgICAgICAg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBjaGlsZDMsIFNw
ZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6Oklu
dDMyID8KKyAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVz
IDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsCisgICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLCBwcm92ZW5WYWx1ZShjaGlsZDIp
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09
IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgZWxlbWVudFBvaW50ZXIpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29udGlndW91c1B1
dEJ5VmFsT3V0T2ZCb3VuZHMoCisgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5pc1N0
cmljdE1vZGUoKQorICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25k
QXJyYXlCb3VuZHNTdHJpY3QKKyAgICAgICAgICAgICAgICAgICAgOiBvcGVyYXRpb25QdXRCeVZh
bEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAorICAgICAgICAgICAgICAgICAgICBiYXNlLCBz
dG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZh
bHVlID0gbG93RG91YmxlKGNoaWxkMyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVl
KSwgY2hpbGQzLCBTcGVjRG91YmxlUmVhbCwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgZWxlbWVudFBvaW50ZXIgPSBtX291dC5iYXNl
SW5kZXgoCisgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAorICAgICAgICAgICAgICAgICAg
ICBwcm92ZW5WYWx1ZShjaGlsZDIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAobV9ub2RlLT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGVsZW1lbnRQb2ludGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRzKAorICAgICAgICAgICAg
ICAgICAgICBjb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkKKyAgICAgICAgICAgICAgICAgICAg
PyBvcGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0CisgICAgICAg
ICAgICAgICAgICAgIDogb3BlcmF0aW9uUHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05v
blN0cmljdCwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgc3RvcmFnZSwgaW5kZXgsIHZhbHVl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlRG91YmxlKHZhbHVlLCBlbGVtZW50UG9pbnRlcik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkg
dHlwZSIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIG91dGVyTGFz
dE5leHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpc1R5cGVkVmlldyh0eXBlKSkgeworICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBw
b2ludGVyID0gVHlwZWRQb2ludGVyKAorICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLnR5cGVk
QXJyYXlQcm9wZXJ0aWVzLAorICAgICAgICAgICAgICAgICAgICBtX291dC5hZGQoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c2hsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1f
b3V0LmludFB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIE91dHB1dDo6U3RvcmVUeXBlIHN0b3JlVHlwZTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgdmFsdWVUb1N0b3JlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChp
c0ludCh0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICBMVmFsdWUgaW50VmFsdWU7CisgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaCAoY2hpbGQzLnVzZUtpbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEludDUyUmVwVXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMy
VXNlOiB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQzLnVzZUtpbmQoKSA9PSBJ
bnQzMlVzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IGxvd0ludDMy
KGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50VmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMihsb3dTdHJpY3RJbnQ1Mihj
aGlsZDMpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBhdExlYXN0WmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
UHV0QnlWYWwgaW50IGNsYW1wIGF0TGVhc3RaZXJvIikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
UHV0QnlWYWwgaW50IGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDI+IGludFZhbHVlczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMu
YXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0Lmxlc3NUaGFuKGludFZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGF0TGVhc3Ra
ZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhhdExlYXN0WmVy
bywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5z
ZWxlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmdyZWF0ZXJUaGFu
KGludFZhbHVlLCBtX291dC5jb25zdEludDMyKDI1NSkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludDMyKDI1NSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludFZhbHVlKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaSht
X291dC5pbnQzMiwgaW50VmFsdWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IGxvd0RvdWJs
ZShjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGF0TGVhc3RaZXJv
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBkb3VibGUgY2xhbXAgYXRMZWFzdFpl
cm8iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgd2l0aGluUmFu
Z2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCB3aXRoaW5S
YW5nZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCBjb250
aW51YXRpb24iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAzPiBpbnRWYWx1ZXM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobV9v
dXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbk9y
VW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBtX291dC5kb3VibGVaZXJvKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShhdExlYXN0WmVy
bykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oYXRMZWFzdFplcm8s
IHdpdGhpblJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBw
ZW5kKG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDI1NSkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERvdWJs
ZSgyNTUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZSh3aXRoaW5SYW5nZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdl
LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5h
cHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnRWYWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgaW50VmFsdWVzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludFZhbHVlID0gZG91YmxlVG9JbnQzMihkb3VibGVWYWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RvcmUgPSBpbnRW
YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICBzdG9y
ZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzJBczg7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgICAgICAgICAg
c3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZTMyQXMxNjsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlMzI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXplIik7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgLyogIWlzSW50KHR5
cGUpICovIHsKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNo
aWxkMyk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFR5cGVGbG9hdDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVU
b1N0b3JlID0gbV9vdXQuZG91YmxlVG9GbG9hdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlRmxvYXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxvYXQ2NDoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
ICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURvdWJsZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB0eXBlZCBhcnJh
eSB0eXBlIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpIHx8IG1fbm9kZS0+b3AoKSA9PSBQdXRCeVZhbEFsaWFzKQorICAgICAgICAgICAg
ICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUsIHBvaW50ZXIsIHN0b3JlVHlwZSk7Cisg
ICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
SW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHR5cGVkIGFycmF5IGlu
IGJvdW5kcyBjYXNlIikpOworICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHR5cGVkIGFycmF5IGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChp
bmRleCwgbG93SW50MzIoY2hpbGQ1KSksCisgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUo
Y29udGludWF0aW9uKSwgdW5zdXJlKGlzSW5Cb3VuZHMpKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNJbkJvdW5kcywgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmUodmFsdWVUb1N0b3JlLCBwb2ludGVyLCBzdG9yZVR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeUlkKCkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgTFZhbHVlIGFjY2Vzc29yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgYXV0byB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVt
YmVyKCldOworICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC52b2lkVHlwZSwKKyAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0gUHV0R2V0dGVyQnlJZCA/
IG9wZXJhdGlvblB1dEdldHRlckJ5SWQgOiBvcGVyYXRpb25QdXRTZXR0ZXJCeUlkKSwKKyAgICAg
ICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25zdEludFB0cih1aWQpLCBtX291dC5j
b25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBhY2Nlc3Nvcik7CisgICAg
fQorCisgICAgdm9pZCBjb21waWxlUHV0R2V0dGVyU2V0dGVyQnlJZCgpCisgICAgeworICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSBnZXR0ZXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUg
c2V0dGVyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgYXV0byB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOworICAg
ICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciksCisgICAgICAgICAgICBtX2NhbGxGcmFtZSwgYmFz
ZSwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSwgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPmFjY2Vz
c29yQXR0cmlidXRlcygpKSwgZ2V0dGVyLCBzZXR0ZXIpOworCisgICAgfQorCisgICAgdm9pZCBj
b21waWxlUHV0QWNjZXNzb3JCeVZhbCgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdWJzY3JpcHQgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgYWNjZXNzb3IgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICB2bUNhbGwoCisgICAgICAgICAgICBtX291
dC52b2lkVHlwZSwKKyAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0g
UHV0R2V0dGVyQnlWYWwgPyBvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCA6IG9wZXJhdGlvblB1dFNl
dHRlckJ5VmFsKSwKKyAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBzdWJzY3JpcHQsIG1f
b3V0LmNvbnN0SW50MzIobV9ub2RlLT5hY2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQXJyYXlQdXNoKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWU7CisgICAgICAgICAg
ICBPdXRwdXQ6OlN0b3JlVHlwZSBzdG9yZVR5cGU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpJbnQzMikgeworICAgICAgICAgICAgICAgICAgICBGVExfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1f
bm9kZS0+Y2hpbGQyKCksIFNwZWNJbnQzMiwgaXNOb3RJbnQzMih2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6OlN0b3JlNjQ7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhbHVlID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNE
b3VibGVSZWFsLAorICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5v
cmRlcmVkKHZhbHVlLCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1
dDo6U3RvcmVEb3VibGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmZvckFycmF5VHlwZShtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSk7CisKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2TGVuZ3RoID0g
bV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcnJheVB1c2ggZmFzdCBwYXRoIikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5UHVzaCBzbG93IHBh
dGgiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFycmF5UHVzaCBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1
YWwoCisgICAgICAgICAgICAgICAgICAgIHByZXZMZW5ndGgsIG1fb3V0LmxvYWQzMihzdG9yYWdl
LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICB1bnN1
cmUoc2xvd1BhdGgpLCB1bnN1cmUoZmFzdFBhdGgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYXN0UGF0aCwgc2xvd1Bh
dGgpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUoCisgICAgICAgICAgICAgICAgdmFsdWUsIG1f
b3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKHByZXZMZW5ndGgp
KSwgc3RvcmVUeXBlKTsKKyAgICAgICAgICAgIExWYWx1ZSBuZXdMZW5ndGggPSBtX291dC5hZGQo
cHJldkxlbmd0aCwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihu
ZXdMZW5ndGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5h
bmNob3IoYm94SW50MzIobmV3TGVuZ3RoKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIG9wZXJhdGlvbjsKKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKQor
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJh
eVB1c2gpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVB1c2hEb3VibGUpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2
bUNhbGwobV9vdXQuaW50NjQsIG9wZXJhdGlvbiwgbV9jYWxsRnJhbWUsIHZhbHVlLCBiYXNlKSk7
CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVBcnJheVBvcCgpCisgICAgeworICAgICAgICBMVmFsdWUg
YmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdl
ID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVh
cHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFycmF5UG9wIGZhc3QgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcnJheVBvcCBzbG93IGNhc2UiKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFycmF5UG9wIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlf
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzMy
KHByZXZMZW5ndGgpLCByYXJlbHkoY29udGludWF0aW9uKSwgdXN1YWxseShmYXN0Q2FzZSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGZhc3RDYXNlLCBzbG93Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgbmV3TGVuZ3Ro
ID0gbV9vdXQuc3ViKHByZXZMZW5ndGgsIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIG1f
b3V0LnN0b3JlMzIobmV3TGVuZ3RoLCBzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNM
ZW5ndGgpOworICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgPSBtX291dC5iYXNlSW5k
ZXgoaGVhcCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihuZXdMZW5ndGgpKTsKKyAgICAgICAg
ICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6RG91YmxlKSB7Cisg
ICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmxvYWQ2NChwb2ludGVyKTsKKyAg
ICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KG1fb3V0LmludDY0WmVybywgcG9pbnRlcik7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHJlc3VsdCkpOworICAg
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90
WmVybzY0KHJlc3VsdCksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dDYXNlKSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5sb2FkRG91YmxlKHBvaW50ZXIpOworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
bV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLCBwb2ludGVyKTsK
KyAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoYm94RG91YmxlKHJl
c3VsdCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUVxdWFsKHJlc3VsdCwgcmVzdWx0KSwKKyAgICAgICAgICAgICAgICAg
ICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1D
YWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uQXJyYXlQb3BBbmRSZWNvdmVyTGVuZ3RoKSwgbV9jYWxsRnJhbWUsIGJhc2UpKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVBY3Rp
dmF0aW9uKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzY29wZSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJh
bmQ8U3ltYm9sVGFibGUqPigpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpOworICAgICAgICBKU1ZhbHVlIGluaXRpYWxpemF0aW9uVmFsdWUgPSBtX25vZGUt
PmluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCk7CisgICAgICAgIEFTU0VSVChpbml0
aWFsaXphdGlvblZhbHVlLmlzVW5kZWZpbmVkKCkgfHwgaW5pdGlhbGl6YXRpb25WYWx1ZSA9PSBq
c1REWlZhbHVlKCkpOworICAgICAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3Rp
bGxWYWxpZCgpKSB7CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IHZtQ2FsbCgKKyAg
ICAgICAgICAgICAgICBtX291dC5pbnQ2NCwKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9p
bnRlcihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIHNjb3BlLCB3ZWFrUG9pbnRlcih0YWJs
ZSksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUp
KSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlQWN0aXZhdGlvbiBzbG93IHBhdGgiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Q3JlYXRlQWN0aXZhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZmFzdE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpT
TGV4aWNhbEVudmlyb25tZW50PigKKyAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50Ojph
bGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1Bh
dGgpOworICAgICAgICAKKyAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBtZW1vcnkgYmFycmllcnMg
c2luY2Ugd2UganVzdCBmYXN0LWNyZWF0ZWQgdGhlIGFjdGl2YXRpb24sIHNvIHRoZQorICAgICAg
ICAvLyBhY3RpdmF0aW9uIG11c3QgYmUgeW91bmcuCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHNj
b3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4dCk7CisgICAgICAgIG1fb3V0LnN0
b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1N5bWJvbFRh
YmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB0YWJsZS0+c2NvcGVTaXplKCk7ICsraSkgeworICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCgKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29k
ZShpbml0aWFsaXphdGlvblZhbHVlKSksCisgICAgICAgICAgICAgICAgZmFzdE9iamVjdCwgbV9o
ZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFz
dE9iamVjdCk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICBM
VmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3Qg
VmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHRhYmxlKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg
c2NvcGUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX25vZGUtPm9wKCkgPT0gTmV3RnVuY3Rpb24gfHwgbV9ub2RlLT5v
cCgpID09IE5ld0Fycm93RnVuY3Rpb24gfHwgbV9ub2RlLT5vcCgpID09IE5ld0dlbmVyYXRvckZ1
bmN0aW9uKTsKKyAgICAgICAgYm9vbCBpc0dlbmVyYXRvckZ1bmN0aW9uID0gbV9ub2RlLT5vcCgp
ID09IE5ld0dlbmVyYXRvckZ1bmN0aW9uOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHNjb3Bl
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVj
dXRhYmxlKj4oKTsKKyAgICAgICAgaWYgKGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCkt
PmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9CisgICAg
ICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlvbiA/IHZtQ2FsbChtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUs
IHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSkgOgorICAgICAgICAgICAgICAgIHZtQ2Fs
bChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uKSwgbV9j
YWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSk7CisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKGNhbGxSZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgICAgICBpc0dl
bmVyYXRvckZ1bmN0aW9uID8gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5nZW5lcmF0b3JGdW5jdGlvblN0cnVjdHVyZSgpIDoKKyAgICAgICAgICAgIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+ZnVuY3Rpb25T
dHJ1Y3R1cmUoKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3RnVuY3Rp
b24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPQorICAgICAgICAgICAgaXNHZW5lcmF0b3JGdW5jdGlv
biA/IGFsbG9jYXRlT2JqZWN0PEpTR2VuZXJhdG9yRnVuY3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQu
aW50UHRyWmVybywgc2xvd1BhdGgpIDoKKyAgICAgICAgICAgIGFsbG9jYXRlT2JqZWN0PEpTRnVu
Y3Rpb24+KHN0cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOworICAgICAgICAK
KyAgICAgICAgCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgbWVtb3J5IGJhcnJpZXJzIHNpbmNl
IHdlIGp1c3QgZmFzdC1jcmVhdGVkIHRoZSBmdW5jdGlvbiwgc28gaXQKKyAgICAgICAgLy8gbXVz
dCBiZSB5b3VuZy4KKyAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1f
aGVhcHMuSlNGdW5jdGlvbl9zY29wZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKHdlYWtQb2lu
dGVyKGV4ZWN1dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRnVuY3Rpb25fZXhlY3V0YWJs
ZSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIGZhc3RPYmplY3Qs
IG1faGVhcHMuSlNGdW5jdGlvbl9yYXJlRGF0YSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKworICAgICAgICBWZWN0b3I8TFZhbHVlPiBzbG93
UGF0aEFyZ3VtZW50czsKKyAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMuYXBwZW5kKHNjb3BlKTsK
KyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdG9yRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb25X
aXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhl
Y3V0YWJsZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY3Jl
YXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwKKyAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BS
KCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVj
dXRhYmxlKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxS
ZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNyZWF0ZURpcmVjdEFyZ3VtZW50cygpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogQSBtb3JlIGVmZmVjdGl2ZSB3YXkgb2YgZGVhbGluZyB3
aXRoIHRoZSBhcmd1bWVudCBjb3VudCBhbmQgY2FsbGVlIGlzIHRvIGhhdmUKKyAgICAgICAgLy8g
dGhlbSBiZSBleHBsaWNpdCBhcmd1bWVudHMgdG8gdGhpcyBub2RlLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyMjA3CisgICAgICAgIAorICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9CisgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVy
ZSgpOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbWluQ2FwYWNpdHkgPSBtX2dyYXBoLmJh
c2VsaW5lQ29kZUJsb2NrRm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+bnVtUGFyYW1ldGVy
cygpIC0gMTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgc2xvdyBwYXRoIikpOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNy
ZWF0ZURpcmVjdEFyZ3VtZW50cyBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0
aCk7CisgICAgICAgIAorICAgICAgICBBcmd1bWVudHNMZW5ndGggbGVuZ3RoID0gZ2V0QXJndW1l
bnRzTGVuZ3RoKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgZmFzdE9iamVjdDsKKyAgICAg
ICAgaWYgKGxlbmd0aC5pc0tub3duKSB7CisgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2Nh
dGVPYmplY3Q8RGlyZWN0QXJndW1lbnRzPigKKyAgICAgICAgICAgICAgICBEaXJlY3RBcmd1bWVu
dHM6OmFsbG9jYXRpb25TaXplKHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpKSwg
c3RydWN0dXJlLAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzaXplID0gbV9vdXQuYWRkKAor
ICAgICAgICAgICAgICAgIG1fb3V0LnNobChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
MykpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSA9IG1fb3V0
LnNlbGVjdCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLnZhbHVl
LCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSksCisgICAgICAgICAgICAgICAgc2l6ZSwg
bV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OmFsbG9jYXRpb25TaXplKG1pbkNhcGFj
aXR5KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmYXN0T2JqZWN0ID0gYWxsb2NhdGVW
YXJpYWJsZVNpemVkT2JqZWN0PERpcmVjdEFyZ3VtZW50cz4oCisgICAgICAgICAgICAgICAgc2l6
ZSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoLnZhbHVlLCBmYXN0T2JqZWN0LCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpOworICAgICAgICBtX291dC5zdG9yZTMyKG1f
b3V0LmNvbnN0SW50MzIobWluQ2FwYWNpdHkpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkRpcmVjdEFy
Z3VtZW50c19taW5DYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0
clplcm8sIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX292ZXJyaWRlcyk7Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KGZhc3RPYmplY3QpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMs
IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobWluQ2FwYWNp
dHkpKTsKKyAgICAgICAgICAgIH0sIGxlbmd0aC52YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgbV9vdXQu
c3RvcmVQdHIoZ2V0Q3VycmVudENhbGxlZSgpLCByZXN1bHQsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX2NhbGxlZSk7CisgICAgICAgIAorICAgICAgICBpZiAobGVuZ3RoLmlzS25vd24pIHsKKyAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFydCA9IEFzc2VtYmx5SGVscGVyczo6YXJndW1l
bnRzU3RhcnQobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0ZDo6bWF4KGxlbmd0aC5rbm93biwgbWluQ2FwYWNpdHkpOyArK2kp
IHsKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkNjQoYWRkcmVzc0ZvcihzdGFydCArIGkpKSwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW2ldKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExWYWx1ZSBzdGFja0Jhc2UgPSBnZXRB
cmd1bWVudHNTdGFydCgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBs
b29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBi
b2R5IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgZW5kID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDcmVhdGVEaXJlY3RBcmd1bWVudHMgbG9vcCBlbmQiKSk7CisKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIG9yaWdpbmFsTGVuZ3RoOworICAgICAgICAgICAgaWYgKG1pbkNhcGFjaXR5
KSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIGNhcGFjaXR5ID0gbV9vdXQuc2VsZWN0KAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobGVuZ3RoLnZhbHVlLCBtX291dC5j
b25zdEludDMyKG1pbkNhcGFjaXR5KSksCisgICAgICAgICAgICAgICAgICAgIGxlbmd0aC52YWx1
ZSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihtaW5DYXBhY2l0eSkpOwor
ICAgICAgICAgICAgICAgIExWYWx1ZSBvcmlnaW5hbExlbmd0aFZhbHVlID0gbV9vdXQuemVyb0V4
dFB0cihjYXBhY2l0eSk7CisgICAgICAgICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5h
bmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChs
b29wKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTFZhbHVlIG9yaWdp
bmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aC52YWx1ZSk7CisgICAgICAg
ICAgICAgICAgb3JpZ2luYWxMZW5ndGggPSBtX291dC5hbmNob3Iob3JpZ2luYWxMZW5ndGhWYWx1
ZSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChvcmlnaW5hbExl
bmd0aFZhbHVlKSwgdW5zdXJlKGVuZCksIHVuc3VyZShsb29wKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcCwg
ZW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1fb3V0
LmludFB0ciwgb3JpZ2luYWxMZW5ndGgpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9v
dXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0LmludFB0ck9uZSk7CisgICAgICAgICAgICBtX291
dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy52YXJpYWJsZXMsIHN0YWNrQmFzZSwgaW5kZXgpKSwKKyAgICAgICAgICAgICAgICBt
X291dC5iYXNlSW5kZXgobV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgcmVzdWx0LCBp
bmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmV4dEluZGV4ID0gbV9vdXQuYW5j
aG9yKGluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJ
bmRleCwgbmV4dEluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwo
aW5kZXgpLCB1bnN1cmUoZW5kKSwgdW5zdXJlKGxvb3ApKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZW5kLCBsYXN0TmV4dCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21w
aWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBzY29wZSA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25DcmVhdGVTY29wZWRBcmd1bWVudHMpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAg
IHdlYWtQb2ludGVyKAorICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c2NvcGVkQXJndW1lbnRzU3RydWN0dXJlKCkpLAorICAg
ICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJndW1lbnRzTGVuZ3RoKCkudmFsdWUs
IGdldEN1cnJlbnRDYWxsZWUoKSwgc2NvcGUpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1
bWVudHMoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQ2xvbmVkQXJn
dW1lbnRzKSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICB3ZWFrUG9pbnRlcigKKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykt
Pm91dE9mQmFuZEFyZ3VtZW50c1N0cnVjdHVyZSgpKSwKKyAgICAgICAgICAgIGdldEFyZ3VtZW50
c1N0YXJ0KCksIGdldEFyZ3VtZW50c0xlbmd0aCgpLnZhbHVlLCBnZXRDdXJyZW50Q2FsbGVlKCkp
OworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUNvcHlSZXN0KCkKKyAgICB7ICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Js
b2NrIGRvQ29weVJlc3QgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvcHlSZXN0IEMgY2FsbCIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJGaWxsUmVzdFBhcmFtZXRlciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTFZhbHVl
IGFycmF5TGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoYXJyYXlMZW5ndGgsIG1fb3V0LmNv
bnN0SW50MzIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShk
b0NvcHlSZXN0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhkb0NvcHlSZXN0LCBjb250aW51YXRpb24pOworICAgICAgICAvLyBB
cmd1bWVudHM6IDA6ZXhlYywgMTpKU0NlbGwqIGFycmF5LCAyOmFyZ3VtZW50cyBzdGFydCwgMzpu
dW1iZXIgb2YgYXJndW1lbnRzIHRvIHNraXAsIDQ6YXJyYXkgbGVuZ3RoCisgICAgICAgIExWYWx1
ZSBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1i
ZXJPZkFyZ3VtZW50c1RvU2tpcCgpKTsKKyAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgbV9v
dXQudm9pZFR5cGUsbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNvcHlSZXN0KSwgbV9jYWxsRnJh
bWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBnZXRBcmd1bWVudHNT
dGFydCgpLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCwgYXJyYXlMZW5ndGgpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0UmVzdExlbmd0
aCgpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBub25aZXJvTGVuZ3RoID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJHZXRSZXN0TGVuZ3RoIG5vbiB6ZXJvIikpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFJlc3RMZW5ndGgg
Y29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgemVyb0xl
bmd0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDMyKDApKTsKKworICAgICAg
ICBMVmFsdWUgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXAgPSBtX291dC5jb25zdEludDMyKG1fbm9k
ZS0+bnVtYmVyT2ZBcmd1bWVudHNUb1NraXAoKSk7CisgICAgICAgIExWYWx1ZSBhcmd1bWVudHNM
ZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmFib3ZlKGFyZ3VtZW50c0xlbmd0aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApLAor
ICAgICAgICAgICAgdW5zdXJlKG5vblplcm9MZW5ndGgpLCB1bnN1cmUoY29udGludWF0aW9uKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KG5vblplcm9MZW5ndGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
blplcm9MZW5ndGhSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuc3ViKGFyZ3VtZW50c0xlbmd0
aCwgbnVtYmVyT2ZBcmd1bWVudHNUb1NraXApKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShtX291dC5pbnQzMiwgemVyb0xl
bmd0aFJlc3VsdCwgbm9uWmVyb0xlbmd0aFJlc3VsdCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGNvbXBpbGVOZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShhbGxvY2F0ZU9i
amVjdChtX25vZGUtPnN0cnVjdHVyZSgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZU5ld0FycmF5KCkKKyAgICB7CisgICAgICAgIC8vIEZpcnN0IHNwZWN1bGF0ZSBhcHByb3ByaWF0
ZWx5IG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4uIERvIHRoaXMgdW5jb25kaXRpb25hbGx5IHVwIGhl
cmUKKyAgICAgICAgLy8gYmVjYXVzZSBzb21lIG9mIHRoZSBzbG93IHBhdGhzIG1heSBvdGhlcndp
c2UgZm9yZ2V0IHRvIGRvIGl0LiBJdCdzIHNvcnQgb2YgYXJndWFibGUKKyAgICAgICAgLy8gdGhh
dCBkb2luZyB0aGUgc3BlY3VsYXRpb25zIHVwIGhlcmUgbWlnaHQgYmUgdW5wcm9maXRhYmxlIGZv
ciBSQSAtIHNvIHdlIGNhbiBjb25zaWRlcgorICAgICAgICAvLyBzaW5raW5nIHRoaXMgdG8gYmVs
b3cgdGhlIGFsbG9jYXRpb24gZmFzdCBwYXRoIGlmIHdlIGZpbmQgdGhhdCB0aGlzIGhhcyBhIGxv
dCBvZgorICAgICAgICAvLyByZWdpc3RlciBwcmVzc3VyZS4KKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBvcGVyYW5kSW5kZXggPSAwOyBvcGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7
ICsrb3BlcmFuZEluZGV4KQorICAgICAgICAgICAgc3BlY3VsYXRlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBvcGVyYW5kSW5kZXgpKTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oCisgICAgICAg
ICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKworICAgICAgICBpZiAoIWdsb2JhbE9iamVj
dC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRl
eGluZ1R5cGUoKSkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2Rl
LT5udW1DaGlsZHJlbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcnJheVZhbHVlcyBh
cnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1cmUsIG51bUVsZW1lbnRzKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBvcGVyYW5kSW5kZXggPSAwOyBv
cGVyYW5kSW5kZXggPCBtX25vZGUtPm51bUNoaWxkcmVuKCk7ICsrb3BlcmFuZEluZGV4KSB7Cisg
ICAgICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9w
ZXJhbmRJbmRleCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoICht
X25vZGUtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBTExfQkxBTktf
SU5ERVhJTkdfVFlQRVM6CisgICAgICAgICAgICAgICAgY2FzZSBBTExfVU5ERUNJREVEX0lOREVY
SU5HX1RZUEVTOgorICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGluZGV4aW5nIHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElO
R19UWVBFUzoKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUoCisgICAgICAg
ICAgICAgICAgICAgICAgICBsb3dEb3VibGUoZWRnZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheVZhbHVlcy5idXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXNb
b3BlcmFuZEluZGV4XSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoK
KyAgICAgICAgICAgICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVYSU5HX1RZUEVTOgorICAg
ICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0dGVyZmx5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9oZWFwcy5mb3JJbmRleGluZ1R5cGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSktPmF0KG9w
ZXJhbmRJbmRleCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW5kZXhpbmcgdHlwZSIpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUoYXJyYXlWYWx1ZXMuYXJyYXkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
bm9kZS0+bnVtQ2hpbGRyZW4oKSkgeworICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisg
ICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdF
bXB0eUFycmF5KSwgbV9jYWxsRnJhbWUsCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICog
bV9ub2RlLT5udW1DaGlsZHJlbigpOworICAgICAgICBBU1NFUlQoc2NyYXRjaFNpemUpOworICAg
ICAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0gdm0oKS5zY3JhdGNoQnVmZmVyRm9y
U2l6ZShzY3JhdGNoU2l6ZSk7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0
aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJ
bmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpIHsKKyAgICAgICAg
ICAgIEVkZ2UgZWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBvcGVyYW5kSW5kZXgp
OworICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCisgICAgICAgICAgICAgICAgbV9vdXQu
YWJzb2x1dGUoYnVmZmVyICsgb3BlcmFuZEluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2Ny
YXRjaFNpemUpLCBtX291dC5hYnNvbHV0ZShzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIo
KSkpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXkpLCBtX2Nh
bGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSksIG1fb3V0
LmNvbnN0SW50UHRyKGJ1ZmZlciksCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX25v
ZGUtPm51bUNoaWxkcmVuKCkpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG1f
b3V0LmludFB0clplcm8sIG1fb3V0LmFic29sdXRlKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0
aFB0cigpKSk7CisgICAgICAgIAorICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZU5ld0FycmF5QnVmZmVyKCkKKyAgICB7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xv
YmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24o
CisgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3Rv
cmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgdW5zaWduZWQgbnVt
RWxlbWVudHMgPSBtX25vZGUtPm51bUNvbnN0YW50cygpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBBcnJheVZhbHVlcyBhcnJheVZhbHVlcyA9IGFsbG9jYXRlSlNBcnJheShzdHJ1Y3R1cmUs
IG51bUVsZW1lbnRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSlNWYWx1ZSogZGF0YSA9
IGNvZGVCbG9jaygpLT5jb25zdGFudEJ1ZmZlcihtX25vZGUtPnN0YXJ0Q29uc3RhbnQoKSk7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtX25vZGUtPm51bUNv
bnN0YW50cygpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKQorICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IGJpdHdpc2VfY2FzdDxpbnQ2NF90PihkYXRhW2luZGV4
XS5hc051bWJlcigpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDY0KHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWx1ZXMuYnV0
dGVyZmx5LAorICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmZvckluZGV4aW5nVHlwZShtX25v
ZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQoaW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5hcnJheSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKAorICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlciksIG1fY2FsbEZyYW1lLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5zdGFydENvbnN0YW50KCkp
LAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ub2RlLT5udW1Db25zdGFudHMoKSkp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTmV3QXJyYXlXaXRoU2l6ZSgpCisgICAg
eworICAgICAgICBMVmFsdWUgcHVibGljTGVuZ3RoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIAorICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRl
eGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAorICAgICAgICAgICAgbV9ub2RlLT5pbmRleGluZ1R5
cGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFk
VGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsK
KyAgICAgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgICAgICBoYXNVbmRlY2lkZWQoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgIHx8IGhhc0RvdWJsZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgICAgIHx8IGhhc0NvbnRpZ3VvdXMoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6ZSBmYXN0IGNhc2Ui
KSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5ld0FycmF5V2l0aFNpemUgbGFyZ2UgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhaWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXpl
IGZhaWwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIHNsb3cgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3
QXJyYXlXaXRoU2l6ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwocHVibGlj
TGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJBWV9TVE9SQUdFX0NPTlNUUlVDVElPTl9M
RU5HVEgpKSwKKyAgICAgICAgICAgICAgICByYXJlbHkobGFyZ2VDYXNlKSwgdXN1YWxseShmYXN0
Q2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGZhc3RDYXNlLCBsYXJnZUNhc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBX
ZSBkb24ndCByb3VuZCB1cCB0byBCQVNFX1ZFQ1RPUl9MRU4gZm9yIG5ldyBBcnJheShibGFoKS4K
KyAgICAgICAgICAgIExWYWx1ZSB2ZWN0b3JMZW5ndGggPSBwdWJsaWNMZW5ndGg7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBwYXlsb2FkU2l6ZSA9CisgICAgICAgICAgICAgICAg
bV9vdXQuc2hsKG1fb3V0Lnplcm9FeHQodmVjdG9yTGVuZ3RoLCBtX291dC5pbnRQdHIpLCBtX291
dC5jb25zdEludFB0cigzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBidXR0
ZXJmbHlTaXplID0gbV9vdXQuYWRkKAorICAgICAgICAgICAgICAgIHBheWxvYWRTaXplLCBtX291
dC5jb25zdEludFB0cihzaXplb2YoSW5kZXhpbmdIZWFkZXIpKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdl
dEVuZChidXR0ZXJmbHlTaXplLCBmYWlsQ2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IExWYWx1ZSBidXR0ZXJmbHkgPSBtX291dC5zdWIoZW5kT2ZTdG9yYWdlLCBwYXlsb2FkU2l6ZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxvY2F0ZU9iamVj
dDxKU0FycmF5PihzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgZmFpbENhc2UpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5zdG9yZTMyKHB1YmxpY0xlbmd0aCwgYnV0dGVyZmx5LCBtX2hl
YXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2
ZWN0b3JMZW5ndGgsIGJ1dHRlcmZseSwgbV9oZWFwcy5CdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGhhc0RvdWJsZShtX25vZGUtPmluZGV4aW5n
VHlwZSgpKSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluaXRMb29wID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGRvdWJsZSBpbml0IGxvb3AiKSk7Cisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdERvbmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5ld0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgZG9uZSIpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbEluZGV4ID0gbV9vdXQu
YW5jaG9yKHZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3Jp
Z2luYWxQb2ludGVyID0gbV9vdXQuYW5jaG9yKGJ1dHRlcmZseSk7CisgICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIodmVjdG9y
TGVuZ3RoKSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGluaXREb25lKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdExhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW5pdExvb3AsIGluaXREb25lKTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgaW5k
ZXggPSBtX291dC5waGkobV9vdXQuaW50MzIsIG9yaWdpbmFsSW5kZXgpOworICAgICAgICAgICAg
ICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgb3JpZ2luYWxQb2lu
dGVyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0KGJpdHdpc2VfY2FzdDxpbnQ2NF90
PihQTmFOKSksCisgICAgICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlcihtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzLmF0QW55SW5kZXgoKSwgcG9pbnRlcikpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBuZXh0SW5kZXggPSBtX291dC5zdWIoaW5kZXgs
IG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhp
KGluZGV4LCBtX291dC5hbmNob3IobmV4dEluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQu
YWRkSW5jb21pbmdUb1BoaShwb2ludGVyLCBtX291dC5hbmNob3IobV9vdXQuYWRkKHBvaW50ZXIs
IG1fb3V0LmludFB0ckVpZ2h0KSkpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG5leHRJbmRleCksIHVuc3VyZShpbml0
TG9vcCksIHVuc3VyZShpbml0RG9uZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGluaXREb25lLCBpbml0TGFzdE5leHQpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG9iamVjdCk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZSwg
ZmFpbENhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VTdHJ1Y3R1cmUgPSBt
X291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoCisgICAgICAgICAgICAgICAgZ2xvYmFsT2Jq
ZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlX
aXRoQXJyYXlTdG9yYWdlKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChzbG93Q2FzZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBzbG93Q2Fz
ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYWlsU3RydWN0dXJlID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuanVt
cChzbG93Q2FzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZVZhbHVl
ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwgbGFyZ2VTdHJ1Y3R1
cmUsIGZhaWxTdHJ1Y3R1cmUpOworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9
IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlv
bj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSwgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAg
ICAgICAgICAgICAgIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUp
OworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xv
d1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5zZWxlY3QoCisgICAgICAgICAgICBt
X291dC5hYm92ZU9yRXF1YWwocHVibGljTGVuZ3RoLCBtX291dC5jb25zdEludDMyKE1JTl9BUlJB
WV9TVE9SQUdFX0NPTlNUUlVDVElPTl9MRU5HVEgpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKAorICAgICAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aEFycmF5U3RvcmFnZSkpLAorICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSk7CisgICAgICAgIHNldEpTVmFs
dWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlX
aXRoU2l6ZSksIG1fY2FsbEZyYW1lLCBzdHJ1Y3R1cmVWYWx1ZSwgcHVibGljTGVuZ3RoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlTmV3VHlwZWRBcnJheSgpCisgICAgeworICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+dHlwZWRBcnJheVN0cnVj
dHVyZSh0eXBlKTsKKworICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxFbm91Z2hDYXNlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5IHNtYWxsIGVub3VnaCBjYXNlIikp
OworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm9uWmVyb0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5ld1R5cGVkQXJyYXkgbm9uLXplcm8gY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdUeXBlZEFycmF5IHNs
b3cgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJheSBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZShzaXplLCBt
X291dC5jb25zdEludDMyKEpTQXJyYXlCdWZmZXJWaWV3OjpmYXN0U2l6ZUxpbWl0KSksCisgICAg
ICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEVub3VnaENhc2UpKTsK
KworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbWFs
bEVub3VnaENhc2UsIG5vblplcm9DYXNlKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0Lm5vdFplcm8zMihzaXplKSwgdXN1YWxseShub25aZXJvQ2FzZSksIHJhcmVseShzbG93Q2Fz
ZSkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub25aZXJvQ2FzZSwgc2xvd0Nhc2Up
OworCisgICAgICAgICAgICBMVmFsdWUgYnl0ZVNpemUgPQorICAgICAgICAgICAgICAgIG1fb3V0
LnNobChtX291dC56ZXJvRXh0UHRyKHNpemUpLCBtX291dC5jb25zdEludDMyKGxvZ0VsZW1lbnRT
aXplKHR5cGUpKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA4KSB7Cisg
ICAgICAgICAgICAgICAgYnl0ZVNpemUgPSBtX291dC5iaXRBbmQoCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFkZChieXRlU2l6ZSwgbV9vdXQuY29uc3RJbnRQdHIoNykpLAorICAgICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cih+c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDcpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBh
bGxvY2F0ZUJhc2ljU3RvcmFnZShieXRlU2l6ZSwgc2xvd0Nhc2UpOworCisgICAgICAgICAgICBM
VmFsdWUgZmFzdFJlc3VsdFZhbHVlID0KKyAgICAgICAgICAgICAgICBhbGxvY2F0ZU9iamVjdDxK
U0FycmF5QnVmZmVyVmlldz4oc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93Q2FzZSk7
CisKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlUHRyKHN0b3JhZ2UsIGZhc3RSZXN1bHRWYWx1ZSwg
bV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICAgICAgbV9vdXQuc3Rv
cmUzMihzaXplLCBmYXN0UmVzdWx0VmFsdWUsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfbGVu
Z3RoKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihGYXN0VHlw
ZWRBcnJheSksIGZhc3RSZXN1bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2Rl
KTsKKworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAg
ICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4g
UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld1R5cGVkQXJyYXlXaXRoU2l6ZUZvclR5cGUodHlwZSksIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgc2l6ZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CisgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAg
ICAgICAgIExWYWx1ZSBhcmd1bWVudCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisK
KyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9v
dXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3VHlwZWRBcnJheVdpdGhPbmVB
cmd1bWVudEZvclR5cGUodHlwZSkpLAorICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QtPnR5cGVkQXJyYXlTdHJ1Y3R1cmUodHlwZSkpLCBhcmd1bWVu
dCk7CisKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIHNldFN0b3JhZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2Jq
ZWN0LCBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMpKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKKyAgICB7CisgICAgICAgIFRyYW5z
aXRpb24qIHRyYW5zaXRpb24gPSBtX25vZGUtPnRyYW5zaXRpb24oKTsKKyAgICAgICAgTFZhbHVl
IG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBvbGRT
dG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAg
IHNldFN0b3JhZ2UoCisgICAgICAgICAgICByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKAorICAg
ICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJhbnNpdGlvbi0+cHJldmlvdXMsIHRy
YW5zaXRpb24tPm5leHQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlVG9TdHJpbmdP
ckNhbGxTdHJpbmdDb25zdHJ1Y3RvcigpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOiB7Cisg
ICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxsKG1fbm9kZS0+Y2hpbGQxKCksIGNl
bGwpOworICAgICAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIobV9ub2RlLT5jaGlsZDEoKSwg
U3BlY1N0cmluZ09iamVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9pbnRlcm5hbFZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOiB7CisgICAgICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RydWN0
dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmcgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlRvU3RyaW5nIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBzdHJpbmcg
Y2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0aW9u
IikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVSZXN1
bHQgPSBtX291dC5hbmNob3IoY2VsbCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmNvbnN0SW50MzIodm0o
KS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY29udGlu
dWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOworICAgICAgICAgICAgCisgICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKG1f
bm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHVuYm94ZWRSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZFB0cihjZWxsLCBtX2hlYXBzLkpTV3JhcHBlck9iamVjdF9pbnRlcm5hbFZhbHVlKSk7CisgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHNpbXBsZVJlc3VsdCwgdW5ib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlciht
X25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIENlbGxV
c2U6CisgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVl
OworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2Up
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmluZyBDZWxsVXNlL1VudHlwZWRVc2UgaXMg
Y2VsbCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVzZS9VbnR5cGVkVXNlIG5vdCBzdHJpbmciKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBjb250aW51YXRpb24iKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExWYWx1ZSBpc0NlbGxQcmVkaWNhdGU7CisgICAgICAgICAgICBp
ZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAgICAg
ICBpc0NlbGxQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpc0NlbGxQcmVkaWNhdGUgPSB0aGlzLT5pc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Q2VsbFByZWRpY2F0ZSwgdW5zdXJlKGlzQ2VsbCksIHVuc3VyZShub3RTdHJpbmcpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpc0NlbGwsIG5vdFN0cmluZyk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzaW1wbGVS
ZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOworICAgICAgICAgICAgTFZhbHVlIGlzU3RyaW5n
UHJlZGljYXRlOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSAmIFNwZWNTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBpc1N0cmluZ1ByZWRpY2F0ZSA9IGlz
U3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJlZGljYXRlID0gbV9vdXQuYm9vbGVh
bkZhbHNlOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nUHJlZGljYXRlLCB1bnN1
cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdFN0cmluZykpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmcsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBMVmFsdWUgb3BlcmF0aW9uOworICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gbV9vdXQu
b3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBUb1N0cmluZyA/IG9wZXJhdGlvblRvU3RyaW5nT25D
ZWxsIDogb3BlcmF0aW9uQ2FsbFN0cmluZ0NvbnN0cnVjdG9yT25DZWxsKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24obV9ub2Rl
LT5vcCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJpbmcgOiBvcGVyYXRpb25DYWxsU3Ry
aW5nQ29uc3RydWN0b3IpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChtX291dC5pbnQ2NCwgb3BlcmF0aW9uLCBtX2NhbGxG
cmFtZSwgdmFsdWUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgc2lt
cGxlUmVzdWx0LCBjb252ZXJ0ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb1ByaW1pdGl2ZSgpCisg
ICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiVG9QcmltaXRpdmUgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBpc09iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIG9iamVj
dCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlRvUHJpbWl0aXZlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2YWx1ZSkpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgaXNPYmplY3RDYXNlKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZh
bHVlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzT2JqZWN0KHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpc09i
amVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhpc09iamVjdENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblRvUHJpbWl0aXZlKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSkp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlTWFrZVJvcGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGtpZHNbM107CisgICAg
ICAgIHVuc2lnbmVkIG51bUtpZHM7CisgICAgICAgIGtpZHNbMF0gPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBraWRzWzFdID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKKyAgICAgICAgICAgIGtpZHNbMl0gPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgbnVtS2lkcyA9IDM7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBraWRzWzJdID0gMDsKKyAgICAgICAgICAgIG51bUtp
ZHMgPSAyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0
aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUgc2xvdyBwYXRoIikpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1ha2VS
b3BlIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIE1hcmtlZEFsbG9jYXRvciYgYWxsb2NhdG9yID0KKyAgICAgICAgICAgIHZtKCkuaGVh
cC5hbGxvY2F0b3JGb3JPYmplY3RXaXRoRGVzdHJ1Y3RvcihzaXplb2YoSlNSb3BlU3RyaW5nKSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoJmFsbG9jYXRvciksCisgICAgICAgICAgICB2bSgpLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSwKKyAgICAgICAgICAgIHNsb3dQYXRoKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmludFB0clplcm8sIHJlc3VsdCwgbV9oZWFwcy5K
U1N0cmluZ192YWx1ZSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1LaWRz
OyArK2kpCisgICAgICAgICAgICBtX291dC5zdG9yZVB0cihraWRzW2ldLCByZXN1bHQsIG1faGVh
cHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUtpZHM7IGkgPCBKU1JvcGVTdHJpbmc6OnNfbWF4SW50ZXJuYWxSb3BlTGVuZ3RoOyArK2kpCisg
ICAgICAgICAgICBtX291dC5zdG9yZVB0cihtX291dC5pbnRQdHJaZXJvLCByZXN1bHQsIG1faGVh
cHMuSlNSb3BlU3RyaW5nX2ZpYmVyc1tpXSk7CisgICAgICAgIExWYWx1ZSBmbGFncyA9IG1fb3V0
LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKKyAgICAgICAgTFZhbHVl
IGxlbmd0aCA9IG1fb3V0LmxvYWQzMihraWRzWzBdLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBudW1LaWRzOyArK2kpIHsKKyAgICAg
ICAgICAgIGZsYWdzID0gbV9vdXQuYml0QW5kKGZsYWdzLCBtX291dC5sb2FkMzIoa2lkc1tpXSwg
bV9oZWFwcy5KU1N0cmluZ19mbGFncykpOworICAgICAgICAgICAgQ2hlY2tWYWx1ZSogbGVuZ3Ro
Q2hlY2sgPSBtX291dC5zcGVjdWxhdGVBZGQoCisgICAgICAgICAgICAgICAgbGVuZ3RoLCBtX291
dC5sb2FkMzIoa2lkc1tpXSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpKTsKKyAgICAgICAgICAg
IGJsZXNzU3BlY3VsYXRpb24obGVuZ3RoQ2hlY2ssIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIG51
bGxwdHIsIG1fb3JpZ2luKTsKKyAgICAgICAgICAgIGxlbmd0aCA9IGxlbmd0aENoZWNrOworICAg
ICAgICB9CisgICAgICAgIG1fb3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5iaXRBbmQo
bV9vdXQuY29uc3RJbnQzMihKU1N0cmluZzo6SXM4Qml0KSwgZmxhZ3MpLAorICAgICAgICAgICAg
cmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX2ZsYWdzKTsKKyAgICAgICAgbV9vdXQuc3RvcmUzMihs
ZW5ndGgsIHJlc3VsdCwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOworICAgICAgICAKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihyZXN1bHQpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1
bHRWYWx1ZTsKKyAgICAgICAgc3dpdGNoIChudW1LaWRzKSB7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVM
YXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VS
b3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCkpOworICAg
ICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0
aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9u
cykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlv
bnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAg
fSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
bnVtYmVyIG9mIGNoaWxkcmVuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRW
YWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTdHJpbmcgZmFzdCBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIHNsb3cgcGF0aCIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRC
eVZhbCBTdHJpbmcgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAgICAgICAgICAgICAg
ICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ19s
ZW5ndGgpKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoZmFzdFBhdGgp
KTsKKyAgICAgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUp
OworICAgICAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDgtYml0IGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyAx
Ni1iaXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYml0c0NvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIGJpdG5lc3MgY29udGludWF0aW9u
IikpOworICAgICAgICBMQmFzaWNCbG9jayBiaWdDaGFyYWN0ZXIgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldEJ5VmFsIFN0cmluZyBiaWcgY2hhcmFjdGVyIikpOworICAgICAgICAgICAgCisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBs
X2hhc2hBbmRGbGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJ
bXBsOjpmbGFnSXM4Qml0KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShpczE2Qml0KSwgdW5zdXJl
KGlzOEJpdCkpOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwg
aXMxNkJpdCk7CisgICAgICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hhcjhCaXQg
PSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5i
YXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9oZWFwcy5jaGFyYWN0ZXJzOCwgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCksCisgICAgICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9u
b2RlLT5jaGlsZDIoKSkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoYml0c0NvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgYmlnQ2hhcmFj
dGVyKTsKKworICAgICAgICBMVmFsdWUgY2hhcjE2Qml0VmFsdWUgPSBtX291dC5sb2FkMTZaZXJv
RXh0MzIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgbV9o
ZWFwcy5jaGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAorICAg
ICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hvcihjaGFyMTZCaXRWYWx1ZSk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChjaGFy
MTZCaXRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDEwMCkpLAorICAgICAgICAgICAgcmFyZWx5
KGJpZ0NoYXJhY3RlciksIHVzdWFsbHkoYml0c0NvbnRpbnVhdGlvbikpOworICAgICAgICAgICAg
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJpZ0NoYXJhY3RlciwgYml0c0NvbnRpbnVhdGlvbik7
CisgICAgICAgICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCA0PiByZXN1bHRz
OworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAorICAgICAgICAg
ICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJT
dHJpbmcpLAorICAgICAgICAgICAgbV9jYWxsRnJhbWUsIGNoYXIxNkJpdFZhbHVlKSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYml0c0NvbnRpbnVhdGlvbiwgc2xvd1BhdGgpOworICAgICAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBjaGFyYWN0ZXIgPSBtX291dC5waGkobV9vdXQuaW50MzIsIGNoYXI4Qml0
LCBjaGFyMTZCaXQpOworICAgICAgICAgICAgCisgICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3Mg
PSBtX291dC5jb25zdEludFB0cih2bSgpLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJp
bmdzKCkpOworICAgICAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hv
cihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgIG1faGVhcHMuc2lu
Z2xlQ2hhcmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBtX291dC56ZXJvRXh0UHRyKGNoYXJh
Y3RlcikpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwgbV9vdXQu
Ym9vbGVhblRydWUpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1f
b3V0LmludFB0clplcm8pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoZ2xvYmFs
T2JqZWN0LT5zdHJpbmdQcm90b3R5cGVDaGFpbklzU2FuZSgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgY2FwdHVyZWQgdXNpbmcgYSBTcGVjdWxhdGlvbiBtb2Rl
IHRoYXQgbWVhbnMKKyAgICAgICAgICAgICAgICAvLyAib3V0LW9mLWJvdW5kcyBsb2FkcyByZXR1
cm4gYSB0cml2aWFsIHZhbHVlIiwgc29tZXRoaW5nIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBT
YW5lQ2hhaW5PdXRPZkJvdW5kcy4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShnbG9iYWxPYmplY3QtPnN0
cmluZ1Byb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShnbG9iYWxP
YmplY3QtPm9iamVjdFByb3RvdHlwZSgpLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXQoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bmVnYXRpdmVJbmRleCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIG5l
Z2F0aXZlIGluZGV4IikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSwK
KyAgICAgICAgICAgICAgICAgICAgcmFyZWx5KG5lZ2F0aXZlSW5kZXgpLCB1c3VhbGx5KGNvbnRp
bnVhdGlvbikpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhuZWdhdGl2ZUluZGV4LCBjb250aW51YXRpb24pOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZt
Q2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsU3RyaW5nSW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgcmVzdWx0cykp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKKyAgICB7
CisgICAgICAgIExCYXNpY0Jsb2NrIGlzOEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3Ry
aW5nQ2hhckNvZGVBdCA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBpczE2Qml0
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29kZUF0IDE2LWJpdCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0cmluZ0NoYXJDb2RlQXQgY29udGludWF0aW9uIikpOworCisgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsCisgICAgICAgICAgICBtX291
dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5l
Z2F0aXZlKGJhc2UsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSkpOworICAgICAgICAKKyAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNTdHJp
bmdfdmFsdWUpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAg
dW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7CisgICAgICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOwor
ICAgICAgICAgICAgCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoYXI4Qml0ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAor
ICAgICAgICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczgsIHN0b3JhZ2UsIG1fb3V0Lnplcm9F
eHRQdHIoaW5kZXgpLAorICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQy
KCkpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXMxNkJpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyMTZCaXQgPSBtX291dC5hbmNob3IoCisg
ICAgICAgICAgICBtX291dC5sb2FkMTZaZXJvRXh0MzIobV9vdXQuYmFzZUluZGV4KAorICAgICAg
ICAgICAgICAgIG1faGVhcHMuY2hhcmFjdGVyczE2LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRy
KGluZGV4KSwKKyAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIAorICAgICAg
ICBzZXRJbnQzMihtX291dC5waGkobV9vdXQuaW50MzIsIGNoYXI4Qml0LCBjaGFyMTZCaXQpKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdGcm9tQ2hhckNvZGUoKQorICAgIHsKKyAg
ICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBtX25vZGUtPmNoaWxkMSgpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSkgeworICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29kZVVudHlwZWQpLCBtX2NhbGxG
cmFtZSwKKyAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGNoaWxkRWRnZSkpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNoaWxkRWRnZS51c2VLaW5kKCkg
PT0gSW50MzJVc2UpOworCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKGNoaWxkRWRn
ZSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbWFsbEludENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN0cmluZ0Zyb21DaGFyQ29kZSBzbWFsbCBpbnQgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0cmlu
Z0Zyb21DaGFyQ29kZSBzbG93IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nRnJvbUNoYXJDb2RlIGNvbnRpbnVh
dGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92
ZU9yRXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMHhmZikpLAorICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShzbWFsbEludENhc2UpKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsSW50Q2FzZSwgc2xvd0Nhc2UpOwor
CisgICAgICAgIExWYWx1ZSBzbWFsbFN0cmluZ3MgPSBtX291dC5jb25zdEludFB0cih2bSgpLnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpOworICAgICAgICBMVmFsdWUgZmFz
dFJlc3VsdFZhbHVlID0gbV9vdXQubG9hZFB0cigKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRl
eChtX2hlYXBzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MsIHNtYWxsU3RyaW5ncywgbV9vdXQuemVy
b0V4dFB0cih2YWx1ZSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKKyAgICAgICAgICAg
IG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblN0cmluZ0Zyb21DaGFyQ29k
ZSksIG1fY2FsbEZyYW1lLCB2YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworCisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEJ5
T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhID0gbV9ub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YSgpOworICAgICAgICAKKyAgICAgICAgc2V0SlNWYWx1ZShsb2Fk
UHJvcGVydHkoCisgICAgICAgICAgICBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkYXRh
LmlkZW50aWZpZXJOdW1iZXIsIGRhdGEub2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
Y29tcGlsZUdldEdldHRlcigpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQ
dHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5HZXR0ZXJTZXR0ZXJfZ2V0dGVy
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldFNldHRlcigpCisgICAgeworICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwg
bV9oZWFwcy5HZXR0ZXJTZXR0ZXJfc2V0dGVyKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZU11bHRpR2V0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAKKyAgICAgICAgTXVsdGlHZXRCeU9mZnNl
dERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CisKKyAgICAgICAg
aWYgKGRhdGEuY2FzZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAvLyBQcm90ZWN0IGFnYWlu
c3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJvIGlucHV0cy4gTExWTSBkb2Vzbid0
IGxpa2UgdGhhdC4KKyAgICAgICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxMQmFzaWNCbG9j
aywgMj4gYmxvY2tzKGRhdGEuY2FzZXMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspCisgICAgICAgICAgICBibG9ja3NbaV0gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZzZXQgY2FzZSAiLCBpKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGV4aXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpR2V0QnlPZmZz
ZXQgZmFpbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJNdWx0aUdldEJ5T2Zmc2V0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAyPiBjYXNlczsKKyAgICAgICAgU3RydWN0dXJl
U2V0IGJhc2VTZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0
YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGdldENhc2Uuc2V0KCku
c2l6ZSgpOyBqLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
ZXRDYXNlLnNldCgpW2pdOworICAgICAgICAgICAgICAgIGJhc2VTZXQuYWRkKHN0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2Uod2Vha1N0cnVjdHVyZUlE
KHN0cnVjdHVyZSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEpKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBtX291
dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBjYXNlcywgZXhpdCwg
V2VpZ2h0KDApKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ss
IDI+IHJlc3VsdHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEuY2FzZXMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0Q2FzZSBnZXRDYXNlID0gZGF0
YS5jYXNlc1tpXTsKKyAgICAgICAgICAgIEdldEJ5T2Zmc2V0TWV0aG9kIG1ldGhvZCA9IGdldENh
c2UubWV0aG9kKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJs
b2Nrc1tpXSwgaSArIDEgPCBkYXRhLmNhc2VzLnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgc3dpdGNoIChtZXRob2Qua2luZCgpKSB7CisgICAgICAgICAgICBjYXNl
IEdldEJ5T2Zmc2V0TWV0aG9kOjpJbnZhbGlkOgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpDb25zdGFudDoKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtZXRo
b2QuY29uc3RhbnQoKS0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZDoKKyAg
ICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6OkxvYWRGcm9tUHJvdG90eXBlOiB7Cisg
ICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKKyAgICAgICAgICAgICAgICBpZiAo
bWV0aG9kLmtpbmQoKSA9PSBHZXRCeU9mZnNldE1ldGhvZDo6TG9hZCkKKyAgICAgICAgICAgICAg
ICAgICAgcHJvcGVydHlCYXNlID0gYmFzZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IHdlYWtQb2ludGVyKG1ldGhvZC5wcm90b3R5cGUo
KS0+dmFsdWUoKS5hc0NlbGwoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFpc0lubGluZU9mZnNl
dChtZXRob2Qub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2UgPSBs
b2FkQnV0dGVyZmx5UmVhZE9ubHkocHJvcGVydHlCYXNlKTsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBsb2FkUHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSwgZGF0
YS5pZGVudGlmaWVyTnVtYmVyLCBtZXRob2Qub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfSB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcihyZXN1bHQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
ZXhpdCwgY29udGludWF0aW9uKTsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLmZvck5vZGUo
bV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihiYXNlU2V0KSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29s
ZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlUHV0QnlPZmZzZXQoKQorICAgIHsKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0Rh
dGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhKCk7CisgICAgICAgIAorICAgICAg
ICBzdG9yZVByb3BlcnR5KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMygp
KSwKKyAgICAgICAgICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksIGRhdGEuaWRlbnRp
Zmllck51bWJlciwgZGF0YS5vZmZzZXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVN
dWx0aVB1dEJ5T2Zmc2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBk
YXRhID0gbV9ub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOworICAgICAgICAKKyAgICAgICAg
VmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS52YXJpYW50cy5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRzLnNpemUoKTsgaS0tOykKKyAgICAg
ICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNl
dCBjYXNlICIsIGkpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBmYWlsIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRpUHV0QnlPZmZzZXQgY29u
dGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDI+IGNh
c2VzOworICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFB1dEJ5SWRW
YXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS5zaXplKCk7IGotLTspIHsKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhcmlhbnQub2xkU3RydWN0dXJlKClbal07
CisgICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxv
Y2tzW2ldLCBXZWlnaHQoMSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBt
X291dC5zd2l0Y2hJbnN0cnVjdGlvbigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBleGl0LCBXZWlnaHQoMCkpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsK
KyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkgKyAxIDwg
ZGF0YS52YXJpYW50cy5zaXplKCkgPyBibG9ja3NbaSArIDFdIDogZXhpdCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ld
OworCisgICAgICAgICAgICBjaGVja0luZmVycmVkVHlwZShtX25vZGUtPmNoaWxkMigpLCB2YWx1
ZSwgdmFyaWFudC5yZXF1aXJlZFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExW
YWx1ZSBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZh
cmlhbnQub2Zmc2V0KCkpKQorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlID0gYmFzZTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBsb2FkQnV0
dGVyZmx5V2l0aEJhcnJpZXIoYmFzZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIG1fZ3JhcGgubV9wbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKKyAgICAgICAgICAg
ICAgICAgICAgY29kZUJsb2NrKCksIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5P
d25lcigpLAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5z
aXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgc3RvcmFnZSA9IHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICAgICAg
ICAgICAgICBiYXNlLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICAgICAgICAgICAgICB2YXJp
YW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JUcmFuc2l0
aW9uKCktPmluZGV4aW5nVHlwZSgpID09IHZhcmlhbnQubmV3U3RydWN0dXJlKCktPmluZGV4aW5n
VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmVGb3JU
cmFuc2l0aW9uKCktPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdzKCkgPT0gdmFyaWFudC5uZXdT
dHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT50eXBlSW5mbygp
LnR5cGUoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5mbygpLnR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICAgICAgd2Vha1N0
cnVjdHVyZUlEKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpLCBiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN0
b3JlUHJvcGVydHkodmFsdWUsIHN0b3JhZ2UsIGRhdGEuaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlv
bik7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQxKCkp
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoYmFzZVNldCkpCisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdl
dEdsb2JhbFZhcmlhYmxlKCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0
KG1fb3V0LmFic29sdXRlKG1fbm9kZS0+dmFyaWFibGVQb2ludGVyKCkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZVB1dEdsb2JhbFZhcmlhYmxlKCkKKyAgICB7CisgICAgICAgIG1f
b3V0LnN0b3JlNjQoCisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5hYnNvbHV0ZShtX25vZGUtPnZhcmlhYmxlUG9pbnRlcigpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKCkKKyAgICB7CisgICAgICAgIFdhdGNocG9pbnRT
ZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOworICAgICAgICAKKyAgICAgICAgTEJh
c2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5
V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgY29udGludWF0aW9u
IikpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDhaZXJvRXh0
MzIobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5jb25zdEludDMy
KElzSW52YWxpZGF0ZWQpKSwKKyAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KGlzTm90SW52YWxpZGF0ZWQpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgY29udGludWF0aW9uKTsK
KworICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BSUmVnLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoc2V0KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldENhbGxlZSgp
CisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihKU1N0
YWNrOjpDYWxsZWUpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldEFyZ3VtZW50
Q291bnQoKQorICAgIHsKKyAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3Io
SlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxl
R2V0U2NvcGUoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNGdW5jdGlvbl9zY29wZSkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNvbXBpbGVTa2lwU2NvcGUoKQorICAgIHsKKyAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5sb2FkUHRyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1faGVhcHMuSlNT
Y29wZV9uZXh0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUdldENsb3N1cmVWYXIo
KQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgK
KyAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAg
ICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbbV9ub2RlLT5zY29wZU9m
ZnNldCgpLm9mZnNldCgpXSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRDbG9z
dXJlVmFyKCkKKyAgICB7CisgICAgICAgIG1fb3V0LnN0b3JlNjQoCisgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAorICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwKKyAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJs
ZXNbbV9ub2RlLT5zY29wZU9mZnNldCgpLm9mZnNldCgpXSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY29tcGlsZUdldEZyb21Bcmd1bWVudHMoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZSgK
KyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCgKKyAgICAgICAgICAgICAgICBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0
b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpXSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cygpCisgICAgeworICAgICAg
ICBtX291dC5zdG9yZTY0KAorICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigp
KSwKKyAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlW21fbm9kZS0+Y2FwdHVyZWRBcmd1bWVudHNP
ZmZzZXQoKS5vZmZzZXQoKV0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJl
RXEoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KQorICAgICAgICAgICAgfHwgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50NTJSZXBVc2UpCisg
ICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpCisgICAg
ICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UpCisgICAgICAgICAg
ICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKQorICAgICAgICAgICAgfHwg
bV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3ltYm9sVXNlKQorICAgICAgICAgICAgfHwgbV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpCisgICAgICAgICAgICB8fCBtX25vZGUt
PmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpKSB7CisgICAgICAgICAgICBjb21waWxlQ29tcGFy
ZVN0cmljdEVxKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2UsIE9iamVjdE9yT3Ro
ZXJVc2UpKSB7CisgICAgICAgICAgICBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QobV9u
b2RlLT5jaGlsZDIoKSwgbV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChP
YmplY3RPck90aGVyVXNlLCBPYmplY3RVc2UpKSB7CisgICAgICAgICAgICBjb21wYXJlRXFPYmpl
Y3RPck90aGVyVG9PYmplY3QobV9ub2RlLT5jaGlsZDEoKSwgbV9ub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25v
ZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgeworICAgICAgICAgICAgbm9uU3BlY3Vs
YXRpdmVDb21wYXJlKAorICAgICAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwobGVmdCwgcmln
aHQpOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFy
ZUVxKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgeworICAgICAgICAgICAgQVNTRVJU
KCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNPdGhl
cikpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUt
PmNoaWxkMigpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gT3RoZXJVc2UpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhtX25vZGUtPmNo
aWxkMigpLCBTcGVjT3RoZXIpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JV
bmRlZmluZWQobV9ub2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxOdWxsT3JV
bmRlZmluZWQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZHMiKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVx
KCkKKyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkp
IHsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwo
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
X25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkpIHsKKyAgICAgICAgICAgIEludDUy
S2luZCBraW5kOworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1Miht
X25vZGUtPmNoaWxkMSgpLCBraW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5lcXVhbChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoRG91YmxlUmVwVXNl
KSkgeworICAgICAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5kb3Vi
bGVFcXVhbChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMigpKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKSB7CisgICAg
ICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxvd1N0cmlu
Z0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMigp
KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ1VzZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFRyaXZpYWxseUVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmlj
dEVxL1N0cmluZyBub3QgdHJpdmlhbGx5IGVxdWFsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJp
Y3RFcS9TdHJpbmcgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBzcGVjdWxhdGVTdHJp
bmcobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RUcml2aWFsbHlFcXVhbENhc2UpKTsK
KworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhub3RU
cml2aWFsbHlFcXVhbENhc2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
ZVN0cmluZyhtX25vZGUtPmNoaWxkMigpLCByaWdodCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc3RyaW5nc0VxdWFs
KGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAg
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSwgVW50eXBlZFVzZSkpIHsKKyAg
ICAgICAgICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCisgICAg
ICAgICAgICAgICAgICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksCisgICAg
ICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNC
aW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE9iamVjdFVzZSkpIHsKKyAgICAgICAgICAgIHNldEJv
b2xlYW4oCisgICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAg
IGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSksCisgICAgICAgICAgICAgICAgICAg
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChPYmplY3RVc2Up
KSB7CisgICAgICAgICAgICBzZXRCb29sZWFuKAorICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkp
LAorICAgICAgICAgICAgICAgICAgICBsb3dOb25OdWxsT2JqZWN0KG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChCb29sZWFuVXNlKSkgeworICAgICAgICAgICAgc2V0
Qm9vbGVhbigKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dCb29sZWFuKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3ltYm9sVXNlKSkgeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dTeW1ib2wobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dTeW1ib2wobV9ub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBMVmFsdWUgbGVmdFN0cmluZ0ltcGwgPSBtX291dC5s
b2FkUHRyKGxlZnQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodFN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHJpZ2h0LCBtX2hlYXBzLlN5bWJv
bF9wcml2YXRlTmFtZSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnRT
dHJpbmdJbXBsLCByaWdodFN0cmluZ0ltcGwpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE1pc2NV
c2UsIFVudHlwZWRVc2UpCisgICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlLCBNaXNjVXNlKSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgICAg
ICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChTdHJpbmdJZGVudFVzZSwgTm90U3RyaW5nVmFyVXNlKQorICAgICAgICAgICAgfHwgbV9u
b2RlLT5pc0JpbmFyeVVzZUtpbmQoTm90U3RyaW5nVmFyVXNlLCBTdHJpbmdJZGVudFVzZSkpIHsK
KyAgICAgICAgICAgIEVkZ2UgbGVmdEVkZ2UgPSBtX25vZGUtPmNoaWxkRm9yKFN0cmluZ0lkZW50
VXNlKTsKKyAgICAgICAgICAgIEVkZ2UgcmlnaHRFZGdlID0gbV9ub2RlLT5jaGlsZEZvcihOb3RT
dHJpbmdWYXJVc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxv
d1N0cmluZ0lkZW50KGxlZnRFZGdlKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodFZhbHVlID0g
bG93SlNWYWx1ZShyaWdodEVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIgaXMg
Y2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEgU3RyaW5nSWRlbnQgdG8gTm90U3Ry
aW5nVmFyIGlzIHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEgU3RyaW5nSWRl
bnQgdG8gTm90U3RyaW5nVmFyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5i
b29sZWFuRmFsc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IGlzQ2VsbChyaWdodFZhbHVlLCBwcm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAorICAgICAgICAgICAg
ICAgIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Q2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RT
dHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc1N0cmluZyhyaWdodFZhbHVlLCBw
cm92ZW5UeXBlKHJpZ2h0RWRnZSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShpc1N0cmluZ0Nh
c2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodCA9IG1fb3V0LmxvYWRQdHIocmlnaHRWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192
YWx1ZSk7CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChyaWdodEVkZ2UsIHJpZ2h0
VmFsdWUsIHJpZ2h0KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzU3RyaW5nUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgbm90U3RyaW5nUmVzdWx0
LCBpc1N0cmluZ1Jlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCgp
CisgICAgeworICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gbV9ub2RlLT5jaGlsZDIoKS0+YXNK
U1ZhbHVlKCk7CisKKyAgICAgICAgc2V0Qm9vbGVhbigKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KAorICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnQpKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCisgICAgeworICAgICAg
ICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIHJpZ2h0KTsKKyAg
ICAgICAgICAgIH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTGVzc1RoYW4obGVmdCwgcmln
aHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVMZXNzKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29tcGFyZUxlc3NFcSgpCisgICAgeworICAg
ICAgICBjb21wYXJlKAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0
KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lmxlc3NUaGFuT3JFcXVhbChsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZUxlc3NUaGFu
T3JFcXVhbChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgb3BlcmF0
aW9uQ29tcGFyZUxlc3NFcSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvbXBhcmVH
cmVhdGVyKCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUoCisgICAgICAgICAgICBbJl0gKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZ3Jl
YXRlclRoYW4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIFsmXSAo
TFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeworICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5kb3VibGVHcmVhdGVyVGhhbihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bXBpbGVDb21wYXJlR3JlYXRlckVxKCkKKyAgICB7CisgICAgICAgIGNvbXBhcmUoCisgICAgICAg
ICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuZ3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IH0sCisgICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlR3JlYXRl
ckVxKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdCgpCisgICAgewor
ICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmxvZ2ljYWxOb3QoYm9vbGlmeShtX25vZGUtPmNoaWxk
MSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpCisgICAg
eworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICB1bnNpZ25lZCBudW1Bcmdz
ID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CisKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0g
bG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKworICAgICAgICB1bnNp
Z25lZCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgbnVtQXJnczsK
KyAgICAgICAgdW5zaWduZWQgYWxpZ25lZEZyYW1lU2l6ZSA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBmcmFtZVNpemUpOworCisgICAgICAgIC8v
IEpTLT5KUyBjYWxsaW5nIGNvbnZlbnRpb24gcmVxdWlyZXMgdGhhdCB0aGUgY2FsbGVyIGFsbG93
cyB0aGlzIG11Y2ggc3BhY2Ugb24gdG9wIG9mIHN0YWNrIHRvCisgICAgICAgIC8vIGdldCB0cmFz
aGVkIGJ5IHRoZSBjYWxsZWUsIGV2ZW4gaWYgbm90IGFsbCBvZiB0aGF0IHNwYWNlIGlzIHVzZWQg
dG8gcGFzcyBhcmd1bWVudHMuIFdlIHRlbGwKKyAgICAgICAgLy8gQjMgdGhpcyBleHBsaWNpdGx5
IGZvciB0d28gcmVhc29uczoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gLSBXZSB3aWxsIG9ubHkg
cGFzcyBmcmFtZVNpemUgd29ydGggb2Ygc3R1ZmYuCisgICAgICAgIC8vIC0gVGhlIHRyYXNoZWQg
c3RhY2sgZ3VhcmFudGVlIGlzIGxvZ2ljYWxseSBzZXBhcmF0ZSBmcm9tIHRoZSBhY3Qgb2YgcGFz
c2luZyBhcmd1bWVudHMsIHNvIHdlCisgICAgICAgIC8vICAgc2hvdWxkbid0IHJlbHkgb24gQWly
IHRvIGluZmVyIHRoZSB0cmFzaGVkIHN0YWNrIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBhcmd1bWVu
dHMgaXQgZW5kcworICAgICAgICAvLyAgIHVwIHNlZWluZy4KKyAgICAgICAgbV9wcm9jLnJlcXVl
c3RDYWxsQXJnQXJlYVNpemUoYWxpZ25lZEZyYW1lU2l6ZSk7CisKKyAgICAgICAgLy8gQ29sbGVj
dCB0aGUgYXJndW1lbnRzLCBzaW5jZSB0aGlzIGNhbiBnZW5lcmF0ZSBjb2RlIGFuZCB3ZSB3YW50
IHRvIGdlbmVyYXRlIGl0IGJlZm9yZSB3ZSBlbWl0CisgICAgICAgIC8vIHRoZSBjYWxsLgorICAg
ICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4gYXJndW1lbnRzOworCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBjYWxsZWUgZ29lcyBpbnRvIEdQUjAgYmVjYXVzZSB0aGF0J3Mgd2hl
cmUgdGhlIHNsb3cgcGF0aCB0aHVua3MgZXhwZWN0IHRoZQorICAgICAgICAvLyBjYWxsZWUgdG8g
YmUuCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShqc0NhbGxlZSwg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKKworICAgICAgICBhdXRvIGFkZEFyZ3Vt
ZW50ID0gWyZdIChMVmFsdWUgdmFsdWUsIFZpcnR1YWxSZWdpc3RlciByZWcsIGludCBvZmZzZXQp
IHsKKyAgICAgICAgICAgIGludHB0cl90IG9mZnNldEZyb21TUCA9CisgICAgICAgICAgICAgICAg
KHJlZy5vZmZzZXQoKSAtIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKyBvZmZzZXQ7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKENv
bnN0cmFpbmVkVmFsdWUodmFsdWUsIFZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KG9mZnNldEZyb21T
UCkpKTsKKyAgICAgICAgfTsKKworICAgICAgICBhZGRBcmd1bWVudChqc0NhbGxlZSwgVmlydHVh
bFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIDApOworICAgICAgICBhZGRBcmd1bWVudChtX291
dC5jb25zdEludDMyKG51bUFyZ3MpLCBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRD
b3VudCksIFBheWxvYWRPZmZzZXQpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtQXJnczsgKytpKQorICAgICAgICAgICAgYWRkQXJndW1lbnQobG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEgKyBpKSksIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
LCAwKTsKKworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRj
aHBvaW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50
cyk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2VwdGlv
bkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMocGF0
Y2hwb2ludCk7CisgICAgICAgIAorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVy
U2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2Ji
ZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKKyAgICAg
ICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAg
IFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYg
cGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChj
b2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVF
eGl0Q3JlYXRpb25Gb3JVbndpbmQocGFyYW1zLCBjYWxsU2l0ZUluZGV4KTsKKworICAgICAgICAg
ICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihjYWxsU2l0ZUluZGV4LmJpdHMoKSksCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6dGFnRm9yKFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50
KSkpOworCisgICAgICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworCisgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFy
Z2V0VG9DaGVjaywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKDApKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbCA9
IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25l
ID0gaml0Lmp1bXAoKTsKKworICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisK
KyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2Fs
bExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0VXBDYWxsKAor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENvbnN0cnVjdCA/IENhbGxMaW5rSW5m
bzo6Q29uc3RydWN0IDogQ2FsbExpbmtJbmZvOjpDYWxsLAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKC1wYXJhbXMucHJvYygpLmZyYW1lU2l6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRv
cikuY29kZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dD
YWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93
Q2FsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
KHRhcmdldFRvQ2hlY2spLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bG9jYXRpb25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVUYWlsQ2FsbCgpCisgICAgeworICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOworICAgICAgICB1bnNpZ25lZCBudW1BcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4o
KSAtIDE7CisKKyAgICAgICAgTFZhbHVlIGpzQ2FsbGVlID0gbG93SlNWYWx1ZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdhbnQgQjMgdG8g
Z2l2ZSB1cyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB1c2luZyB3aGF0ZXZlciBtZWNoYW5pc20gaXQg
dGhpbmtzIGlzCisgICAgICAgIC8vIGNvbnZlbmllbnQuIFRoZSBnZW5lcmF0b3IgdGhlbiBzaHVm
ZmxlcyB0aG9zZSBhcmd1bWVudHMgaW50byBvdXIgb3duIGNhbGwgZnJhbWUsCisgICAgICAgIC8v
IGRlc3Ryb3lpbmcgb3VyIGZyYW1lIGluIHRoZSBwcm9jZXNzLgorCisgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIGV4Y2VwdGlvbnMu
IEEgdGFpbCBjYWxsIGlzIG9ubHkgYQorICAgICAgICAvLyB0YWlsIGNhbGwgaWYgaXQgaXMgbm90
IGluc2lkZSBhIHRyeSBibG9jay4KKworICAgICAgICBWZWN0b3I8Q29uc3RyYWluZWRWYWx1ZT4g
YXJndW1lbnRzOworCisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZShq
c0NhbGxlZSwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpKTsKKworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytpKSB7CisgICAgICAgICAgICAvLyBOb3Rl
OiB3ZSBjb3VsZCBsZXQgdGhlIHNodWZmbGVyIGRvIGJveGluZyBmb3IgdXMsIGJ1dCBpdCdzIG5v
dCBzdXBlciBjbGVhciB0aGF0IHRoaXMKKyAgICAgICAgICAgIC8vIHdvdWxkIGJlIGJldHRlci4g
QWxzbywgaWYgd2Ugd2FudGVkIHRvIGRvIHRoYXQsIHRoZW4gd2UnZCBoYXZlIHRvIHRlYWNoIHRo
ZSBzaHVmZmxlcgorICAgICAgICAgICAgLy8gdGhhdCAzMi1iaXQgdmFsdWVzIGNvdWxkIGxhbmQg
YXQgNC1ieXRlIGFsaWdubWVudCBidXQgbm90IDgtYnl0ZSBhbGlnbm1lbnQuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIENvbnN0cmFpbmVkVmFsdWUgY29uc3RyYWluZWRWYWx1ZSgKKyAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSArIGkpKSwK
KyAgICAgICAgICAgICAgICBWYWx1ZVJlcDo6V2FybUFueSk7CisgICAgICAgICAgICBhcmd1bWVu
dHMuYXBwZW5kKGNvbnN0cmFpbmVkVmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kVmVjdG9yKGFyZ3VtZW50cyk7CisKKyAgICAgICAgLy8gUHJldmVu
dCBhbnkgb2YgdGhlIGFyZ3VtZW50cyBmcm9tIHVzaW5nIHRoZSBzY3JhdGNoIHJlZ2lzdGVyLgor
ICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyRWFybHkoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRj
aFJlZ2lzdGVycygpKTsKKworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIHRlbGwgdGhlIHBh
dGNocG9pbnQgdGhhdCB3ZSB3aWxsIGNsb2JiZXIgcmVnaXN0ZXJzLCBzaW5jZSB3ZSB3b24ndCBy
ZXR1cm4KKyAgICAgICAgLy8gYW55d2F5LgorCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
biA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKTsKKyAgICAgICAgU3RhdGUqIHN0
YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAg
ICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlv
blBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGVJbmRleCA9IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luKTsKKworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVE
YXRhIHNodWZmbGVEYXRhOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9
IHN0YXRlLT5qaXRDb2RlLT5jb21tb24uZnJhbWVSZWdpc3RlckNvdW50OworICAgICAgICAgICAg
ICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKEdQUkluZm86OnJl
Z1QwLCBEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUFyZ3M7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5hcHBlbmQocGFyYW1zWzEgKyBpXS5yZWNvdmVyeUZvckpTVmFsdWUoKSk7CisKKyAgICAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoaml0LmNvZGVCbG9j
aygpKTsKKworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKKworICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5mbzo6cmVnVDAsIHRh
cmdldFRvQ2hlY2ssCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cigwKSk7CisKKyAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZs
ZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKGpp
dCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworCisgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworCisgICAg
ICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFll
cywgdGhpcyBpcyByZWFsbHkgbmVjZXNzYXJ5LiBZb3UgY291bGQgdGhyb3cgYW4gZXhjZXB0aW9u
IGluIGEgaG9zdCBjYWxsIG9uIHRoZQorICAgICAgICAgICAgICAgIC8vIHNsb3cgcGF0aC4gVGhh
dCdsbCByb3V0ZSB1cyB0byBsb29rdXBFeGNlcHRpb25IYW5kbGVyKCksIHdoaWNoIHVud2luZHMg
c3RhcnRpbmcKKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBjYWxsIHNpdGUgaW5kZXggb2Yg
b3VyIGZyYW1lLiBCYWQgdGhpbmdzIGhhcHBlbiBpZiBpdCdzIG5vdCBzZXQuCisgICAgICAgICAg
ICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CisKKyAgICAgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBzbG93UGF0aFNodWZmbGVy
KGppdCwgc2h1ZmZsZURhdGEpOworICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1ZmZsZXIuc2V0
Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAg
ICAgICAgICBzbG93UGF0aFNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOworCisgICAgICAg
ICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxMaW5rSW5m
byksIEdQUkluZm86OnJlZ1QyKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
c2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgICAgICAgICAgICAgIGppdC5hYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKworICAgICAgICAgICAgICAgIGNh
bGxMaW5rSW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6VGFpbENhbGwsIGNvZGVPcmlnaW4s
IEdQUkluZm86OnJlZ1QwKTsKKworICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAg
ICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbGlua0NhbGwgPQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIudm0oKS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlua0NhbGwuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2Nh
dGlvbnMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9m
TmVhckNhbGwoc2xvd0NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZih0YXJnZXRUb0NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgbV9vdXQudW5y
ZWFjaGFibGUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0
VmFyYXJncygpCisgICAgeworICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOworICAgICAgICBM
VmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgdGhpc0FyZyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIAor
ICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBudWxscHRyOworICAgICAgICBib29sIGZvcndh
cmRpbmcgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewor
ICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICBqc0FyZ3VtZW50cyA9IGxvd0pTVmFsdWUo
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNh
c2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICBmb3J3YXJkaW5nID0gdHJ1
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBv
aW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisKKyAgICAgICAgLy8gQXBwZW5kIHRoZSBm
b3JtcyBvZiB0aGUgYXJndW1lbnRzIHRoYXQgd2Ugd2lsbCB1c2UgYmVmb3JlIGFueSBjbG9iYmVy
aW5nIGhhcHBlbnMuCisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChqc0NhbGxlZSwgVmFsdWVS
ZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBpZiAoanNBcmd1bWVudHMpCisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIoanNBcmd1bWVudHMpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIodGhpc0FyZyk7CisKKyAgICAgICAg
aWYgKCFmb3J3YXJkaW5nKSB7CisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZW0gYWdhaW4g
Zm9yIGFmdGVyIGNsb2JiZXJpbmcuIE5vdGUgdGhhdCB0aGUgY29tcGlsZXIgbWF5IGFzayB1cyB0
byB1c2UgYQorICAgICAgICAgICAgLy8gZGlmZmVyZW50IHJlZ2lzdGVyIGZvciB0aGUgbGF0ZSBm
b3IgdGhlIHBvc3QtY2xvYmJlcmluZyB2ZXJzaW9uIG9mIHRoZSB2YWx1ZS4gVGhpcyBnaXZlcwor
ICAgICAgICAgICAgLy8gdGhlIGNvbXBpbGVyIGEgY2hhbmNlIHRvIHNwaWxsIHRoZXNlIHZhbHVl
cyB3aXRob3V0IGhhdmluZyB0byBidXJuIGFueSBjYWxsZWUtc2F2ZXMuCisgICAgICAgICAgICBw
YXRjaHBvaW50LT5hcHBlbmQoanNDYWxsZWUsIFZhbHVlUmVwOjpMYXRlQ29sZEFueSk7CisgICAg
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQoanNBcmd1bWVudHMsIFZhbHVlUmVwOjpMYXRlQ29s
ZEFueSk7CisgICAgICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQodGhpc0FyZywgVmFsdWVSZXA6
OkxhdGVDb2xkQW55KTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhj
ZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQorICAgICAgICAgICAgcHJlcGFyZVBhdGNo
cG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOworICAgICAgICAKKyAgICAgICAgcGF0Y2hw
b2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOworICAg
ICAgICBwYXRjaHBvaW50LT5jbG9iYmVyTGF0ZShSZWdpc3RlclNldDo6dm9sYXRpbGVSZWdpc3Rl
cnNGb3JKU0NhbGwoKSk7CisgICAgICAgIHBhdGNocG9pbnQtPnJlc3VsdENvbnN0cmFpbnQgPSBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKworICAgICAgICAvLyBUaGlz
IGlzIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBjYWxsIGFyZyBhcmVhIHN0YWNrIHNwYWNlIHRoYXQg
YWxsIEpTLT5KUyBjYWxscyBhbHdheXMgaGF2ZS4KKyAgICAgICAgdW5zaWduZWQgbWluaW11bUpT
Q2FsbEFyZWFTaXplID0KKyAgICAgICAgICAgIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArCisg
ICAgICAgICAgICBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygp
LCA1ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSk7CisKKyAgICAgICAgbV9wcm9jLnJlcXVlc3RD
YWxsQXJnQXJlYVNpemUobWluaW11bUpTQ2FsbEFyZWFTaXplKTsKKyAgICAgICAgCisgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUo
KTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisgICAgICAgIHBhdGNocG9p
bnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAg
QWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworICAgICAg
ICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLT5qaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChjb2RlT3Jp
Z2luKTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNl
cHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4
aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgZXhjZXB0
aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRl
SW5kZXgpOworCisgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoVmlydHVhbFJlZ2lzdGVyKEpT
U3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CisKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAg
ICAgICAgICAgICAgQ2FsbFZhcmFyZ3NEYXRhKiBkYXRhID0gbm9kZS0+Y2FsbFZhcmFyZ3NEYXRh
KCk7CisKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhcmdJbmRleCA9IDE7CisgICAgICAgICAg
ICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IHBhcmFtc1thcmdJbmRleCsrXS5ncHIoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoY2FsbGVlR1BSID09IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgYXJndW1lbnRzR1BSID0ganNBcmd1bWVudHMgPyBwYXJhbXNbYXJnSW5k
ZXgrK10uZ3ByKCkgOiBJbnZhbGlkR1BSUmVnOworICAgICAgICAgICAgICAgIEdQUlJlZyB0aGlz
R1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOworCisgICAgICAgICAgICAgICAgQjM6OlZh
bHVlUmVwIGNhbGxlZUxhdGVSZXA7CisgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIGFyZ3Vt
ZW50c0xhdGVSZXA7CisgICAgICAgICAgICAgICAgQjM6OlZhbHVlUmVwIHRoaXNMYXRlUmVwOwor
ICAgICAgICAgICAgICAgIGlmICghZm9yd2FyZGluZykgeworICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBub3QgZm9yd2FyZGluZyB0aGVuIHdlJ2xsIG5lZWQgY2FsbGVlLCBhcmd1bWVu
dHMsIGFuZCB0aGlzIGFmdGVyIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgcG90ZW50
aWFsbHkgY2xvYmJlcmVkIGNhbGxlZUdQUiwgYXJndW1lbnRzR1BSLCBhbmQgdGhpc0dQUi4gT3Vy
IHRlY2huaXF1ZQorICAgICAgICAgICAgICAgICAgICAvLyBmb3IgdGhpcyBpcyB0byBzdXBwbHkg
YWxsIG9mIHRob3NlIG9wZXJhbmRzIGFzIGxhdGUgdXNlcyBpbiBhZGRpdGlvbiB0bworICAgICAg
ICAgICAgICAgICAgICAvLyBzcGVjaWZ5aW5nIHRoZW0gYXMgZWFybHkgdXNlcy4gSXQncyBwb3Nz
aWJsZSB0aGF0IHRoZSBsYXRlIHVzZSB1c2VzIGEgc3BpbGwKKyAgICAgICAgICAgICAgICAgICAg
Ly8gd2hpbGUgdGhlIGVhcmx5IHVzZSB1c2VzIGEgcmVnaXN0ZXIsIGFuZCBpdCdzIHBvc3NpYmxl
IGZvciB0aGUgbGF0ZSBhbmQgZWFybHkKKyAgICAgICAgICAgICAgICAgICAgLy8gdXNlcyB0byB1
c2UgZGlmZmVyZW50IHJlZ2lzdGVycy4gV2UgZG8ga25vdyB0aGF0IHRoZSBsYXRlIHVzZXMgaW50
ZXJmZXJlIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgLy8gYWxsIHZvbGF0aWxlIHJlZ2lzdGVy
cyBhbmQgc28gd29uJ3QgdXNlIHRob3NlLCBidXQgdGhlIGVhcmx5IHVzZXMgbWF5IHVzZQorICAg
ICAgICAgICAgICAgICAgICAvLyB2b2xhdGlsZSByZWdpc3RlcnMgYW5kIGluIHRoZSBjYXNlIG9m
IGNhbGxlZUdQUiwgaXQncyBwaW5uZWQgdG8gcmVnVDAgc28gaXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gZGVmaW5pdGVseSB3aWxsLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2ZSB0byBiZSBzdXBlciBjYXJlZnVsIHdpdGgg
dGhlc2UuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZQorICAgICAgICAgICAgICAgICAgICAvLyB1
c2UgYSBzaHVmZmxpbmcgb2YgdGhlIHJlZ2lzdGVycyB1c2VkIGZvciBjYWxsZWVHUFIsIGFyZ3Vt
ZW50c0dQUiwgYW5kCisgICAgICAgICAgICAgICAgICAgIC8vIHRoaXNHUFIuIElmIHRoYXQgaGFw
cGVucyBhbmQgd2UgZG8gZm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICBjYWxsZWVMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgY2Fs
bGVlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFyZ3VtZW50c0xhdGVSZXAuZW1p
dFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOworICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGVuIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGdhcmJhZ2UgaWYgY2Fs
bGVlTGF0ZVJlcC5ncHIoKSA9PSBhcmd1bWVudHNHUFIgYW5kCisgICAgICAgICAgICAgICAgICAg
IC8vIGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgPT0gY2FsbGVlR1BSLgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhIHZhcmlldHkgb2YgdGhpbmdz
IHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZy4gRm9yIGV4YW1wbGUsIHdlIHVzZQorICAg
ICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHNMYXRlUmVwIGJlZm9yZSBuZWVkaW5nIHRoZSBv
dGhlciB0d28gYW5kIGFmdGVyIHdlJ3ZlIGFscmVhZHkgc3RvcHBlZAorICAgICAgICAgICAgICAg
ICAgICAvLyB1c2luZyB0aGUgKkdQUnMuIEFsc28sIHdlIHBpbiBjYWxsZWVHUFIgdG8gcmVnVDAs
IGFuZCByZWx5IG9uIHRoZSBmYWN0IHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhlICpM
YXRlUmVwcyBjYW5ub3QgdXNlIHZvbGF0aWxlIHJlZ2lzdGVycyAoc28gdGhleSBjYW5ub3QgYmUg
cmVnVDAsIHNvCisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZUdQUiAhPSBhcmd1bWVudHNM
YXRlUmVwLmdwcigpIGFuZCBjYWxsZWVHUFIgIT0gdGhpc0xhdGVSZXAuZ3ByKCkpLgorICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBBbiBhbHRlcm5hdGl2ZSB3
b3VsZCBoYXZlIGJlZW4gdG8ganVzdCB1c2UgZWFybHkgdXNlcyBhbmQgZWFybHktY2xvYmJlciBh
bGwKKyAgICAgICAgICAgICAgICAgICAgLy8gdm9sYXRpbGUgcmVnaXN0ZXJzLiBCdXQgdGhhdCB3
b3VsZCBmb3JjZSBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgaW50bworICAgICAgICAgICAg
ICAgICAgICAvLyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgZXZlbiBpZiB3ZSBoYXZlIHRvIHNwaWxs
IHRoZW0uIFdlIGRvbid0IHdhbnQgc3BpbGxpbmcgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8g
dXNlIHVwIHRocmVlIGNhbGxlZS1zYXZlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gVEw7RFI6IFRoZSB3YXkgd2UgdXNlIExhdGVSZXBzIGhlcmUgaXMg
ZGFuZ2Vyb3VzIGFuZCBiYXJlbHkgd29ya3MgYnV0IGFjaGlldmVzCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNvbWUgZGVzaXJhYmxlIHBlcmZvcm1hbmNlIHByb3BlcnRpZXMsIHNvIGRvbid0IG1p
c3Rha2UgdGhlIGNsZXZlcm5lc3MgZm9yCisgICAgICAgICAgICAgICAgICAgIC8vIGVsZWdhbmNl
LgorICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4Kytd
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4
KytdOworICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJlcCA9IHBhcmFtc1thcmdJbmRleCsr
XTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBHZXQgc29tZSBzY3Jh
dGNoIHJlZ2lzdGVycy4KKyAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
OworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMubWVyZ2UoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICAgICAgdXNl
ZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVHUFIpOworICAgICAgICAgICAg
ICAgIGlmIChhcmd1bWVudHNHUFIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgICAgICAg
ICAgdXNlZFJlZ2lzdGVycy5zZXQoYXJndW1lbnRzR1BSKTsKKyAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLnNldCh0aGlzR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlTGF0ZVJl
cC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChjYWxsZWVM
YXRlUmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJndW1lbnRzTGF0ZVJlcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNldChhcmd1bWVudHNMYXRl
UmVwLnJlZygpKTsKKyAgICAgICAgICAgICAgICBpZiAodGhpc0xhdGVSZXAuaXNSZWcoKSkKKyAg
ICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5zZXQodGhpc0xhdGVSZXAucmVnKCkpOwor
ICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciBhbGxvY2F0b3IodXNlZFJl
Z2lzdGVycyk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gYWxsb2NhdG9y
LmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BS
MiA9IGFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUjMgPSBmb3J3YXJkaW5nID8gYWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQ
UigpIDogSW52YWxpZEdQUlJlZzsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCghYWxs
b2NhdG9yLm51bWJlck9mUmV1c2VkUmVnaXN0ZXJzKCkpOworCisgICAgICAgICAgICAgICAgYXV0
byBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNrID0gWyZdICh2b2lkKiBjYWxsZWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNhbGxlZSks
IEdQUkluZm86Om5vblByZXNlcnZlZE5vbkFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmNhbGwoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uQXJndW1lbnRHUFIpOworICAgICAg
ICAgICAgICAgICAgICBleGNlcHRpb25zLT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjayhB
c3NlbWJseUhlbHBlcnM6Ok5vcm1hbEV4Y2VwdGlvbkNoZWNrLCBBc3NlbWJseUhlbHBlcnM6OkZh
ckp1bXBXaWR0aCkpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRv
IGFkanVzdFN0YWNrID0gWyZdIChHUFJSZWcgYW1vdW50KSB7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgYW1vdW50LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgdW5zaWduZWQgb3JpZ2luYWxTdGFj
a0hlaWdodCA9IHBhcmFtcy5wcm9jKCkuZnJhbWVTaXplKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZm9yd2FyZGluZykgeworICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgc2xvd0Nhc2U7CisgICAgICAgICAgICAgICAg
ICAgIGVtaXRTZXR1cFZhcmFyZ3NGcmFtZUZhc3RDYXNlKGppdCwgc2NyYXRjaEdQUjIsIHNjcmF0
Y2hHUFIxLCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjMsIG5vZGUtPmNoaWxkMigpLT5vcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLCBkYXRhLT5maXJzdFZhckFyZ09mZnNldCwgc2xvd0Nh
c2UpOworCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0
Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2UubGluaygmaml0KTsKKyAgICAg
ICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzRXhlY1N0YXRlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxXaXRoRXhjZXB0aW9uQ2hlY2soYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKSk7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hYm9ydFdpdGhSZWFzb24oREZHVmFyYXJnc1Rocm93aW5nUGF0aERpZE5vdFRocm93KTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0
KTsKKworICAgICAgICAgICAgICAgICAgICBhZGp1c3RTdGFjayhzY3JhdGNoR1BSMik7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIob3JpZ2luYWxTdGFja0hlaWdodCAvIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpLCBzY3JhdGNoR1BSMSk7CisgICAgICAgICAgICAgICAgICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzR1BSLCBzY3JhdGNoR1BSMSwgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQpKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FsbFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJh
dGlvblNpemVGcmFtZUZvclZhcmFyZ3MpKTsKKworICAgICAgICAgICAgICAgICAgICBqaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgc2NyYXRjaEdQUjEpOworICAgICAgICAgICAgICAg
ICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihvcmlnaW5hbFN0YWNrSGVp
Z2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hHUFIyKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGFyZ3VtZW50c0dQUik7
CisgICAgICAgICAgICAgICAgICAgIGVtaXRTZXRWYXJhcmdzRnJhbWUoaml0LCBzY3JhdGNoR1BS
MSwgZmFsc2UsIHNjcmF0Y2hHUFIyLCBzY3JhdGNoR1BSMik7CisgICAgICAgICAgICAgICAgICAg
IGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLW1pbmltdW1KU0NhbGxBcmVh
U2l6ZSksIHNjcmF0Y2hHUFIyLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShzY3Jh
dGNoR1BSMiwgYXJndW1lbnRzR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihkYXRhLT5m
aXJzdFZhckFyZ09mZnNldCksIHNjcmF0Y2hHUFIxKTsKKyAgICAgICAgICAgICAgICAgICAgY2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblNldHVwVmFy
YXJnc0ZyYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBh
ZGp1c3RTdGFjayhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisKKyAgICAgICAgICAgICAgICAg
ICAgY2FsbGVlTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIEdQUkluZm86OnJlZ1QwKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1heSBub3QgZW1pdCBjb2RlIGlmIHRoaXNHUFIgZ290
IGEgY2FsbGVlLXNhdmUuIEFsc28sIHdlJ3JlIGd1YXJhbnRlZWQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gdGhhdCB0aGlzR1BSICE9IEdQUkluZm86OnJlZ1QwIGJlY2F1c2UgcmVnVDAgaW50ZXJm
ZXJlcyB3aXRoIGl0LgorICAgICAgICAgICAgICAgICAgICB0aGlzTGF0ZVJlcC5lbWl0UmVzdG9y
ZShqaXQsIHRoaXNHUFIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgQ0NhbGxIZWxwZXJzOjpj
YWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlNjQodGhpc0dQUiwgQ0NhbGxIZWxwZXJzOjpjYWxsZWVBcmd1bWVudFNsb3QoMCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGU7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0VmFyYXJn
cyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKQorICAgICAgICAgICAg
ICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyB8fCBub2Rl
LT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpCisgICAgICAgICAgICAgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZh
cmFyZ3M7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYm9vbCBpc1RhaWxDYWxs
ID0gQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihjYWxsVHlwZSkgPT0gQ2FsbE1vZGU6OlRhaWw7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFi
ZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
c2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgZmFzdENhbGw7
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKGlzVGFpbENhbGwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaml0
LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgICAgICAgICAgICAgZmFzdENhbGwg
PSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZG9uZSA9IGppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIHNsb3dQYXRoLmxpbmsoJmppdCk7CisKKyAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkKKyAgICAgICAgICAgICAgICAgICAgaml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOworICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQorICAgICAgICAgICAgICAg
ICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJmppdCk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwo
Y2FsbFR5cGUsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgR1BSSW5mbzo6cmVnVDApOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1vcmlnaW5hbFN0YWNrSGVpZ2h0KSwKKyAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVy
JiBsaW5rQnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbGlua0NhbGwgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
dm0oKS5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLmNvZGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhzbG93Q2FsbCwgRnVuY3Rpb25QdHIobGlu
a0NhbGwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldENhbGxMb2NhdGlvbnMoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
c2xvd0NhbGwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZih0YXJnZXRUb0NoZWNrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChmYXN0Q2FsbCkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAg
ICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgorICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9p
bnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlTG9hZFZhcmFyZ3MoKQorICAgIHsKKyAgICAgICAgTG9hZFZhcmFyZ3NEYXRhKiBk
YXRhID0gbV9ub2RlLT5sb2FkVmFyYXJnc0RhdGEoKTsKKyAgICAgICAgTFZhbHVlIGpzQXJndW1l
bnRzID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgCisgICAgICAgIExW
YWx1ZSBsZW5ndGggPSB2bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQzMiwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvblNpemVPZlZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwganNBcmd1bWVudHMs
CisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPm9mZnNldCkpOworICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgd2Ugd2lsbCBjYWxsIGFu
IGVmZmVjdGZ1bCBsZW5ndGggcHJvcGVydHkgdHdpY2UuIFRoaXMgaXMgc2FmZQorICAgICAgICAv
LyBmcm9tIHRoZSBzdGFuZHBvaW50IG9mIHRoZSBWTSdzIGludGVncml0eSwgYnV0IGl0J3Mgc3Vi
dGx5IHdyb25nIGZyb20gYSBzcGVjIGNvbXBsaWFuY2UKKyAgICAgICAgLy8gc3RhbmRwb2ludC4g
VGhlIGJlc3Qgc29sdXRpb24gd291bGQgYmUgb25lIHdoZXJlIHdlIGNhbiBleGl0ICppbnRvKiB0
aGUgb3BfY2FsbF92YXJhcmdzIHJpZ2h0CisgICAgICAgIC8vIHBhc3QgdGhlIHNpemluZy4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTQ0OAor
ICAgICAgICAKKyAgICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQo
bGVuZ3RoLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAg
IFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAorICAgICAgICAgICAgbV9vdXQu
YWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5saW1pdCkp
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlMzIobGVuZ3RoSW5jbHVkaW5nVGhpcywg
cGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiBUaGlzIGNvbXB1dGF0aW9uIGlzIHJhdGhlciBzaWxseS4gSWYgb3BlcmF0aW9uTGFvZFZh
cmFyZ3MganVzdCB0b29rIGEgcG9pbnRlciBpbnN0ZWFkCisgICAgICAgIC8vIG9mIGEgVmlydHVh
bFJlZ2lzdGVyLCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGRvIHRoaXMuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NjAKKyAgICAgICAgTFZhbHVl
IG1hY2hpbmVTdGFydCA9IG1fb3V0LmxTaHIoCisgICAgICAgICAgICBtX291dC5zdWIoYWRkcmVz
c0ZvcihkYXRhLT5tYWNoaW5lU3RhcnQub2Zmc2V0KCkpLnZhbHVlKCksIG1fY2FsbEZyYW1lKSwK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsKKyAgICAgICAgCisgICAgICAgIHZt
Q2FsbCgKKyAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTG9hZFZhcmFyZ3MpLCBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgIG1fb3V0LmNhc3RUb0lu
dDMyKG1hY2hpbmVTdGFydCksIGpzQXJndW1lbnRzLCBtX291dC5jb25zdEludDMyKGRhdGEtPm9m
ZnNldCksCisgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bWFuZGF0
b3J5TWluaW11bSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVGb3J3YXJkVmFyYXJn
cygpCisgICAgeworICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9
IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CisgICAg
ICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoID0gZ2V0QXJndW1lbnRzTGVuZ3RoKGlubGluZUNh
bGxGcmFtZSkudmFsdWU7CisgICAgICAgIExWYWx1ZSBsZW5ndGhJbmNsdWRpbmdUaGlzID0gbV9v
dXQuYWRkKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigxIC0gZGF0YS0+b2Zmc2V0KSk7CisgICAg
ICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBWYXJhcmdzT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxlbmd0aEluY2x1ZGlu
Z1RoaXMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+bGltaXQpKSk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5zdG9yZTMyKGxlbmd0aEluY2x1ZGluZ1RoaXMsIHBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUNvdW50KSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc291cmNlU3RhcnQgPSBnZXRB
cmd1bWVudHNTdGFydChpbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBMVmFsdWUgdGFyZ2V0U3Rh
cnQgPSBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVTdGFydCkudmFsdWUoKTsKKworICAgICAgICBM
QmFzaWNCbG9jayB1bmRlZmluZWRMb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJk
VmFyYXJncyB1bmRlZmluZWQgbG9vcCBib2R5IikpOworICAgICAgICBMQmFzaWNCbG9jayBtYWlu
TG9vcEVudHJ5ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxv
b3AgZW50cnkiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG1haW5Mb29wID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJGb3J3YXJkVmFyYXJncyBtYWluIGxvb3AgYm9keSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJGb3J3YXJkVmFy
YXJncyBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVuZ3RoQXNQ
dHIgPSBtX291dC56ZXJvRXh0UHRyKGxlbmd0aCk7CisgICAgICAgIExWYWx1ZSBsb29wQm91bmRW
YWx1ZSA9IG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPm1hbmRhdG9yeU1pbmltdW0pOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBsb29wQm91bmQgPSBtX291dC5hbmNob3IobG9vcEJvdW5kVmFsdWUp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5hYm92ZShsb29wQm91
bmRWYWx1ZSwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShtYWlu
TG9vcEVudHJ5KSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKHVuZGVmaW5lZExvb3AsIG1haW5Mb29wRW50cnkpOworICAgICAgICBMVmFs
dWUgcHJldmlvdXNJbmRleCA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGxvb3BCb3VuZCk7Cisg
ICAgICAgIExWYWx1ZSBjdXJyZW50SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9v
dXQuaW50UHRyT25lKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2NCgKKyAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwKKyAgICAgICAgICAg
IG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywgdGFyZ2V0U3RhcnQsIGN1cnJlbnRJ
bmRleCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBtX291dC5hbmNob3Io
Y3VycmVudEluZGV4KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0lu
ZGV4LCBuZXh0SW5kZXgpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5hYm92ZShjdXJyZW50SW5kZXgsIGxlbmd0aEFzUHRyKSwgdW5zdXJlKHVuZGVmaW5lZExvb3Ap
LCB1bnN1cmUobWFpbkxvb3BFbnRyeSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obWFpbkxvb3BFbnRyeSwgbWFpbkxvb3ApOworICAgICAgICBsb29wQm91bmQgPSBtX291dC5h
bmNob3IobGVuZ3RoQXNQdHIpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChs
ZW5ndGhBc1B0ciksIHVuc3VyZShtYWluTG9vcCksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1haW5Mb29wLCBjb250aW51YXRpb24pOwor
ICAgICAgICBwcmV2aW91c0luZGV4ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgbG9vcEJvdW5k
KTsKKyAgICAgICAgY3VycmVudEluZGV4ID0gbV9vdXQuc3ViKHByZXZpb3VzSW5kZXgsIG1fb3V0
LmludFB0ck9uZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0LmxvYWQ2NCgKKyAgICAg
ICAgICAgIG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICBtX2hlYXBzLnZhcmlhYmxl
cywgc291cmNlU3RhcnQsCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGN1cnJlbnRJbmRleCwg
bV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+b2Zmc2V0KSkpKTsKKyAgICAgICAgbV9vdXQuc3RvcmU2
NCh2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwg
Y3VycmVudEluZGV4KSk7CisgICAgICAgIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihjdXJyZW50
SW5kZXgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5l
eHRJbmRleCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc051bGwoY3VycmVudEluZGV4
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShtYWluTG9vcCkpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlSnVtcCgpCisgICAgeworICAgICAgICBtX291dC5qdW1wKGxvd0Jsb2Nr
KG1fbm9kZS0+dGFyZ2V0QmxvY2soKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVC
cmFuY2goKQorICAgIHsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgYm9vbGlm
eShtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIFdlaWdodGVkVGFyZ2V0KAorICAgICAg
ICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+YnJhbmNoRGF0YSgpLT50YWtlbi5ibG9jayksCisg
ICAgICAgICAgICAgICAgbV9ub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmNvdW50KSwKKyAgICAg
ICAgICAgIFdlaWdodGVkVGFyZ2V0KAorICAgICAgICAgICAgICAgIGxvd0Jsb2NrKG1fbm9kZS0+
YnJhbmNoRGF0YSgpLT5ub3RUYWtlbi5ibG9jayksCisgICAgICAgICAgICAgICAgbV9ub2RlLT5i
cmFuY2hEYXRhKCktPm5vdFRha2VuLmNvdW50KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29t
cGlsZVN3aXRjaCgpCisgICAgeworICAgICAgICBTd2l0Y2hEYXRhKiBkYXRhID0gbV9ub2RlLT5z
d2l0Y2hEYXRhKCk7CisgICAgICAgIHN3aXRjaCAoZGF0YS0+a2luZCkgeworICAgICAgICBjYXNl
IFN3aXRjaEltbTogeworICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAyPiBpbnRW
YWx1ZXM7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzd2l0Y2hPbkludHMgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaW50IGNhc2UiKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obV9vdXQu
bV9ibG9jaywgc3dpdGNoT25JbnRzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMlVz
ZTogeworICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChzd2l0
Y2hPbkludHMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7CisgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaXNJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0
Y2hJbW0gaXMgaW50IikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW50ID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoSW1tIGlzIG5vdCBpbnQiKSk7Cisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNEb3VibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgZG91YmxlIikpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExWYWx1ZSBib3hlZFZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihib3hlZFZhbHVl
KSwgdW5zdXJlKGlzTm90SW50KSwgdW5zdXJlKGlzSW50KSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzSW50LCBpc05vdEludCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50
VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMihib3hlZFZhbHVlKSkpOworICAg
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoc3dpdGNoT25JbnRzKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc05vdEludCwgaXNEb3VibGUpOworICAg
ICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgaXNDZWxsT3JN
aXNjKGJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAg
ICAgICAgICAgICB1c3VhbGx5KGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHJh
cmVseShpc0RvdWJsZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlzRG91YmxlLCBpbm5lckxhc3ROZXh0KTsKKyAgICAgICAgICAgICAgICBMVmFs
dWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZShib3hlZFZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgaW50SW5Eb3VibGUgPSBtX291dC5kb3VibGVUb0ludChkb3VibGVWYWx1ZSk7Cisg
ICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IoaW50SW5Eb3VibGUp
KTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmRvdWJsZUVxdWFsKG1fb3V0LmludFRvRG91YmxlKGludEluRG91YmxlKSwgZG91YmxlVmFs
dWUpLAorICAgICAgICAgICAgICAgICAgICB1bnN1cmUoc3dpdGNoT25JbnRzKSwgdW5zdXJlKGxv
d0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN3aXRjaE9uSW50cywgbGFzdE5leHQpOworICAg
ICAgICAgICAgYnVpbGRTd2l0Y2goZGF0YSwgbV9vdXQuaW50MzIsIG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW50VmFsdWVzKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogeworICAgICAgICAgICAgTFZhbHVlIHN0cmlu
Z1ZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHVz
ZSBzb21ldGhpbmcgb3RoZXIgdGhhbiB1bnN1cmUoKSBmb3IgdGhlIGJyYW5jaCB3ZWlnaHQKKyAg
ICAgICAgICAgIC8vIG9mIHRoZSBmYWxsVGhyb3VnaCBibG9jay4gVGhlIG1haW4gY2hhbGxlbmdl
IGlzIGp1c3QgdGhhdCB3ZSBoYXZlIG11bHRpcGxlCisgICAgICAgICAgICAvLyBicmFuY2hlcyB0
byBmYWxsVGhyb3VnaCBidXQgYSBzaW5nbGUgY291bnQsIHNvIHdlIHdvdWxkIG5lZWQgdG8gZGl2
dnkgaXQgdXAKKyAgICAgICAgICAgIC8vIGFtb25nIHRoZSBkaWZmZXJlbnQgbG93ZXJlZCBicmFu
Y2hlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjkwODIKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsKKyAgICAg
ICAgICAgICAgICBzdHJpbmdWYWx1ZSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgICAgIExWYWx1ZSB1bmJv
eGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIGNlbGwiKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gv
U3dpdGNoQ2hhciBpcyBzdHJpbmciKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc05vdENlbGwodW5ib3hlZFZh
bHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAg
dW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShpc0NlbGxD
YXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAg
ICAgICAgICAgIExWYWx1ZSBjZWxsVmFsdWUgPSB1bmJveGVkVmFsdWU7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBpc05vdFN0cmluZyhjZWxsVmFs
dWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAorICAgICAgICAgICAgICAgICAgICB1
bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzU3RyaW5n
Q2FzZSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGlzU3RyaW5nQ2FzZSwgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIHN0cmluZ1ZhbHVlID0g
Y2VsbFZhbHVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxlbmd0aElzMSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgbGVu
Z3RoIGlzIDEiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWVkUmVzb2x1dGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgcmVzb2x1dGlvbiIpKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIHJlc29sdmVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2hhciByZXNvbHZlZCIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlz
OEJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIgOGJpdCIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlN3aXRjaC9Td2l0Y2hDaGFyIDE2Yml0IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBjb250
aW51YXRpb24iKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAg
ICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSwK
KyAgICAgICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUpLAorICAgICAgICAgICAgICAgIHVu
c3VyZShsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUobGVuZ3RoSXMx
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obGVuZ3RoSXMxLCBuZWVkUmVzb2x1dGlvbik7CisgICAgICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2ssIDI+IHZhbHVlczsKKyAgICAgICAgICAgIExWYWx1ZSBmYXN0VmFs
dWUgPSBtX291dC5sb2FkUHRyKHN0cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsK
KyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKGZhc3RWYWx1ZSkpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChmYXN0VmFsdWUpLCByYXJlbHkobmVl
ZFJlc29sdXRpb24pLCB1c3VhbGx5KHJlc29sdmVkKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5lZWRSZXNvbHV0aW9uLCByZXNvbHZlZCk7CisgICAgICAgICAg
ICB2YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9v
dXQuaW50UHRyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUmVzb2x2ZVJvcGUpLCBtX2NhbGxG
cmFtZSwgc3RyaW5nVmFsdWUpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKHJlc29sdmVkKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ocmVzb2x2ZWQsIGlzOEJp
dCk7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCB2
YWx1ZXMpOworICAgICAgICAgICAgTFZhbHVlIGNoYXJhY3RlckRhdGEgPSBtX291dC5sb2FkUHRy
KHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgICAg
ICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
KSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFn
SXM4Qml0KCkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaXM4Qml0KSwgdW5zdXJlKGlzMTZC
aXQpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrLCAy
PiBjaGFyYWN0ZXJzOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0
KTsKKyAgICAgICAgICAgIGNoYXJhY3RlcnMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5sb2Fk
OFplcm9FeHQzMihjaGFyYWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnM4WzBdKSkpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBjb250aW51YXRpb24pOworICAgICAgICAgICAg
Y2hhcmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQxNlplcm9FeHQzMihjaGFy
YWN0ZXJEYXRhLCBtX2hlYXBzLmNoYXJhY3RlcnMxNlswXSkpKTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBidWlsZFN3aXRjaChk
YXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0LmludDMyLCBjaGFyYWN0ZXJzKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgU3dp
dGNoU3RyaW5nOiB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisgICAgICAgICAgICBjYXNlIFN0cmluZ0lkZW50VXNlOiB7CisgICAgICAgICAgICAg
ICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBsb3dTdHJpbmdJZGVudChtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2Fz
ZXM7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEtPmNhc2Vz
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IG1fb3V0
LmNvbnN0SW50UHRyKGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmluZ0ltcGwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJsb2NrID0gbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0u
dGFyZ2V0LmJsb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgV2VpZ2h0IHdlaWdodCA9IFdlaWdo
dChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpOworICAgICAgICAgICAgICAgICAgICBjYXNl
cy5hcHBlbmQoU3dpdGNoQ2FzZSh2YWx1ZSwgYmxvY2ssIHdlaWdodCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5zd2l0Y2hJbnN0
cnVjdGlvbigKKyAgICAgICAgICAgICAgICAgICAgc3RyaW5nSW1wbCwgY2FzZXMsIGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwKKyAgICAgICAgICAgICAgICAgICAgV2VpZ2h0KGRh
dGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBTdHJpbmdVc2U6IHsK
KyAgICAgICAgICAgICAgICBzd2l0Y2hTdHJpbmcoZGF0YSwgbG93U3RyaW5nKG1fbm9kZS0+Y2hp
bGQxKCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2NrID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5nIFVudHlwZWQgY2VsbCBjYXNlIikp
OworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQmxvY2sgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgVW50eXBlZCBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSks
CisgICAgICAgICAgICAgICAgICAgIHVuc3VyZShpc0NlbGxCbG9jayksIHVuc3VyZShsb3dCbG9j
ayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbEJsb2Nr
LCBpc1N0cmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBl
KG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5zdXJlKGlzU3RyaW5n
QmxvY2spLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdCbG9j
aywgbGFzdE5leHQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaFN0
cmluZyhkYXRhLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTd2l0Y2hDZWxsOiB7CisgICAgICAgICAg
ICBMVmFsdWUgY2VsbDsKKyAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2VsbFVzZTogeworICAgICAgICAgICAgICAgIGNl
bGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOiB7CisgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENlbGwgY2VsbCBjYXNlIikpOworICAgICAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICAgICAgaXNDZWxsKHZhbHVl
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgdW5z
dXJlKGNlbGxDYXNlKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSkp
OworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlKTsKKyAgICAgICAgICAg
ICAgICBjZWxsID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1
aWxkU3dpdGNoKG1fbm9kZS0+c3dpdGNoRGF0YSgpLCBtX291dC5pbnRQdHIsIGNlbGwpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9IH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBjb21waWxlUmV0dXJuKCkKKyAgICB7CisgICAgICAgIG1fb3V0LnJldChsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlRm9yY2VP
U1JFeGl0KCkKKyAgICB7CisgICAgICAgIHRlcm1pbmF0ZShJbmFkZXF1YXRlQ292ZXJhZ2UpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUaHJvdygpCisgICAgeworICAgICAgICB0ZXJt
aW5hdGUoVW5jb3VudGFibGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnZhbGlk
YXRpb25Qb2ludCgpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpKQorICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2
YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOworCisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOworICAgICAgICAKKyAgICAg
ICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsK
KyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGRlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOworICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9
IG1fb3JpZ2luOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRDb2xkQW55cyhidWlsZEV4aXRB
cmd1bWVudHMoZGVzY3JpcHRvciwgb3JpZ2luLmZvckV4aXQsIG5vVmFsdWUoKSkpOworICAgICAg
ICAKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7CisKKyAgICAgICAgcGF0Y2hw
b2ludC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIE1hY3JvQXNzZW1ibGVyIGtub3dzIG1vcmUgYWJvdXQgdGhpcyB0aGFuIEIz
IGRvZXMuIFRoZSB3YXRjaHBvaW50TGFiZWwoKSBtZXRob2QKKyAgICAgICAgICAgICAgICAvLyB3
aWxsIGVuc3VyZSB0aGF0IHRoaXMgaXMgZm9sbG93ZWQgYnkgYSBub3Agc2hhZG93IGJ1dCBvbmx5
IHdoZW4gdGhpcyBpcyBhY3R1YWxseQorICAgICAgICAgICAgICAgIC8vIG5lY2Vzc2FyeS4KKyAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGxhYmVsID0gaml0LndhdGNocG9pbnRM
YWJlbCgpOworCisgICAgICAgICAgICAgICAgUmVmUHRyPE9TUkV4aXRIYW5kbGU+IGhhbmRsZSA9
IGRlc2NyaXB0b3ItPmVtaXRPU1JFeGl0TGF0ZXIoCisgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIG9yaWdpbiwgcGFyYW1zKTsKKworICAgICAgICAg
ICAgICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlID0gc3RhdGUtPmppdENvZGUuZ2V0KCk7CisK
KyAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAgICAgIFs9
XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgSnVt
cFJlcGxhY2VtZW50IGp1bXBSZXBsYWNlbWVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobGFiZWwpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihoYW5kbGUtPmxhYmVsKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXRDb2RlLT5jb21tb24uanVtcFJlcGxhY2VtZW50cy5hcHBlbmQoanVtcFJl
cGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3VzIHRoaW5ncy4KKyAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc0xvY2FsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFk
c0xvY2FsU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgaG93IHdl
IHRlbGwgQjMgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGp1bXAgcmVwbGFjZW1lbnQuCisgICAg
ICAgIHBhdGNocG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgIAor
ICAgICAgICAvLyBJdCdzIG5vdCBwb3NzaWJsZSBmb3Igc29tZSBwcmlvciBicmFuY2ggdG8gZGV0
ZXJtaW5lIHRoZSBzYWZldHkgb2YgdGhpcyBvcGVyYXRpb24uIEl0J3MgYWx3YXlzCisgICAgICAg
IC8vIGZpbmUgdG8gZXhlY3V0ZSB0aGlzIG9uIHNvbWUgcGF0aCB0aGF0IHdvdWxkbid0IGhhdmUg
b3JpZ2luYWxseSBleGVjdXRlZCBpdCBiZWZvcmUKKyAgICAgICAgLy8gb3B0aW1pemF0aW9uLgor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLmNvbnRyb2xEZXBlbmRlbnQgPSBmYWxzZTsKKwor
ICAgICAgICAvLyBJZiB0aGlzIGZhbGxzIHRocm91Z2ggdGhlbiBpdCB3b24ndCB3cml0ZSBhbnl0
aGluZy4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXMgPSBIZWFwUmFuZ2UoKTsK
KworICAgICAgICAvLyBXaGVuIHRoaXMgYWJydXB0bHkgdGVybWluYXRlcywgaXQgY291bGQgcmVh
ZCBhbnkgaGVhcCBsb2NhdGlvbi4KKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkcyA9
IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUlzVW5kZWZp
bmVkKCkKKyAgICB7CisgICAgICAgIHNldEJvb2xlYW4oZXF1YWxOdWxsT3JVbmRlZmluZWQobV9u
b2RlLT5jaGlsZDEoKSwgQWxsQ2VsbHNBcmVGYWxzZSwgRXF1YWxVbmRlZmluZWQpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlSXNCb29sZWFuKCkKKyAgICB7CisgICAgICAgIHNldEJv
b2xlYW4oaXNCb29sZWFuKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlSXNOdW1i
ZXIoKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihpc051bWJlcihsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZUlzU3RyaW5nKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc1N0cmluZyBjZWxs
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiSXNTdHJpbmcgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFu
RmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3Vy
ZShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpc1N0cmluZyh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90
Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzT2Jq
ZWN0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiSXNPYmplY3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0IGNvbnRpbnVhdGlv
biIpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShp
c0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpc09iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIG5v
dENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc09i
amVjdE9yTnVsbCgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICAKKyAgICAgICAgRWRnZSBjaGlsZCA9IG1fbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQpOworICAgICAgICAKKyAgICAgICAgTEJhc2lj
QmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNl
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RnVuY3Rpb25DYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgb2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNP
YmplY3RPck51bGwgb2JqZWN0IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRo
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBzbG93IHBhdGgiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJ
c09iamVjdE9yTnVsbCBub3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGNlbGxDYXNlLCBub3RGdW5jdGlvbkNhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpc0Z1
bmN0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUo
Y2hpbGQpKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVu
Y3Rpb25DYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlv
bkNhc2UsIG9iamVjdENhc2UpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RPYmplY3RSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKKyAg
ICAgICAgICAgIHVuc3VyZShvYmplY3RDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob2JqZWN0Q2FzZSwgc2xvd1BhdGgpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBvYmplY3RSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0V4b3RpY0Zv
clR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAgICAgICAgICAgcmFyZWx5KHNs
b3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
Z2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0s
IHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cihtX291dC5ub3RaZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxD
YXNlLCBjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgbm90Q2VsbFJlc3VsdFZhbHVlID0g
bV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG5vdENlbGxSZXN1bHRWYWx1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAorICAgICAgICAgICAgbV9v
dXQuYm9vbGVhbiwKKyAgICAgICAgICAgIGlzRnVuY3Rpb25SZXN1bHQsIG5vdE9iamVjdFJlc3Vs
dCwgb2JqZWN0UmVzdWx0LCBzbG93UmVzdWx0LCBub3RDZWxsUmVzdWx0KTsKKyAgICAgICAgc2V0
Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJc0Z1bmN0aW9u
KCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAg
ICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjZWxsIGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiSXNGdW5jdGlvbiBub3QgZnVuY3Rpb24gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzRnVuY3Rpb24gc2xvdyBwYXRoIikp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIklzRnVuY3Rpb24gY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2Up
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3Zl
blR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwor
ICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhj
ZWxsQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZnVuY3Rp
b25SZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxk
KSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEZ1bmN0aW9u
Q2FzZSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RnVuY3Rpb25DYXNl
LCBzbG93UGF0aCk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG9iamVjdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAorICAg
ICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAg
ICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlv
biwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpKTsKKyAgICAgICAgICAgIH0sIHZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LnBoaSgKKyAgICAgICAgICAgIG1fb3V0LmJvb2xlYW4sIG5vdENlbGxSZXN1bHQs
IGZ1bmN0aW9uUmVzdWx0LCBvYmplY3RSZXN1bHQsIHNsb3dSZXN1bHQpOworICAgICAgICBzZXRC
b29sZWFuKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVR5cGVPZigpCisg
ICAgeworICAgICAgICBFZGdlIGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SlNWYWx1ZShjaGlsZCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlR5cGVPZiBjb250aW51
YXRpb24iKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3
QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2s+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBidWlsZFR5cGVPZigKKyAg
ICAgICAgICAgIGNoaWxkLCB2YWx1ZSwKKyAgICAgICAgICAgIFsmXSAoVHlwZW9mVHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHdlYWtQb2lu
dGVyKHZtKCkuc21hbGxTdHJpbmdzLnR5cGVTdHJpbmcodHlwZSkpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIHJlc3VsdHMpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjb21waWxlSW4oKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9k
ZTsKKyAgICAgICAgRWRnZSBiYXNlID0gbm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChiYXNlKTsKKyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2Rl
LT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJ
bXBsKCktPmlzQXRvbWljKCkpIHsKKyAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCog
c3RyID0gYml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1
ZUltcGwoKSk7CisgICAgICAgICAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihjZWxsKTsKKyAgICAgICAgICAgICAgICBwYXRjaHBvaW50LT5j
bG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7CisKKyAgICAgICAg
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgICAgICAgICBwYXRj
aHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dT
Y3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
cGFyYW1zWzFdLmdwcigpOworICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHBhcmFtc1swXS5ncHIoKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQuY29k
ZUJsb2NrKCktPmFkZFN0dWJJbmZvKEFjY2Vzc1R5cGU6OkluKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0dWJJbmZvLT5jYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5jb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmJhc2VHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KGJhc2VHUFIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLnZhbHVlR1BSID0gc3RhdGljX2Nhc3Q8aW50
OF90PihyZXN1bHRHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNo
LnVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKTsKKworICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIGp1bXAgPSBqaXQu
cGF0Y2hhYmxlSnVtcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpM
YWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
cy5hZGRMYXRlUGF0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9T
Y3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqdW1wLm1fanVtcC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIHNsb3dQYXRoQmVnaW4gPSBqaXQu
bGFiZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMsIG51bGxwdHIsIG9wZXJhdGlvbkluT3B0aW1pemUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHRHUFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHVi
SW5mbyksIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RyKSkuY2FsbCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aENhbGwpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUg
PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihk
b25lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8t
PnBhdGNoLmRlbHRhQ2FsbFRvSnVtcCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFJldHVybkxv
Y2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGlua0J1ZmZlci5sb2NhdGlvbk9mKGp1bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxv
Y2F0aW9uOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZv
LT5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0
dXJuTG9jYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhCZWdpbikpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0gCisKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0
Lm9wZXJhdGlvbihvcGVyYXRpb25HZW5lcmljSW4pLCBtX2NhbGxGcmFtZSwgY2VsbCwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZU92ZXJy
aWRlc0hhc0luc3RhbmNlKCkKKyAgICB7CisgICAgICAgIEpTRnVuY3Rpb24qIGRlZmF1bHRIYXNJ
bnN0YW5jZUZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmNlbGxPcGVyYW5k
KCktPnZhbHVlKCkpOworCisgICAgICAgIExWYWx1ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgZGVmYXVsdEhhc0luc3Rh
bmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBTeW1ib2wu
aGFzSW5zdGFuY2UgaXMgZGVmYXVsdCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPdmVycmlkZXNIYXNJbnN0YW5jZSBjb250aW51
YXRpb24iKSk7CisKKyAgICAgICAgLy8gVW5saWtlIGluIHRoZSBERkcsIHdlIGRvbid0IHdvcnJ5
IGFib3V0IGNsZWFuaW5nIHRoaXMgY29kZSB1cCBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBw
cm92ZW4gdGhlIGhhc0luc3RhbmNlVmFsdWUgaXMgYSBjb25zdGFudCBhcyBMTFZNIHNob3VsZCBm
aXggaXQgZm9yIHVzLgorCisgICAgICAgIEFTU0VSVCghbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkt
PmlzQ2VsbENvbnN0YW50KCkgfHwgZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPT0gbV9ub2Rl
LT5jaGlsZDIoKS5ub2RlKCktPmFzQ2VsbCgpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBu
b3REZWZhdWx0SGFzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRy
dWUpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1YWwoaGFzSW5zdGFuY2UsIG1f
b3V0LmNvbnN0SW50UHRyKGRlZmF1bHRIYXNJbnN0YW5jZUZ1bmN0aW9uKSksIHVuc3VyZShjb250
aW51YXRpb24pLCB1bnN1cmUoZGVmYXVsdEhhc0luc3RhbmNlKSk7CisKKyAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhkZWZhdWx0SGFzSW5zdGFuY2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQudGVzdElzWmVybzMyKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY29uc3RydWN0b3IsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGltcGxlbWVudHNEZWZhdWx0SGFzSW5z
dGFuY2VSZXN1bHQsIG5vdERlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCkpOworICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpCisgICAgeworICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICBCYWRUeXBlSW5mb0ZsYWdzLCBub1ZhbHVlKCksIDAsCisgICAgICAg
ICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJv
RXh0MzIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9G
bGFncyksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPnR5cGVJbmZv
T3BlcmFuZCgpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mKCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBjZWxsOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpCisgICAgICAgICAgICBjZWxsID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgcHJvdG90eXBlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkluc3Rh
bmNlT2YgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIGxvb3AiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFlldEluc3RhbmNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0YW5jZU9mIG5vdCB5ZXQg
aW5zdGFuY2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgY29uZGl0aW9uOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gVW50eXBlZFVzZSkKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IGlzQ2VsbChjZWxs
LCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIAorICAgICAgICBWYWx1
ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxz
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24sIHVuc3VyZShpc0NlbGxDYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBsb29wKTsKKyAgICAgICAgCisgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBub1ZhbHVlKCksIDAsIGlzTm90T2JqZWN0KHByb3RvdHlw
ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICAKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgb3JpZ2luYWxWYWx1ZSA9IG1fb3V0LmFuY2hvcihjZWxsKTsKKyAgICAgICAg
bV9vdXQuanVtcChsb29wKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3As
IG5vdFlldEluc3RhbmNlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQucGhpKG1fb3V0
LmludDY0LCBvcmlnaW5hbFZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRT
dHJ1Y3R1cmUodmFsdWUpOworICAgICAgICBMVmFsdWUgY3VycmVudFByb3RvdHlwZSA9IG1fb3V0
LmxvYWQ2NChzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX3Byb3RvdHlwZSk7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGlzSW5zdGFuY2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9v
bGVhblRydWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVh
bChjdXJyZW50UHJvdG90eXBlLCBwcm90b3R5cGUpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRp
bnVhdGlvbiksIHVuc3VyZShub3RZZXRJbnN0YW5jZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90WWV0SW5zdGFuY2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vdEluc3RhbmNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5G
YWxzZSk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkodmFsdWUsIG1fb3V0LmFuY2hv
cihjdXJyZW50UHJvdG90eXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoY3VycmVu
dFByb3RvdHlwZSksIHVuc3VyZShsb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldEJvb2xlYW4oCisgICAgICAgICAgICBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90
Q2VsbFJlc3VsdCwgaXNJbnN0YW5jZVJlc3VsdCwgbm90SW5zdGFuY2VSZXN1bHQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9tKCkKKyAgICB7CisgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSBjb25zdHJ1Y3RvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBoYXNJbnN0YW5jZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5sb2dpY2FsTm90KG1fb3V0LmVxdWFsKG1fb3V0LmNvbnN0SW50MzIo
MCksIHZtQ2FsbChtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZDdXN0b20pLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGNvbnN0cnVjdG9yLCBoYXNJbnN0YW5jZSkp
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUNvdW50RXhlY3V0aW9uKCkKKyAgICB7
CisgICAgICAgIFR5cGVkUG9pbnRlciBjb3VudGVyID0gbV9vdXQuYWJzb2x1dGUobV9ub2RlLT5l
eGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSk7CisgICAgICAgIG1fb3V0LnN0b3JlNjQobV9v
dXQuYWRkKG1fb3V0LmxvYWQ2NChjb3VudGVyKSwgbV9vdXQuY29uc3RJbnQ2NCgxKSksIGNvdW50
ZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVTdG9yZUJhcnJpZXIoKQorICAgIHsK
KyAgICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAg
ICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBM
VmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAg
ICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPworICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOworCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hvbGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhh
c0luZGV4ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBjaGVjayBob2xlIikpOworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4
ZWRQcm9wZXJ0eSBpbnQvY29udGlndW91cyBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQ
cm9wZXJ0eSBpbnQvY29udGlndW91cyBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgIGlm
ICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja0hvbGUpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY2hlY2tIb2xlKTsKKworICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVja0hvbGUsIHNsb3dD
YXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBjaGVja0hvbGVSZXN1bHRWYWx1ZSA9CisgICAgICAg
ICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2NChiYXNlSW5kZXgoaGVhcCwgc3Rv
cmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBjaGVja0hvbGVSZXN1bHQgPSBtX291dC5hbmNob3IoY2hlY2tIb2xlUmVzdWx0VmFsdWUp
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGNoZWNrSG9sZVJlc3VsdFZhbHVlLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAor
ICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRleCkpKTsKKyAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6IHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFw
ID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllczsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIb2xlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNJ
bmRleGVkUHJvcGVydHkgZG91YmxlIGNoZWNrIGhvbGUiKSk7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5
IGRvdWJsZSBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3VibGUgY29u
dGludWF0aW9uIikpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5C
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCisgICAgICAgICAgICAgICAgICAgIHJhcmVseShzbG93
Q2FzZSksIHVzdWFsbHkoY2hlY2tIb2xlKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNoZWNrSG9sZSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2hlY2tIb2xlLCBzbG93Q2FzZSk7CisgICAgICAg
ICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSBtX291dC5sb2FkRG91YmxlKGJhc2VJbmRleChoZWFw
LCBzdG9yYWdlLCBpbmRleCwgbV9ub2RlLT5jaGlsZDIoKSkpOworICAgICAgICAgICAgTFZhbHVl
IGNoZWNrSG9sZVJlc3VsdFZhbHVlID0gbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoZWNrSG9sZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5
KHNsb3dDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCisgICAgICAgICAg
ICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOworICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVIYXNH
ZW5lcmljUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1l
LCBiYXNlLCBwcm9wZXJ0eSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY29ycmVjdFN0cnVjdHVyZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzU3RydWN0dXJlUHJvcGVydHkgY29ycmVjdCBzdHJ1Y3R1
cmUiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdyb25nU3RydWN0dXJlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSB3cm9uZyBzdHJ1Y3R1cmUiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFz
U3RydWN0dXJlUHJvcGVydHkgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC5ub3RFcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwK
KyAgICAgICAgICAgIHJhcmVseSh3cm9uZ1N0cnVjdHVyZSksIHVzdWFsbHkoY29ycmVjdFN0cnVj
dHVyZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
Y29ycmVjdFN0cnVjdHVyZSwgd3JvbmdTdHJ1Y3R1cmUpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb3JyZWN0U3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVl
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHdyb25nU3RydWN0dXJlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21C
bG9jayB3cm9uZ1N0cnVjdHVyZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKKyAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNHZW5lcmljUHJvcGVydHkpLCBtX2NhbGxG
cmFtZSwgYmFzZSwgcHJvcGVydHkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgY29ycmVjdFN0cnVjdHVy
ZVJlc3VsdCwgd3JvbmdTdHJ1Y3R1cmVSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBp
bGVHZXREaXJlY3RQbmFtZSgpCisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAg
ICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDMpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgY2hlY2sgb2Zmc2V0IikpOworICAgICAgICBMQmFz
aWNCbG9jayBpbmxpbmVMb2FkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFt
ZSBpbmxpbmUgbG9hZCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZMaW5lTG9hZCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgb3V0LW9mLWxpbmUgbG9hZCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdl
dERpcmVjdFBuYW1lIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJlY3RQbmFtZSBjb250aW51YXRpb24i
KSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAg
bV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwg
dXN1YWxseShjaGVja09mZnNldCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oY2hlY2tPZmZzZXQsIGlubGluZUxvYWQpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSwK
KyAgICAgICAgICAgIHVuc3VyZShvdXRPZkxpbmVMb2FkKSwgdW5zdXJlKGlubGluZUxvYWQpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAg
ICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRB
bnlOdW1iZXIoKSwgCisgICAgICAgICAgICAgICAgYmFzZSwgbV9vdXQuemVyb0V4dChpbmRleCwg
bV9vdXQuaW50NjQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkLCBzbG93Q2FzZSk7CisgICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbG9hZEJ1dHRlcmZseVJlYWRPbmx5KGJhc2UpOworICAgICAgICBMVmFsdWUgcmVhbElu
ZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKKyAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5z
dWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7CisgICAgICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAg
ICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0
QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5saW5lUmVzdWx0LCBv
dXRPZkxpbmVSZXN1bHQsIHNsb3dDYXNlUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpCisgICAgeworICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0Lmxv
YWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExl
bmd0aCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigp
CisgICAgeworICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yKSwgbV9jYWxsRnJhbWUsIGJhc2UpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGluIGJvdW5kcyIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZCb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZSBvdXQgb2YgYm91bmRzIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZSBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGlu
ZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAorICAgICAgICAgICAgdXN1YWxseShp
bkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKKyAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3IpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBpbkJvdW5k
c1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVH
ZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3Vu
ZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgaW4g
Ym91bmRzIikpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSBvdXQgb2YgYm91bmRzIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUgY29udGludWF0aW9uIikpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSks
CisgICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91dE9mQm91bmRzKSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywg
b3V0T2ZCb3VuZHMpOworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvcik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNv
bnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91
bmRzLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblRvSW5k
ZXhTdHJpbmcpLCBtX2NhbGxGcmFtZSwgaW5kZXgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHN0
cnVjdHVyZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGNoZWNrU3RydWN0
dXJlKAorICAgICAgICAgICAgc3RydWN0dXJlLCBub1ZhbHVlKCksIEJhZENhY2hlLCBtX25vZGUt
PnN0cnVjdHVyZVNldCgpLAorICAgICAgICAgICAgW3RoaXNdIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlKHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTWF0ZXJpYWxpemVO
ZXdPYmplY3QoKQorICAgIHsKKyAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSYgZGF0
YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOworICAgICAgICAKKyAgICAg
ICAgLy8gTG93ZXIgdGhlIHZhbHVlcyBmaXJzdCwgdG8gYXZvaWQgY3JlYXRpbmcgdmFsdWVzIGlu
c2lkZSBhIGNvbnRyb2wgZmxvdyBkaWFtb25kLgorICAgICAgICAKKyAgICAgICAgVmVjdG9yPExW
YWx1ZSwgOD4gdmFsdWVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5t
X3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKSkpOworICAgICAgICAKKyAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSBtX25vZGUtPnN0cnVjdHVyZVNldCgpOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAxPiBibG9ja3Moc2V0LnNpemUo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCisgICAgICAg
ICAgICBibG9ja3NbaV0gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2Jq
ZWN0IGNhc2UgIiwgaSkpOworICAgICAgICBMQmFzaWNCbG9jayBkdW1teURlZmF1bHQgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGRlZmF1bHQgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgb3V0ZXJDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAxPiBjYXNlcyhzZXQuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIGNhc2VzW2ld
ID0gU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlKHNldFtpXSksIGJsb2Nrc1tpXSwgV2VpZ2h0KDEp
KTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBsb3dDZWxs
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGNhc2VzLCBkdW1teURlZmF1bHQsIFdl
aWdodCgwKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBvdXRlckxhc3ROZXh0ID0g
bV9vdXQubV9uZXh0QmxvY2s7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxv
Y2ssIDE+IHJlc3VsdHM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhibG9ja3NbaV0sIGkg
KyAxIDwgc2V0LnNpemUoKSA/IGJsb2Nrc1tpICsgMV0gOiBkdW1teURlZmF1bHQpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNldFtpXTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIG9iamVjdDsKKyAgICAgICAgICAgIExWYWx1ZSBi
dXR0ZXJmbHk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOworICAgICAgICAgICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCku
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RXaXRob3V0RGVzdHJ1Y3RvcihhbGxvY2F0aW9uU2l6ZSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGgg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk1hdGVyaWFsaXplTmV3T2JqZWN0IGNvbXBsZXggb2Jq
ZWN0IGFsbG9jYXRpb24gc2xvdyBwYXRoIikpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmpl
Y3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNl
cnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVu
ZCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKSwKKyAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0
QnV0dGVyZmx5VmFsdWUgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0VmFsdWUgPSBhbGxv
Y2F0ZU9iamVjdCgKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2Nh
dG9yKSwgc3RydWN0dXJlLCBmYXN0QnV0dGVyZmx5VmFsdWUsIHNsb3dQYXRoKTsKKworICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RPYmplY3QgPSBtX291dC5hbmNob3IoZmFzdE9i
amVjdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5
ID0gbV9vdXQuYW5jaG9yKGZhc3RCdXR0ZXJmbHlWYWx1ZSk7CisgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICAg
ICAgTFZhbHVlIHNsb3dPYmplY3RWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAg
ICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Ioc2xvd09iamVjdFZhbHVlKTsK
KyAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3RWYWx1ZSwg
bV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb2JqZWN0ID0gbV9vdXQucGhpKG1fb3V0Lmlu
dFB0ciwgZmFzdE9iamVjdCwgc2xvd09iamVjdCk7CisgICAgICAgICAgICAgICAgYnV0dGVyZmx5
ID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEluIHRoZSBlYXN5IGNh
c2Ugd2hlcmUgd2UgY2FuIGRvIGEgb25lLXNob3QgYWxsb2NhdGlvbiwgd2Ugc2ltcGx5IGFsbG9j
YXRlIHRoZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0byBkaXJlY3RseSBoYXZlIHRoZSBk
ZXNpcmVkIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAgICBvYmplY3QgPSBhbGxvY2F0ZU9iamVj
dChzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGJ1dHRlcmZseSA9IG51bGxwdHI7IC8vIERv
bid0IGhhdmUgb25lLCBkb24ndCBuZWVkIG9uZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZm9yIChQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5IDogc3RydWN0dXJlLT5n
ZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgUGhhbnRvbVByb3BlcnR5VmFsdWUgdmFsdWUgPSBkYXRhLm1fcHJvcGVydGllc1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguaWRlbnRpZmllcnMoKVt2YWx1ZS5tX2lk
ZW50aWZpZXJOdW1iZXJdICE9IGVudHJ5LmtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgTFZhbHVl
IGJhc2UgPSBpc0lubGluZU9mZnNldChlbnRyeS5vZmZzZXQpID8gb2JqZWN0IDogYnV0dGVyZmx5
OworICAgICAgICAgICAgICAgICAgICBzdG9yZVByb3BlcnR5KHZhbHVlc1tpXSwgYmFzZSwgdmFs
dWUubV9pZGVudGlmaWVyTnVtYmVyLCBlbnRyeS5vZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihvYmplY3QpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAob3V0ZXJDb250aW51YXRpb24pOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhkdW1teURlZmF1bHQsIG91dGVyQ29udGludWF0aW9u
KTsKKyAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG91dGVyQ29udGludWF0aW9uLCBvdXRlckxhc3ROZXh0KTsKKyAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50UHRyLCByZXN1bHRzKSk7CisgICAgfQorCisgICAg
dm9pZCBjb21waWxlTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uKCkKKyAgICB7CisgICAgICAg
IE9iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPm9iamVjdE1hdGVyaWFs
aXphdGlvbkRhdGEoKTsKKworICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMiArIGkpKSk7CisKKyAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbCht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBTeW1ib2xUYWJsZSogdGFi
bGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPFN5bWJvbFRhYmxlKj4oKTsKKyAgICAgICAgQVNTRVJU
KHRhYmxlID09IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS0+Y2FzdENvbnN0YW50PFN5
bWJvbFRhYmxlKj4oKSk7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0
dXJlKCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbiBzbG93IHBhdGgiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJp
YWxpemVDcmVhdGVBY3RpdmF0aW9uIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisK
KyAgICAgICAgTFZhbHVlIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxKU0xleGljYWxFbnZp
cm9ubWVudD4oCisgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudDo6YWxsb2NhdGlvblNp
emUodGFibGUpLCBzdHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dQYXRoKTsKKworICAg
ICAgICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1Njb3BlX25l
eHQpOworICAgICAgICBtX291dC5zdG9yZVB0cih3ZWFrUG9pbnRlcih0YWJsZSksIGZhc3RPYmpl
Y3QsIG1faGVhcHMuSlNTeW1ib2xUYWJsZU9iamVjdF9zeW1ib2xUYWJsZSk7CisKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RPYmplY3QpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIFdlIGVuc3VyZSBhbGxvY2F0
aW9uIHNpbmtpbmcgZXhwbGljdGx5IHNldHMgYm90dG9tIHZhbHVlcyBmb3IgYWxsIGZpZWxkIG1l
bWJlcnMuIAorICAgICAgICAvLyBUaGVyZWZvcmUsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgSlNW
YWx1ZSB3ZSBwYXNzIGluIGFzIHRoZSBpbml0aWFsaXphdGlvbiB2YWx1ZQorICAgICAgICAvLyBi
ZWNhdXNlIGFsbCBmaWVsZHMgd2lsbCBiZSBvdmVyd3JpdHRlbi4KKyAgICAgICAgLy8gRklYTUU6
IEl0IG1heSBiZSB3b3J0aCBjcmVhdGluZyBhbiBvcGVyYXRpb24gdGhhdCBjYWxscyBhIGNvbnN0
cnVjdG9yIG9uIEpTTGV4aWNhbEVudmlyb25tZW50IHRoYXQgCisgICAgICAgIC8vIGRvZXNuJ3Qg
aW5pdGlhbGl6ZSBldmVyeSBzbG90IGJlY2F1c2Ugd2UgYXJlIGd1YXJhbnRlZWQgdG8gZG8gdGhh
dCBoZXJlLgorICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb25EaXJlY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHRhYmxlKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisgICAgICAgICAgICB9LCBz
Y29wZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSAgbV9vdXQuYW5jaG9y
KGNhbGxSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1
ZSBhY3RpdmF0aW9uID0gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKSA9
PSB0YWJsZS0+c2NvcGVTaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LnN0b3Jl
NjQodmFsdWVzW2ldLAorICAgICAgICAgICAgICAgIGFjdGl2YXRpb24sCisgICAgICAgICAgICAg
ICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1tkYXRhLm1fcHJvcGVydGll
c1tpXS5tX2lkZW50aWZpZXJOdW1iZXJdKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2YWxp
ZGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICAvLyBWYWxpZGF0ZSB0byBtYWtlIHN1cmUg
ZXZlcnkgc2xvdCBpbiB0aGUgc2NvcGUgaGFzIG9uZSB2YWx1ZS4KKyAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRhYmxlLT5tX2xvY2spOworICAgICAgICAgICAgZm9yIChh
dXRvIGl0ZXIgPSB0YWJsZS0+YmVnaW4obG9ja2VyKSwgZW5kID0gdGFibGUtPmVuZChsb2NrZXIp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJv
cGVydGllcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFs
dWUuc2NvcGVPZmZzZXQoKS5vZmZzZXQoKSA9PSBkYXRhLm1fcHJvcGVydGllc1tpXS5tX2lkZW50
aWZpZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm91bmQsIGZvdW5k
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldEpTVmFsdWUoYWN0aXZh
dGlvbik7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlQ2hlY2tXYXRjaGRvZ1RpbWVyKCkKKyAg
ICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHRpbWVyRGlkRmlyZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIHRpbWVyIGRpZCBmaXJlIikpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrV2F0Y2hk
b2dUaW1lciBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgc3RhdGUg
PSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0ZSh2bSgpLndhdGNoZG9nKCktPnRp
bWVyRGlkRmlyZUFkZHJlc3MoKSkpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIoc3RhdGUpLAorICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkodGlt
ZXJEaWRGaXJlKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyh0aW1lckRpZEZpcmUsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbGF6eVNsb3dQYXRo
KAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JikgLT4gUmVmUHRyPExh
enlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIsIEludmFsaWRHUFJS
ZWcpOworICAgICAgICAgICAgfSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgIH0KKworICAgIExWYWx1ZSBkaWRPdmVyZmxvd1N0YWNrKCkKKyAgICB7CisgICAgICAg
IC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIGxlYWYgZnVuY3Rpb24gYW5hbHlzaXMuIFRoZSBp
bnZhcmlhbnQgb2YgRlRMIGNhbGwKKyAgICAgICAgLy8gZnJhbWVzIGlzIHRoYXQgdGhlIGNhbGxl
ciBoYWQgYWxyZWFkeSBkb25lIGVub3VnaCBvZiBhIHN0YWNrIGNoZWNrIHRvCisgICAgICAgIC8v
IHByb3ZlIHRoYXQgdGhpcyBjYWxsIGZyYW1lIGhhcyBlbm91Z2ggc3RhY2sgdG8gcnVuLCBhbmQg
YWxzbyBlbm91Z2ggc3RhY2sKKyAgICAgICAgLy8gdG8gbWFrZSBydW50aW1lIGNhbGxzLiBTbywg
d2Ugb25seSBuZWVkIHRvIHN0YWNrIGNoZWNrIHdoZW4gbWFraW5nIGNhbGxzCisgICAgICAgIC8v
IHRvIG90aGVyIEpTIGZ1bmN0aW9ucy4gSWYgd2UgZG9uJ3QgZmluZCBzdWNoIGNhbGxzIHRoZW4g
d2UgZG9uJ3QgbmVlZCB0bworICAgICAgICAvLyBkbyBhbnkgc3RhY2sgY2hlY2tzLgorICAgICAg
ICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwg
bV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBERkc6OkJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUlu
ZGV4LS07KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5k
ZXgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlJZDoKKyAgICAgICAgICAgICAgICBjYXNl
IFB1dEJ5SWQ6CisgICAgICAgICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICAgICAgICAgIGNh
c2UgQ29uc3RydWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuYmVsb3coCisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJz
b2x1dGUodm0oKS5hZGRyZXNzT2ZGVExTdGFja0xpbWl0KCkpKSk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICB9CisgICAgCisgICAgc3Ry
dWN0IEFyZ3VtZW50c0xlbmd0aCB7CisgICAgICAgIEFyZ3VtZW50c0xlbmd0aCgpCisgICAgICAg
ICAgICA6IGlzS25vd24oZmFsc2UpCisgICAgICAgICAgICAsIGtub3duKFVJTlRfTUFYKQorICAg
ICAgICAgICAgLCB2YWx1ZShudWxscHRyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNLbm93bjsKKyAgICAgICAgdW5zaWduZWQga25vd247CisgICAgICAg
IExWYWx1ZSB2YWx1ZTsKKyAgICB9OworICAgIEFyZ3VtZW50c0xlbmd0aCBnZXRBcmd1bWVudHNM
ZW5ndGgoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBB
cmd1bWVudHNMZW5ndGggbGVuZ3RoOworCisgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUgJiYg
IWlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkpIHsKKyAgICAgICAgICAgIGxlbmd0aC5rbm93
biA9IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDE7CisgICAgICAgICAgICBs
ZW5ndGguaXNLbm93biA9IHRydWU7CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5j
b25zdEludDMyKGxlbmd0aC5rbm93bik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZW5ndGgua25vd24gPSBVSU5UX01BWDsKKyAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudENv
dW50UmVnaXN0ZXI7CisgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
QXJndW1lbnRDb3VudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1l
bnRDb3VudFJlZ2lzdGVyID0gaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudENvdW50UmVnaXN0ZXI7
CisgICAgICAgICAgICBsZW5ndGgudmFsdWUgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKHBheWxv
YWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICB9CisgICAgCisgICAgQXJn
dW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aCgpCisgICAgeworICAgICAgICByZXR1cm4g
Z2V0QXJndW1lbnRzTGVuZ3RoKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFt
ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBnZXRDdXJyZW50Q2FsbGVlKCkKKyAgICB7Cisg
ICAgICAgIGlmIChJbmxpbmVDYWxsRnJhbWUqIGZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmlzQ2xvc3VyZUNh
bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihmcmFt
ZS0+Y2FsbGVlUmVjb3ZlcnkudmlydHVhbFJlZ2lzdGVyKCkpKTsKKyAgICAgICAgICAgIHJldHVy
biB3ZWFrUG9pbnRlcihmcmFtZS0+Y2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKS5hc0NlbGwoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWRQdHIoYWRkcmVzc0ZvcihKU1N0
YWNrOjpDYWxsZWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChpbmxpbmVD
YWxsRnJhbWUpOworICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihzdGFydCkudmFsdWUoKTsKKyAg
ICB9CisgICAgCisgICAgTFZhbHVlIGdldEFyZ3VtZW50c1N0YXJ0KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBnZXRBcmd1bWVudHNTdGFydChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVD
YWxsRnJhbWUpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgY2hlY2tTdHJ1Y3R1cmUoCisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVEaXNjcmlt
aW5hbnQsIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiBmb3JtYXR0ZWRWYWx1ZSwgRXhpdEtpbmQgZXhp
dEtpbmQsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0LCBjb25zdCBGdW5jdG9yJiB3
ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KQorICAgIHsKKyAgICAgICAgaWYgKHNldC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIHRlcm1pbmF0ZShleGl0S2luZCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2V0LnNpemUoKSA9PSAxKSB7CisgICAgICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1hdHRlZFZhbHVl
LCAwLAorICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZURpc2NyaW1pbmFu
dCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXRbMF0pKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNldC5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5l
eHRTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNoZWNrU3RydWN0dXJlIG5leHRT
dHJ1Y3R1cmUiKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAg
bV9vdXQuZXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3ZWFrU3RydWN0dXJlRGlzY3JpbWlu
YW50KHNldFtpXSkpLAorICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUobmV4dFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmV4dFN0cnVj
dHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAg
ICAgIGV4aXRLaW5kLCBmb3JtYXR0ZWRWYWx1ZSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVx
dWFsKHN0cnVjdHVyZURpc2NyaW1pbmFudCwgd2Vha1N0cnVjdHVyZURpc2NyaW1pbmFudChzZXQu
bGFzdCgpKSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIG51bWJlck9yTm90Q2VsbFRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJWYWx1ZVRvSW50MzIgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG5vdEludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBub3QgaW50
IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSAwOworICAgICAgICBM
QmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gMDsKKyAgICAgICAgaWYgKGVkZ2UudXNlS2luZCgp
ID09IE5vdENlbGxVc2UpIHsKKyAgICAgICAgICAgIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBkb3VibGUgY2FzZSIpKTsKKyAgICAgICAgICAgIG5vdE51
bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9JbnQzMiBub3QgbnVtYmVy
IGNhc2UiKSk7CisgICAgICAgIH0KKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJWYWx1ZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAg
ICAgICAKKyAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1bHRzOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIodmFsdWUpLCB1bnN1cmUobm90SW50Q2Fz
ZSksIHVuc3VyZShpbnRDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIG5vdEludENhc2UpOworICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3IodW5ib3hJbnQzMih2YWx1ZSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UudXNlS2lu
ZCgpID09IE51bWJlclVzZSkgeworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90SW50Q2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1
ZSh2YWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwgaXNDZWxsT3JNaXNjKHZhbHVlKSk7
CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoZG91YmxlVG9JbnQzMih1
bmJveERvdWJsZSh2YWx1ZSkpKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnRD
YXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAg
ICAgICBpc0NlbGxPck1pc2ModmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUobm90TnVt
YmVyQ2FzZSksIHVuc3VyZShkb3VibGVDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdE51bWJlckNhc2UpOworICAgICAgICAgICAg
cmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJsZVRvSW50MzIodW5ib3hEb3VibGUodmFs
dWUpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdW1iZXJDYXNlLCBjb250aW51YXRp
b24pOworICAgICAgICAgICAgCisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIGlzQ2VsbCh2YWx1ZSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBMVmFsdWUgc3BlY2lhbFJlc3VsdCA9IG1fb3V0LnNlbGVjdCgKKyAgICAg
ICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHRydWUpKSkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmludDMyT25l
LCBtX291dC5pbnQzMlplcm8pOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5j
aG9yKHNwZWNpYWxSZXN1bHQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIHJl
c3VsdHMpOworICAgIH0KKworICAgIHZvaWQgY2hlY2tJbmZlcnJlZFR5cGUoRWRnZSBlZGdlLCBM
VmFsdWUgdmFsdWUsIGNvbnN0IEluZmVycmVkVHlwZTo6RGVzY3JpcHRvciYgdHlwZSkKKyAgICB7
CisgICAgICAgIC8vIFRoaXMgY2Fubm90IHVzZSBGVExfVFlQRV9DSEVDSyBvciB0eXBlQ2hlY2so
KSBiZWNhdXNlIGl0IGlzIGNhbGxlZCBwYXJ0aWFsbHksIGFzIGluIGEgbm9kZSBsaWtlOgorICAg
ICAgICAvLworICAgICAgICAvLyAgICAgTXVsdGlQdXRCeU9mZnNldCguLi4pCisgICAgICAgIC8v
CisgICAgICAgIC8vIG1heSBiZSBsb3dlcmVkIHRvOgorICAgICAgICAvLworICAgICAgICAvLyAg
ICAgc3dpdGNoIChvYmplY3QtPnN0cnVjdHVyZSkgeworICAgICAgICAvLyAgICAgY2FzZSA0MjoK
KyAgICAgICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUxKTsKKyAgICAg
ICAgLy8gICAgICAgICAuLi4KKyAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAgICAgLy8g
ICAgIGNhc2UgNDM6CisgICAgICAgIC8vICAgICAgICAgY2hlY2tJbmZlcnJlZFR5cGUoLi4uLCB0
eXBlMik7CisgICAgICAgIC8vICAgICAgICAgLi4uCisgICAgICAgIC8vICAgICAgICAgYnJlYWs7
CisgICAgICAgIC8vICAgICB9CisgICAgICAgIC8vCisgICAgICAgIC8vIHdoZXJlIHR5cGUxIGFu
ZCB0eXBlMiBhcmUgZGlmZmVyZW50LiBVc2luZyB0eXBlQ2hlY2soKSB3b3VsZCBtZWFuIHRoYXQg
dGhlIGVkZ2Ugd291bGQgYmUKKyAgICAgICAgLy8gZmlsdGVyZWQgYnkgdHlwZTEgJiB0eXBlMiwg
aW5zdGVhZCBvZiB0eXBlMSB8IHR5cGUyLgorICAgICAgICAKKyAgICAgICAgc3dpdGNoICh0eXBl
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm90dG9tOgorICAgICAgICAg
ICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBt
X291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJ
bmZlcnJlZFR5cGU6OkJvb2xlYW46CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Qm9vbGVhbih2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJy
ZWRUeXBlOjpPdGhlcjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFs
dWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RPdGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpJ
bnQzMjoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RJbnQzMih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpOdW1iZXI6Cisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5u
b2RlKCksIGlzTm90TnVtYmVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN0cmluZzoKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwg
aXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3RyaW5n
KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgY2FzZSBJbmZlcnJlZFR5cGU6OlN5bWJvbDoKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90U3ltYm9sKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSk7CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2FzZSBJbmZlcnJlZFR5
cGU6Ok9iamVjdFdpdGhTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90Q2VsbCh2YWx1ZSwgcHJvdmVu
VHlwZShlZGdlKSkpOworICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNW
YWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBt
X2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFr
U3RydWN0dXJlSUQodHlwZS5zdHJ1Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXI6IHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0V2l0aFN0cnVj
dHVyZU9yT3RoZXIgbm90IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2Jq
ZWN0V2l0aFN0cnVjdHVyZU9yT3RoZXIgY29udGludWF0aW9uIikpOworCisgICAgICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGNlbGxD
YXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxDYXNlKTsKKworICAgICAg
ICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3Ry
dWN0dXJlU2V0KHR5cGUuc3RydWN0dXJlKCkpKSkgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZSgKKyAgICAgICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRn
ZS5ub2RlKCksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksCisgICAgICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodHlwZS5zdHJ1
Y3R1cmUoKSkpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29u
dGludWF0aW9uKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKAorICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgICAg
IGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+U3BlY0NlbGwpKTsKKworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3Q6CisgICAgICAgICAg
ICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlz
Tm90Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdE9iamVjdCh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RPck90aGVyOiB7CisgICAgICAgICAgICBMQmFzaWNC
bG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUg
T2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBub3RD
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY2hlY2tJbmZlcnJlZFR5cGUgT2JqZWN0
T3JPdGhlciBub3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RP
ck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RD
ZWxsQ2FzZSkpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNlbGxDYXNlLCBub3RDZWxsQ2FzZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZSgK
KyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUo
KSwKKyAgICAgICAgICAgICAgICBpc05vdE9iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAm
IFNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0ZSgKKyAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKKyAgICAgICAgICAgICAgICBpc05vdE90aGVyKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSk7CisKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEluZmVycmVkVHlwZTo6VG9wOgorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBpbmZlcnJlZCB0
eXBlIik7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb2FkUHJvcGVydHkoTFZhbHVlIHN0b3Jh
Z2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzc09mUHJvcGVydHkoc3RvcmFn
ZSwgaWRlbnRpZmllck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Rv
cmVQcm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHZhbHVlLCBMVmFsdWUgc3RvcmFnZSwgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc09mUHJvcGVydHkoc3RvcmFnZSwgaWRlbnRp
Zmllck51bWJlciwgb2Zmc2V0KSk7CisgICAgfQorICAgIAorICAgIFR5cGVkUG9pbnRlciBhZGRy
ZXNzT2ZQcm9wZXJ0eSgKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UsIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X291dC5hZGRyZXNzKAorICAgICAgICAgICAgbV9oZWFwcy5wcm9wZXJ0aWVzW2lkZW50aWZpZXJO
dW1iZXJdLCBzdG9yYWdlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShvZmZzZXQpKTsKKyAgICB9Cisg
ICAgCisgICAgTFZhbHVlIHN0b3JhZ2VGb3JUcmFuc2l0aW9uKAorICAgICAgICBMVmFsdWUgb2Jq
ZWN0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCisgICAgICAgIFN0cnVjdHVyZSogcHJldmlvdXNT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV4dFN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChp
c0lubGluZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKKyAgICAg
ICAgCisgICAgICAgIGlmIChwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9
PSBuZXh0U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihvYmplY3QpOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHJlc3VsdDsKKyAgICAgICAgaWYgKCFwcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9i
amVjdCwgcHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCisgICAgICAgICAgICAgICAgb2JqZWN0
LCBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIob2JqZWN0KSwKKyAgICAgICAgICAgICAgICBwcmV2
aW91c1N0cnVjdHVyZSwgbmV4dFN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGVtaXRTdG9yZUJhcnJpZXIob2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShM
VmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgaWYgKHByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdm1DYWxsKAorICAgICAgICAgICAgICAgIG1fb3V0LmludFB0ciwK
KyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0hhdmVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlh
bENhcGFjaXR5KSwKKyAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgb2JqZWN0KTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlV2l0aFNpemVJbXBsKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1f
b3V0LnN0b3JlUHRyKHJlc3VsdCwgb2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSByZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKAorICAgICAgICBMVmFsdWUgb2JqZWN0LCBMVmFsdWUgb2xkU3Rv
cmFnZSwgU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQorICAgIHsKKyAgICAg
ICAgc2l6ZV90IG9sZFNpemUgPSBwcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOyAKKwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHQsIG5ld1NpemUgPT0gbmV4dC0+b3V0T2ZMaW5lQ2Fw
YWNpdHkoKSk7CisgICAgICAgIAorICAgICAgICBpZiAocHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCkpIHsKKyAgICAgICAgICAgIExWYWx1ZSBuZXdBbGxvY1NpemUgPSBtX291dC5j
b25zdEludFB0cihuZXdTaXplKTsgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZWFsbG9j
YXRlQnV0dGVyZmx5VG9Hcm93UHJvcGVydHlTdG9yYWdlKSwgbV9jYWxsRnJhbWUsIG9iamVjdCwg
bmV3QWxsb2NTaXplKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKG5ld1NpemUpOworCisgICAg
ICAgIHB0cmRpZmZfdCBoZWFkZXJTaXplID0gLXNpemVvZihJbmRleGluZ0hlYWRlcikgLSBzaXpl
b2Yodm9pZCopOworICAgICAgICBwdHJkaWZmX3QgZW5kU3RvcmFnZSA9IGhlYWRlclNpemUgLSBz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG9sZFNpemUgKiBzaXplb2YoSlNWYWx1ZSkpOworCisgICAg
ICAgIGZvciAocHRyZGlmZl90IG9mZnNldCA9IGhlYWRlclNpemU7IG9mZnNldCA+IGVuZFN0b3Jh
Z2U7IG9mZnNldCAtPSBzaXplb2Yodm9pZCopKSB7CisgICAgICAgICAgICBMVmFsdWUgbG9hZGVk
ID0gCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5hZGRyZXNzKG1faGVhcHMu
cHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvbGRTdG9yYWdlLCBvZmZzZXQpKTsKKyAgICAgICAg
ICAgIG1fb3V0LnN0b3JlUHRyKGxvYWRlZCwgbV9vdXQuYWRkcmVzcyhtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSwgcmVzdWx0LCBvZmZzZXQpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0LCBtX291dC5hZGRyZXNzKG9iamVjdCwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbChzaXplX3Qgc2l6ZUluVmFsdWVzKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
V2l0aFNpemVJbXBsIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZVdpdGhT
aXplSW1wbCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgZW5kT2ZTdG9yYWdlID0gYWxsb2NhdGVCYXNpY1N0b3JhZ2VBbmRH
ZXRFbmQoCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMgKiBzaXpl
b2YoSlNWYWx1ZSkpLCBzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQuYWRkKG1f
b3V0LmNvbnN0SW50UHRyKHNpemVvZihJbmRleGluZ0hlYWRlcikpLCBlbmRPZlN0b3JhZ2UpKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHNsb3dCdXR0ZXJmbHlWYWx1ZTsKKyAgICAgICAgaWYgKHNpemVJblZh
bHVlcyA9PSBpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkpIHsKKyAgICAgICAgICAgIHNsb3dCdXR0
ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAg
ICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVJblZh
bHVlcykpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3Ioc2xvd0J1dHRlcmZseVZhbHVlKTsK
KyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RCdXR0ZXJmbHksIHNs
b3dCdXR0ZXJmbHkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZ2V0QnlJZChMVmFsdWUgYmFz
ZSkKKyAgICB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51
bWJlcigpXTsKKworICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9v
dXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdp
c3RlcihiYXNlKTsKKworICAgICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBhIEdldEJ5SWRGbHVz
aCwgd2UgbWlnaHQgZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYm9vc3QgaWYgd2UgY2xhaW0gdGhhdCBp
dAorICAgICAgICAvLyBjbG9iYmVycyB2b2xhdGlsZSByZWdpc3RlcnMgbGF0ZS4gSXQncyBub3Qg
bmVjZXNzYXJ5IGZvciBjb3JyZWN0bmVzcywgdGhvdWdoLCBzaW5jZSB0aGUKKyAgICAgICAgLy8g
SUMgY29kZSBpcyBzdXBlciBzbWFydCBhYm91dCBzYXZpbmcgcmVnaXN0ZXJzLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyODQ4CisgICAgICAg
IAorICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+
IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2Vw
dGlvbnMocGF0Y2hwb2ludCk7CisKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7
CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7
CisgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2Ny
YXRjaChqaXQpOworCisgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4
ID0KKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVD
YWxsU2l0ZUluZGV4KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBkaXJlY3QgZXhpdCB0YXJnZXQgZm9yIG9wZXJhdGlvbiBjYWxscy4KKyAg
ICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Cisg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24o
cGFyYW1zKS0+anVtcHMoaml0KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGV4
aXQgZm9yIGNhbGwgSUMncyBjcmVhdGVkIGJ5IHRoZSBnZXRCeUlkIGZvciBnZXR0ZXJzLiBXZSBk
b24ndCBoYXZlCisgICAgICAgICAgICAgICAgLy8gdG8gZG8gYW55dGhpbmcgd2VpcmQgb3RoZXIg
dGhhbiBjYWxsIHRoaXMsIHNpbmNlIGl0IHdpbGwgYXNzb2NpYXRlIHRoZSBleGl0IHdpdGgKKyAg
ICAgICAgICAgICAgICAvLyB0aGUgY2FsbHNpdGUgaW5kZXguCisgICAgICAgICAgICAgICAgZXhj
ZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxT
aXRlSW5kZXgpOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUR2V0
QnlJZEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9j
aygpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxTaXRlSW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhwYXJhbXNb
MV0uZ3ByKCkpLAorICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3By
KCkpKTsKKworICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQp
OworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgp
OworCisgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdp
biA9IGppdC5sYWJlbCgpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIHNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRv
ci0+c3R1YkluZm8oKSksIHBhcmFtc1sxXS5ncHIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSkuY2FsbCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+cmVwb3J0U2xvd1BhdGhDYWxsKHNsb3dQYXRoQmVn
aW4sIHNsb3dQYXRoQ2FsbCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGRMaW5r
VGFzaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5maW5h
bGl6ZShsaW5rQnVmZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcGF0
Y2hwb2ludDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG9hZEJ1dHRlcmZseVdpdGhCYXJyaWVyKExW
YWx1ZSBvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAg
ICAgICBvYmplY3QsIG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSksIG9wZXJhdGlvbkdldEJ1dHRlcmZseSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBs
b2FkVmVjdG9yV2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5
QnVmZmVyVmlld192ZWN0b3IpOworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisgICAgICAg
ICAgICBmYXN0UmVzdWx0VmFsdWUsCisgICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKKyAg
ICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0
b3JXaXRoQmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzRmFzdFR5cGVkQXJyYXkob2JqZWN0KSwgcmFyZWx5
KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQ
YXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QXJyYXlCdWZmZXJWZWN0b3IsIGxvY2F0aW9u
c1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBvYmplY3QpOworICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludFB0ciwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICBMVmFsdWUgY29w
eUJhcnJpZXIoTFZhbHVlIG9iamVjdCwgTFZhbHVlIHBvaW50ZXIsIFBfSklUT3BlcmF0aW9uX0VD
IHNsb3dQYXRoRnVuY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gY29weUJhcnJpZXIoCisg
ICAgICAgICAgICBwb2ludGVyLAorICAgICAgICAgICAgWyZdICgpIC0+IExWYWx1ZSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICAgICAgWz1d
IChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoRnVu
Y3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgb2JqZWN0KTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgTFZhbHVlIGNvcHlCYXJy
aWVyKExWYWx1ZSBwb2ludGVyLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNvcHlCYXJy
aWVyIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjb3B5QmFycmllciBjb250aW51YXRpb24iKSk7CisKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihwb2ludGVyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKHBvaW50ZXIpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbiksIHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihmdW5jdG9yKCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50
UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNJblRv
U3BhY2UoTFZhbHVlIHBvaW50ZXIpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQudGVzdElz
WmVyb1B0cihwb2ludGVyLCBtX291dC5jb25zdEludFB0cihDb3B5QmFycmllckJhc2U6OnNwYWNl
Qml0cykpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5UmVhZE9ubHkoTFZhbHVl
IG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiByZW1vdmVTcGFjZUJpdHMobV9vdXQubG9h
ZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CisgICAgfQorCisgICAg
TFZhbHVlIGxvYWRWZWN0b3JSZWFkT25seShMVmFsdWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAg
TFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpT
QXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgcG9zc2libHlG
cm9tU3BhY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBwb3Nz
aWJseSBmcm9tIHNwYWNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImxvYWRWZWN0b3JSZWFkT25seSBjb250aW51YXRpb24iKSk7
CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0
UmVzdWx0VmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0luVG9TcGFjZShmYXN0UmVz
dWx0VmFsdWUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShwb3NzaWJseUZyb21TcGFj
ZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocG9z
c2libHlGcm9tU3BhY2UsIGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1
bHRWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKKyAgICAgICAgICAgIGlzRmFzdFR5cGVkQXJyYXkob2Jq
ZWN0KSwgcmVtb3ZlU3BhY2VCaXRzKGZhc3RSZXN1bHRWYWx1ZSksIGZhc3RSZXN1bHRWYWx1ZSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OworICAgIH0KKworICAgIExWYWx1ZSByZW1vdmVTcGFjZUJpdHMoTFZhbHVlIHN0b3JhZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYml0QW5kKAorICAgICAgICAgICAgc3RvcmFnZSwg
bV9vdXQuY29uc3RJbnRQdHIofnN0YXRpY19jYXN0PGludHB0cl90PihDb3B5QmFycmllckJhc2U6
OnNwYWNlQml0cykpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNGYXN0VHlwZWRBcnJheShMVmFs
dWUgb2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDMyKG9iamVjdCwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19tb2RlKSwK
KyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoRmFzdFR5cGVkQXJyYXkpKTsKKyAgICB9Cisg
ICAgCisgICAgVHlwZWRQb2ludGVyIGJhc2VJbmRleChJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFw
LCBMVmFsdWUgc3RvcmFnZSwgTFZhbHVlIGluZGV4LCBFZGdlIGVkZ2UsIHB0cmRpZmZfdCBvZmZz
ZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmJhc2VJbmRleCgKKyAgICAgICAg
ICAgIGhlYXAsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLCBwcm92ZW5WYWx1ZShl
ZGdlKSwgb2Zmc2V0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRGdW5jdG9y
LCB0eXBlbmFtZSBEb3VibGVGdW5jdG9yPgorICAgIHZvaWQgY29tcGFyZSgKKyAgICAgICAgY29u
c3QgSW50RnVuY3RvciYgaW50RnVuY3RvciwgY29uc3QgRG91YmxlRnVuY3RvciYgZG91YmxlRnVu
Y3RvciwKKyAgICAgICAgU19KSVRPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgeworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChJbnQ1MlJlcFVzZSkpIHsKKyAgICAgICAgICAgIEludDUyS2luZCBraW5kOworICAgICAg
ICAgICAgTFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBr
aW5kKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQy
KCksIGtpbmQpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihpbnRGdW5jdG9yKGxlZnQsIHJpZ2h0
KSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpKSB7CisgICAgICAgICAgICBM
VmFsdWUgbGVmdCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExW
YWx1ZSByaWdodCA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIHNl
dEJvb2xlYW4oZG91YmxlRnVuY3RvcihsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtp
bmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAgIG5vblNwZWN1bGF0aXZlQ29tcGFyZShpbnRG
dW5jdG9yLCBoZWxwZXJGdW5jdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmRzIik7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2Jq
ZWN0KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCisgICAgeworICAgICAgICBMVmFs
dWUgcmlnaHRDZWxsID0gbG93Q2VsbChyaWdodENoaWxkKTsKKyAgICAgICAgTFZhbHVlIGxlZnRW
YWx1ZSA9IGxvd0pTVmFsdWUobGVmdENoaWxkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgc3BlY3VsYXRlVHJ1dGh5T2JqZWN0KHJpZ2h0Q2hpbGQsIHJpZ2h0
Q2VsbCwgU3BlY09iamVjdCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsZWZ0Q2Vs
bENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09i
amVjdCBsZWZ0IGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGVmdE5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmpl
Y3QgbGVmdCBub3QgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVj
dCBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0NlbGwobGVmdFZhbHVlLCBwcm92ZW5UeXBlKGxlZnRDaGlsZCkpLAorICAgICAg
ICAgICAgdW5zdXJlKGxlZnRDZWxsQ2FzZSksIHVuc3VyZShsZWZ0Tm90Q2VsbENhc2UpKTsKKyAg
ICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obGVm
dENlbGxDYXNlLCBsZWZ0Tm90Q2VsbENhc2UpOworICAgICAgICBzcGVjdWxhdGVUcnV0aHlPYmpl
Y3QobGVmdENoaWxkLCBsZWZ0VmFsdWUsIFNwZWNPYmplY3QgfCAoflNwZWNDZWxsKSk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwo
cmlnaHRDZWxsLCBsZWZ0VmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdE5vdENlbGxDYXNlLCBjb250
aW51YXRpb24pOworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZShsZWZ0VmFsdWUpLCBsZWZ0Q2hpbGQsIFNwZWNPdGhlciB8IFNwZWNDZWxsLCBpc05vdE90
aGVyKGxlZnRWYWx1ZSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFu
LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3Bl
Y3VsYXRlVHJ1dGh5T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBl
IGZpbHRlcikKKyAgICB7CisgICAgICAgIGlmIChtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVl
VmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmplY3QoY2VsbCkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBGVExfVFlQRV9DSEVDSyhq
c1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIGZpbHRlciwgaXNOb3RPYmplY3QoY2VsbCkpOworICAg
ICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCks
IGVkZ2Uubm9kZSgpLAorICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAg
ICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5m
b0ZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW50RnVuY3Rvcj4K
KyAgICB2b2lkIG5vblNwZWN1bGF0aXZlQ29tcGFyZShjb25zdCBJbnRGdW5jdG9yJiBpbnRGdW5j
dG9yLCBTX0pJVE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCisgICAgeworICAgICAgICBM
VmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1
ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBsZWZ0SXNJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVF
cSB1bnR5cGVkIGxlZnQgaXMgaW50IikpOworICAgICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgZmFzdCBwYXRoIikpOwor
ICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29t
cGFyZUVxIHVudHlwZWQgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNvbXBhcmVFcSB1bnR5cGVkIGNvbnRpbnVh
dGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGxlZnQp
LCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGxlZnRJc0ludCkpOworICAgICAgICAKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZWZ0SXNJbnQsIGZhc3RQ
YXRoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIocmlnaHQpLCByYXJlbHkoc2xv
d1BhdGgpLCB1c3VhbGx5KGZhc3RQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhmYXN0UGF0aCwgc2xvd1BhdGgpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGludEZ1bmN0b3IodW5ib3hJbnQzMihsZWZ0KSwgdW5ib3hJbnQz
MihyaWdodCkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90TnVsbCh2
bUNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1fb3V0Lm9wZXJhdGlvbihoZWxwZXJG
dW5jdGlvbiksIG1fY2FsbEZyYW1lLCBsZWZ0LCByaWdodCkpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJv
b2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgc3Ry
aW5nc0VxdWFsKExWYWx1ZSBsZWZ0SlNTdHJpbmcsIExWYWx1ZSByaWdodEpTU3RyaW5nKQorICAg
IHsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5VW5lcXVhbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBub3QgdHJpdmlhbGx5IHVuZXF1YWwgY2FzZSIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgbm90IGVtcHR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxlZnRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBsZWZ0
IHJlYWR5IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHJpZ2h0UmVhZHlDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmlnaHQgcmVhZHkgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGVmdDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dHJpbmdzRXF1YWwgbGVmdCA4LWJpdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayByaWdo
dDhCaXRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwgcmlnaHQgOC1i
aXQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgic3RyaW5nc0VxdWFsIGxvb3AiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ5dGVzRXF1
YWwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBieXRlcyBlcXVhbCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgdHJ1ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0
cmluZ3NFcXVhbCB0cnVlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGZhbHNlQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGZhbHNlIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdz
RXF1YWwgc2xvdyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihsZWZ0SlNTdHJpbmcsIG1faGVhcHMu
SlNTdHJpbmdfbGVuZ3RoKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChsZW5ndGgsIG1fb3V0LmxvYWQzMihyaWdodEpTU3RyaW5nLCBtX2hlYXBz
LkpTU3RyaW5nX2xlbmd0aCkpLAorICAgICAgICAgICAgdW5zdXJlKGZhbHNlQ2FzZSksIHVuc3Vy
ZShub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8obm90VHJpdmlhbGx5VW5lcXVhbENhc2UsIG5vdEVtcHR5Q2Fz
ZSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGxlbmd0aCksIHVuc3Vy
ZSh0cnVlQ2FzZSksIHVuc3VyZShub3RFbXB0eUNhc2UpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhub3RFbXB0eUNhc2UsIGxlZnRSZWFkeUNhc2UpOworCisgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbV9vdXQubG9hZFB0cihsZWZ0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwor
ICAgICAgICBMVmFsdWUgcmlnaHQgPSBtX291dC5sb2FkUHRyKHJpZ2h0SlNTdHJpbmcsIG1faGVh
cHMuSlNTdHJpbmdfdmFsdWUpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxs
KGxlZnQpLCB1c3VhbGx5KGxlZnRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhsZWZ0UmVhZHlDYXNlLCByaWdodFJlYWR5Q2FzZSk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90TnVsbChyaWdodCksIHVzdWFsbHko
cmlnaHRSZWFkeUNhc2UpLCByYXJlbHkoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhyaWdodFJlYWR5Q2FzZSwgbGVmdDhCaXRDYXNlKTsKKworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKGxlZnQsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCisg
ICAgICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUobGVmdDhCaXRDYXNlKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obGVmdDhCaXRDYXNlLCByaWdodDhCaXRDYXNlKTsKKworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKHJpZ2h0LCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFu
ZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZs
YWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dDYXNlKSwgdW5zdXJlKHJpZ2h0
OEJpdENhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhyaWdodDhCaXRDYXNlLCBsb29w
KTsKKworICAgICAgICBMVmFsdWUgbGVmdERhdGEgPSBtX291dC5sb2FkUHRyKGxlZnQsIG1faGVh
cHMuU3RyaW5nSW1wbF9kYXRhKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0RGF0YSA9IG1fb3V0Lmxv
YWRQdHIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKKworICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmRleEF0U3RhcnQgPSBtX291dC5hbmNob3IobGVuZ3RoKTsKKworICAgICAgICBt
X291dC5qdW1wKGxvb3ApOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3AsIGJ5dGVzRXF1
YWwpOworCisgICAgICAgIExWYWx1ZSBpbmRleEF0TG9vcFRvcCA9IG1fb3V0LnBoaShtX291dC5p
bnQzMiwgaW5kZXhBdFN0YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4SW5Mb29wID0gbV9vdXQu
c3ViKGluZGV4QXRMb29wVG9wLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgTFZhbHVlIGxl
ZnRCeXRlID0gbV9vdXQubG9hZDhaZXJvRXh0MzIoCisgICAgICAgICAgICBtX291dC5iYXNlSW5k
ZXgobV9oZWFwcy5jaGFyYWN0ZXJzOCwgbGVmdERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJ
bkxvb3ApKSk7CisgICAgICAgIExWYWx1ZSByaWdodEJ5dGUgPSBtX291dC5sb2FkOFplcm9FeHQz
MigKKyAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmNoYXJhY3RlcnM4LCByaWdo
dERhdGEsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXhJbkxvb3ApKSk7CisKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0Lm5vdEVxdWFsKGxlZnRCeXRlLCByaWdodEJ5dGUpLCB1bnN1cmUoZmFsc2VD
YXNlKSwgdW5zdXJlKGJ5dGVzRXF1YWwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhieXRl
c0VxdWFsLCB0cnVlQ2FzZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhGb3JOZXh0
SXRlcmF0aW9uID0gbV9vdXQuYW5jaG9yKGluZGV4SW5Mb29wKTsKKyAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShpbmRleEF0TG9vcFRvcCwgaW5kZXhGb3JOZXh0SXRlcmF0aW9uKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdFplcm8zMihpbmRleEluTG9vcCksIHVuc3VyZShs
b29wKSwgdW5zdXJlKHRydWVDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odHJ1ZUNh
c2UsIGZhbHNlQ2FzZSk7CisgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21CbG9jayB0cnVlUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhbHNlQ2FzZSwgc2xv
d0Nhc2UpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhbHNlUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAorICAgICAgICAgICAgbV9v
dXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEpLCBtX2Nh
bGxGcmFtZSwKKyAgICAgICAgICAgIGxlZnRKU1N0cmluZywgcmlnaHRKU1N0cmluZyk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFu
KHNsb3dSZXN1bHRWYWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
IHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgdHJ1ZVJlc3VsdCwgZmFsc2VSZXN1bHQs
IHNsb3dSZXN1bHQpOworICAgIH0KKworICAgIGVudW0gU2NyYXRjaEZQUlVzYWdlIHsKKyAgICAg
ICAgRG9udE5lZWRTY3JhdGNoRlBSLAorICAgICAgICBOZWVkU2NyYXRjaEZQUgorICAgIH07Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5QXJpdGhPcEdlbmVyYXRvciwgU2NyYXRjaEZQUlVz
YWdlIHNjcmF0Y2hGUFJVc2FnZSA9IERvbnROZWVkU2NyYXRjaEZQUj4KKyAgICB2b2lkIGVtaXRC
aW5hcnlTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1bmN0aW9uKQorICAgIHsK
KyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBs
ZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByaWdodCA9
IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworCisgICAgICAgIFNuaXBwZXRPcGVyYW5kIGxl
ZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsK
KyAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICBQYXRjaHBv
aW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0KTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQpOworICAgICAgICBwYXRjaHBvaW50
LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQo
bV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBSZWZQdHI8UGF0Y2hwb2lu
dEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHByZXBhcmVQ
YXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+
bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3Jh
dGNoUmVnaXN0ZXJzID0gMjsKKyAgICAgICAgaWYgKHNjcmF0Y2hGUFJVc2FnZSA9PSBOZWVkU2Ny
YXRjaEZQUikKKyAgICAgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVycysr
OworICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hS
ZWdpc3RlcnMoKSk7CisgICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworICAgICAg
ICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAg
ICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0
KTsKKworICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRp
b25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRD
cmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworCisgICAgICAgICAgICAgICAgYXV0byBnZW5l
cmF0b3IgPSBCb3g8QmluYXJ5QXJpdGhPcEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBd
LmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigp
KSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1zLmZwU2NyYXRjaCgwKSwgcGFyYW1zLmZwU2NyYXRjaCgxKSwgcGFyYW1zLmdwU2NyYXRjaCgw
KSwKKyAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEZQUlVzYWdlID09IE5lZWRTY3JhdGNoRlBS
ID8gcGFyYW1zLmZwU2NyYXRjaCgyKSA6IEludmFsaWRGUFJSZWcpOworCisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoZ2VuZXJhdG9yLT5kaWRFbWl0RmFzdFBhdGgoKSkgeworICAgICAgICAgICAgICAgICAgICBn
ZW5lcmF0b3ItPmVuZEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYWRkTGF0ZVBhdGgoCisgICAgICAgICAg
ICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChq
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBu
b2RlLT5vcmlnaW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBhcmFtc1swXS5ncHIoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3By
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUs
ICZqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAg
ICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLAorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5n
ZXQoKSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLCBwYXJhbXNbMV0uZ3ByKCks
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluYXJ5Qml0T3BHZW5lcmF0b3I+Cisg
ICAgdm9pZCBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0KEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0
aEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKKyAgICAgICAg
CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhjZXB0aW9ucy4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4NgorICAgICAgICAg
ICAgCisgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5k
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGxlZnQp
OworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOworICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOworICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdUeXBlTnVt
YmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
KyAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
KyAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKKyAgICAgICAg
cGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkp
OworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKKyAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
PiBleGNlcHRpb25zID0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hl
ZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxCaW5hcnlCaXRPcEdlbmVy
YXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbGVmdE9wZXJhbmQsIHJpZ2h0T3Bl
cmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJlZ3MocGFyYW1zWzJdLmdwcigp
KSwgcGFyYW1zLmdwU2NyYXRjaCgwKSk7CisKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdl
bmVyYXRlRmFzdFBhdGgoaml0KTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmVuZEp1bXBM
aXN0KCkubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRv
bmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgK
KyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5zbG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKnN0YXRlLCBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmln
aW4uc2VtYW50aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQo
KSwgc2xvd1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtc1sxXS5ncHIoKSwgcGFyYW1zWzJdLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5qdW1wKCkubGlua1RvKGRvbmUsICZqaXQpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hw
b2ludCk7CisgICAgfQorCisgICAgdm9pZCBlbWl0UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRT
aGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNoaWZ0VHlwZSkKKyAgICB7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBtX25vZGU7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGRv
IGV4Y2VwdGlvbnMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTE2ODYKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pT
VmFsdWUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVl
KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCht
X3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnJlc3VsdFR5cGUoKSk7CisgICAgICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkp
LnJlc3VsdFR5cGUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihsZWZ0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKHJpZ2h0KTsKKyAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kKG1fdGFnTWFzaywg
VmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kKG1fdGFnVHlwZU51bWJlciwgVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25I
YW5kbGU+IGV4Y2VwdGlvbkhhbmRsZSA9CisgICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZv
ckV4Y2VwdGlvbnMocGF0Y2hwb2ludCk7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRj
aFJlZ2lzdGVycyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPm51bUZQU2NyYXRjaFJlZ2lzdGVy
cyA9IDE7CisgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2Ny
YXRjaFJlZ2lzdGVycygpKTsKKyAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Cisg
ICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Cisg
ICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCb3g8Q0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbkhhbmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8
SklUUmlnaHRTaGlmdEdlbmVyYXRvcj46OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgbGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSwKKyAg
ICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocGFyYW1zWzFdLmdwcigpKSwgSlNWYWx1ZVJl
Z3MocGFyYW1zWzJdLmdwcigpKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmZwU2NyYXRj
aCgwKSwgcGFyYW1zLmdwU2NyYXRjaCgwKSwgSW52YWxpZEZQUlJlZywgc2hpZnRUeXBlKTsKKwor
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOworICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOworICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOworCisgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNsb3dQYXRoSnVt
cExpc3QoKS5saW5rKCZqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBKX0pJVE9wZXJh
dGlvbl9FSkogc2xvd1BhdGhGdW5jdGlvbiA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hpZnRUeXBlID09IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNpZ25lZFNoaWZ0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPyBvcGVyYXRpb25WYWx1ZUJpdFJTaGlmdCA6IG9wZXJhdGlv
blZhbHVlQml0VVJTaGlmdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
c3RhdGUsIHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBz
bG93UGF0aEZ1bmN0aW9uLCBwYXJhbXNbMF0uZ3ByKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zWzFdLmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50
KTsKKyAgICB9CisKKyAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIExC
YXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgib2JqZWN0IGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKKyAg
ICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdDsKKyAgICAgICAgTFZhbHVlIGNvbmRpdGlvbjsKKyAg
ICAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NTbG93UGF0aHMoKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gbV9vdXQuaW50UHRyWmVybzsKKyAgICAgICAgICAgIGNvbmRpdGlvbiA9IG1fb3V0LmJv
b2xlYW5GYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0
LmxvYWRQdHIoCisgICAgICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9j
YXRvcl9mcmVlTGlzdEhlYWQpOworICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQubm90TnVs
bChyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LmJyYW5jaChjb25kaXRpb24sIHVz
dWFsbHkoc3VjY2VzcyksIHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc3VjY2Vzcyk7CisgICAgICAgIAorICAgICAgICBtX291dC5zdG9yZVB0cigK
KyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIocmVzdWx0LCBtX2hlYXBzLkpTQ2VsbF9mcmVlTGlz
dE5leHQpLAorICAgICAgICAgICAgYWxsb2NhdG9yLCBtX2hlYXBzLk1hcmtlZEFsbG9jYXRvcl9m
cmVlTGlzdEhlYWQpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3RvcmVTdHJ1Y3R1cmUoTFZhbHVlIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJl
LT5pZCgpKSwgb2JqZWN0LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1f
b3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+b2Jq
ZWN0SW5pdGlhbGl6YXRpb25CbG9iKCkpLAorICAgICAgICAgICAgb2JqZWN0LCBtX2hlYXBzLkpT
Q2VsbF91c2VmdWxCeXRlcyk7CisgICAgfQorCisgICAgTFZhbHVlIGFsbG9jYXRlQ2VsbChMVmFs
dWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
CisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwg
c2xvd1BhdGgpOworICAgICAgICBzdG9yZVN0cnVjdHVyZShyZXN1bHQsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZhbHVlIGFsbG9jYXRlT2JqZWN0
KAorICAgICAgICBMVmFsdWUgYWxsb2NhdG9yLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVl
IGJ1dHRlcmZseSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gYWxsb2NhdGVDZWxsKGFsbG9jYXRvciwgc3RydWN0dXJlLCBzbG93UGF0aCk7Cisg
ICAgICAgIG1fb3V0LnN0b3JlUHRyKGJ1dHRlcmZseSwgcmVzdWx0LCBtX2hlYXBzLkpTT2JqZWN0
X2J1dHRlcmZseSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENsYXNzVHlwZT4KKyAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCisg
ICAgICAgIHNpemVfdCBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBNYXJrZWRBbGxvY2F0b3Iq
IGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxsb2NhdG9yRm9yT2JqZWN0T2ZUeXBlPENsYXNzVHlw
ZT4oc2l6ZSk7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdChtX291dC5jb25zdEludFB0
cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+CisgICAgTFZhbHVlIGFsbG9jYXRl
T2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9j
ayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIHJldHVybiBhbGxvY2F0ZU9iamVjdDxDbGFzc1R5
cGU+KAorICAgICAgICAgICAgQ2xhc3NUeXBlOjphbGxvY2F0aW9uU2l6ZSgwKSwgc3RydWN0dXJl
LCBidXR0ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ2xhc3NUeXBlPgorICAgIExWYWx1ZSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QoCisg
ICAgICAgIExWYWx1ZSBzaXplLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTFZhbHVlIGJ1dHRlcmZs
eSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KCEo
TWFya2VkU3BhY2U6OnByZWNpc2VTdGVwICYgKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEp
KSwgIk1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgJiAoTWFy
a2VkU3BhY2U6OmltcHJlY2lzZVN0ZXAgLSAxKSksICJNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3Rl
cCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOworCisgICAgICAgIExWYWx1ZSBzdWJzcGFjZSA9
IG1fb3V0LmNvbnN0SW50UHRyKCZ2bSgpLmhlYXAuc3Vic3BhY2VGb3JPYmplY3RPZlR5cGU8Q2xh
c3NUeXBlPigpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNtYWxsQ2FzZUJsb2Nr
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3Qgc21h
bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VPck92ZXJzaXplQ2FzZUJsb2Nr
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3QgbGFy
Z2Ugb3Igb3ZlcnNpemUgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFyZ2VDYXNlQmxv
Y2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBs
YXJnZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBjb250aW51YXRpb24i
KSk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdXByb3VuZGVkU2l6ZSA9IG1fb3V0LmFkZChz
aXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlU3RlcCAtIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGlzU21hbGwgPSBtX291dC5iZWxvdyh1cHJvdW5kZWRTaXplLCBtX291dC5j
b25zdEludDMyKE1hcmtlZFNwYWNlOjpwcmVjaXNlQ3V0b2ZmKSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChpc1NtYWxsLCB1bnN1cmUoc21hbGxDYXNlQmxvY2spLCB1bnN1cmUobGFyZ2VPck92ZXJz
aXplQ2FzZUJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHNtYWxsQ2FzZUJsb2NrLCBsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2sp
OworICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKKyAgICAg
ICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfcHJlY2lzZUFsbG9jYXRvcnMsIHN1
YnNwYWNlLAorICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5sU2hyKHVwcm91bmRl
ZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoZ2V0TFNCU2V0KE1hcmtlZFNwYWNlOjpwcmVjaXNlU3Rl
cCkpKSkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbWFsbEFsbG9jYXRvciA9IG1fb3V0LmFu
Y2hvcihhZGRyZXNzLnZhbHVlKCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJnZU9yT3ZlcnNpemVDYXNlQmxv
Y2ssIGxhcmdlQ2FzZUJsb2NrKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
bV9vdXQuYmVsb3codXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihNYXJrZWRTcGFjZTo6
aW1wcmVjaXNlQ3V0b2ZmKSksCisgICAgICAgICAgICB1c3VhbGx5KGxhcmdlQ2FzZUJsb2NrKSwg
cmFyZWx5KHNsb3dQYXRoKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhsYXJn
ZUNhc2VCbG9jaywgY29udGludWF0aW9uKTsKKyAgICAgICAgYWRkcmVzcyA9IG1fb3V0LmJhc2VJ
bmRleCgKKyAgICAgICAgICAgIG1faGVhcHMuTWFya2VkU3BhY2VfU3Vic3BhY2VfaW1wcmVjaXNl
QWxsb2NhdG9ycywgc3Vic3BhY2UsCisgICAgICAgICAgICBtX291dC56ZXJvRXh0UHRyKG1fb3V0
LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJbnQzMihnZXRMU0JTZXQoTWFya2VkU3Bh
Y2U6OmltcHJlY2lzZVN0ZXApKSkpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbGFyZ2VBbGxv
Y2F0b3IgPSBtX291dC5hbmNob3IoYWRkcmVzcy52YWx1ZSgpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIExWYWx1ZSBhbGxvY2F0b3IgPSBtX291dC5waGko
bV9vdXQuaW50UHRyLCBzbWFsbEFsbG9jYXRvciwgbGFyZ2VBbGxvY2F0b3IpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0KGFsbG9jYXRvciwgc3RydWN0dXJlLCBidXR0
ZXJmbHksIHNsb3dQYXRoKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyBhIHBvaW50ZXIg
dG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGlvbi4KKyAgICBMVmFsdWUgYWxsb2NhdGVCYXNpY1N0
b3JhZ2VBbmRHZXRFbmQoTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQorICAgIHsK
KyAgICAgICAgQ29waWVkQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSB2bSgpLmhlYXAuc3RvcmFnZUFs
bG9jYXRvcigpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc3VjY2VzcyA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3RvcmFnZSBhbGxvY2F0aW9uIHN1Y2Nlc3MiKSk7CisgICAgICAg
IAorICAgICAgICBMVmFsdWUgcmVtYWluaW5nID0gbV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0
ZSgmYWxsb2NhdG9yLm1fY3VycmVudFJlbWFpbmluZykpOworICAgICAgICBMVmFsdWUgbmV3UmVt
YWluaW5nID0gbV9vdXQuc3ViKHJlbWFpbmluZywgc2l6ZSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5sZXNzVGhhbihuZXdSZW1haW5pbmcsIG1f
b3V0LmludFB0clplcm8pLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShz
dWNjZXNzKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzdWNjZXNzKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LnN0b3JlUHRyKG5ld1JlbWFpbmluZywgbV9vdXQuYWJzb2x1
dGUoJmFsbG9jYXRvci5tX2N1cnJlbnRSZW1haW5pbmcpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LnN1YigKKyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYWJzb2x1dGUoJmFsbG9jYXRv
ci5tX2N1cnJlbnRQYXlsb2FkRW5kKSksIG5ld1JlbWFpbmluZyk7CisgICAgfQorCisgICAgTFZh
bHVlIGFsbG9jYXRlQmFzaWNTdG9yYWdlKExWYWx1ZSBzaXplLCBMQmFzaWNCbG9jayBzbG93UGF0
aCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5zdWIoYWxsb2NhdGVCYXNpY1N0b3JhZ2VB
bmRHZXRFbmQoc2l6ZSwgc2xvd1BhdGgpLCBzaXplKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVl
IGFsbG9jYXRlT2JqZWN0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0
b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9j
YXRpb25TaXplKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBzbG93IHBhdGgiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxsb2Nh
dGVPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOworICAgICAg
ICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihhbGxv
Y2F0ZU9iamVjdCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0
cnVjdHVyZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0
VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQg
PSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgc3RydWN0IEFycmF5VmFsdWVz
IHsKKyAgICAgICAgQXJyYXlWYWx1ZXMoKQorICAgICAgICAgICAgOiBhcnJheSgwKQorICAgICAg
ICAgICAgLCBidXR0ZXJmbHkoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBcnJheVZhbHVlcyhMVmFsdWUgYXJyYXksIExWYWx1ZSBidXR0ZXJmbHkpCisgICAgICAg
ICAgICA6IGFycmF5KGFycmF5KQorICAgICAgICAgICAgLCBidXR0ZXJmbHkoYnV0dGVyZmx5KQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBhcnJheTsKKyAg
ICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKKyAgICB9OworICAgIEFycmF5VmFsdWVzIGFsbG9jYXRl
SlNBcnJheSgKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUVsZW1l
bnRzLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAg
ICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAg
ICAgfHwgaGFzSW50MzIoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkKKyAgICAgICAgICAgIHx8
IGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQorICAgICAgICAgICAgfHwgaGFz
Q29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgIAorICAgICAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGggPSBzdGQ6Om1heChCQVNFX1ZFQ1RPUl9MRU4sIG51bUVs
ZW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBlbmRPZlN0b3JhZ2UgPSBhbGxvY2F0
ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHNp
emVvZihKU1ZhbHVlKSAqIHZlY3Rvckxlbmd0aCArIHNpemVvZihJbmRleGluZ0hlYWRlcikpLAor
ICAgICAgICAgICAgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIGJ1dHRlcmZs
eSA9IG1fb3V0LnN1YigKKyAgICAgICAgICAgIGVuZE9mU3RvcmFnZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc2l6ZW9mKEpTVmFsdWUpICogdmVjdG9yTGVuZ3RoKSk7CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNBcnJheT4oCisgICAgICAgICAgICBzdHJ1
Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuc3Rv
cmUzMihtX291dC5jb25zdEludDMyKG51bUVsZW1lbnRzKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1
dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0
SW50MzIodmVjdG9yTGVuZ3RoKSwgYnV0dGVyZmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JM
ZW5ndGgpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc0RvdWJsZShzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtRWxlbWVudHM7
IGkgPCB2ZWN0b3JMZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
CisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0
X3Q+KFBOYU4pKSwKKyAgICAgICAgICAgICAgICAgICAgYnV0dGVyZmx5LCBtX2hlYXBzLmluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIEFycmF5VmFsdWVzKG9iamVjdCwgYnV0dGVyZmx5KTsKKyAgICB9
CisgICAgCisgICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0FycmF5KFN0cnVjdHVyZSogc3RydWN0
dXJlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNs
b3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJKU0FycmF5IGFsbG9jYXRpb24gc2xvdyBw
YXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBjb250aW51YXRpb24iKSk7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9y
ZShzbG93UGF0aCk7CisgICAgICAgIAorICAgICAgICBBcnJheVZhbHVlcyBmYXN0VmFsdWVzID0g
YWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMsIHNsb3dQYXRoKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdEFycmF5ID0gbV9vdXQuYW5jaG9yKGZhc3RWYWx1ZXMuYXJy
YXkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9y
KGZhc3RWYWx1ZXMuYnV0dGVyZmx5KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOworCisgICAgICAgIExWYWx1ZSBzbG93QXJyYXlWYWx1ZSA9IGxhenlTbG93
UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9vdXQuYW5jaG9yKHNsb3dBcnJheVZh
bHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd0FycmF5VmFsdWUsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KSk7CisKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gQXJyYXlWYWx1ZXMoCisgICAgICAgICAgICBtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QXJyYXksIHNsb3dBcnJheSksCisgICAgICAgICAgICBt
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBib29saWZ5KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAg
ICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKKyAgICAgICAgICAgIHJldHVybiBsb3dCb29sZWFu
KGVkZ2UpOworICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0
Lm5vdFplcm8zMihsb3dJbnQzMihlZGdlKSk7CisgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZU5vdEVxdWFsQW5kT3JkZXJlZChsb3dEb3Vi
bGUoZWRnZSksIG1fb3V0LmRvdWJsZVplcm8pOworICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJV
c2U6CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9naWNhbE5vdCgKKyAgICAgICAgICAgICAg
ICBlcXVhbE51bGxPclVuZGVmaW5lZCgKKyAgICAgICAgICAgICAgICAgICAgZWRnZSwgQ2VsbENh
c2VTcGVjdWxhdGVzT2JqZWN0LCBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQsCisgICAgICAgICAg
ICAgICAgICAgIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpOworICAgICAgICBjYXNlIFN0cmlu
Z1VzZTogeworICAgICAgICAgICAgTFZhbHVlIHN0cmluZ1ZhbHVlID0gbG93U3RyaW5nKGVkZ2Up
OworICAgICAgICAgICAgTFZhbHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0
cmluZ1ZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQubm90RXF1YWwobGVuZ3RoLCBtX291dC5pbnQzMlplcm8pOworICAgICAgICB9CisgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShlZGdlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSW1wbGVtZW50cyB0aGUg
Zm9sbG93aW5nIGNvbnRyb2wgZmxvdyBzdHJ1Y3R1cmU6CisgICAgICAgICAgICAvLyBpZiAodmFs
dWUgaXMgY2VsbCkgeworICAgICAgICAgICAgLy8gICAgIGlmICh2YWx1ZSBpcyBzdHJpbmcpCisg
ICAgICAgICAgICAvLyAgICAgICAgIHJlc3VsdCA9ICEhdmFsdWUtPmxlbmd0aAorICAgICAgICAg
ICAgLy8gICAgIGVsc2UgeworICAgICAgICAgICAgLy8gICAgICAgICBkbyBldmlsIHRoaW5ncyBm
b3IgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkCisgICAgICAgICAgICAvLyAgICAgICAgIHJlc3Vs
dCA9IHRydWUKKyAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLyB9IGVsc2UgaWYg
KHZhbHVlIGlzIGludDMyKSB7CisgICAgICAgICAgICAvLyAgICAgcmVzdWx0ID0gISF1bmJveElu
dDMyKHZhbHVlKQorICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh2YWx1ZSBpcyBudW1iZXIpIHsK
KyAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94RG91YmxlKHZhbHVlKQorICAgICAg
ICAgICAgLy8gfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSB2YWx1ZSA9PSBq
c1RydWUKKyAgICAgICAgICAgIC8vIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBj
ZWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBzdHJpbmdDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgc3RyaW5nIGNhc2UiKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBub3RTdHJpbmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJC
b29saWZ5IHVudHlwZWQgbm90IHN0cmluZyBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBu
b3QgY2VsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50MzJDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgaW50MzIgY2FzZSIpKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdEludDMyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
Qm9vbGlmeSB1bnR5cGVkIG5vdCBpbnQzMiBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGRv
dWJsZSBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90RG91YmxlQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBkb3VibGUgY2FzZSIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQm9vbGlmeSB1bnR5cGVkIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJsb2NrPiByZXN1bHRzOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwg
dW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2Us
IHN0cmluZ0Nhc2UpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAg
IGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpLAorICAgICAgICAg
ICAgICAgIHVuc3VyZShzdHJpbmdDYXNlKSwgdW5zdXJlKG5vdFN0cmluZ0Nhc2UpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyaW5nQ2FzZSwgbm90U3RyaW5n
Q2FzZSk7CisgICAgICAgICAgICBMVmFsdWUgbm9uRW1wdHlTdHJpbmcgPSBtX291dC5ub3RaZXJv
MzIoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUodmFsdWUsIG1faGVh
cHMuSlNTdHJpbmdfbGVuZ3RoKSk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3Iobm9uRW1wdHlTdHJpbmcpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90U3RyaW5n
Q2FzZSwgbm90Q2VsbENhc2UpOworICAgICAgICAgICAgTFZhbHVlIGlzVHJ1dGh5T2JqZWN0Owor
ICAgICAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICAgICAgaXNUcnV0aHlPYmplY3QgPSBtX291dC5ib29sZWFuVHJ1
ZTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG1hc3F1
ZXJhZGVzQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG1hc3F1
ZXJhZGVzIGNhc2UiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgICAgICBt
X291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwK
KyAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkobWFzcXVl
cmFkZXNDYXNlKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obWFzcXVlcmFkZXNDYXNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpc1RydXRoeU9iamVjdCA9IG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBt
X291dC5jb25zdEludFB0cihtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGxvYWRTdHJ1Y3R1
cmUodmFsdWUpLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihpc1RydXRoeU9iamVj
dCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgaW50MzJDYXNlKTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBpc0ludDMyKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoaW50
MzJDYXNlKSwgdW5zdXJlKG5vdEludDMyQ2FzZSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhpbnQzMkNhc2UsIG5vdEludDMyQ2FzZSk7CisgICAgICAgICAgICBy
ZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQubm90WmVybzMyKHVuYm94SW50MzIodmFs
dWUpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnQzMkNhc2UsIGRvdWJsZUNhc2Up
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIGlzTnVtYmVyKHZh
bHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgICAgICB1bnN1
cmUoZG91YmxlQ2FzZSksIHVuc3VyZShub3REb3VibGVDYXNlKSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vdERvdWJsZUNhc2UpOworICAg
ICAgICAgICAgTFZhbHVlIGRvdWJsZUlzVHJ1dGh5ID0gbV9vdXQuZG91YmxlTm90RXF1YWxBbmRP
cmRlcmVkKAorICAgICAgICAgICAgICAgIHVuYm94RG91YmxlKHZhbHVlKSwgbV9vdXQuY29uc3RE
b3VibGUoMCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGRvdWJs
ZUlzVHJ1dGh5KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERvdWJsZUNhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgbWlzY0lzVHJ1dGh5ID0gbV9vdXQuZXF1YWwo
CisgICAgICAgICAgICAgICAgdmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtaXNjSXNUcnV0aHkpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmJvb2xlYW4s
IHJlc3VsdHMpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBlbnVtIFN0cmluZ09yT2JqZWN0TW9k
ZSB7CisgICAgICAgIEFsbENlbGxzQXJlRmFsc2UsCisgICAgICAgIENlbGxDYXNlU3BlY3VsYXRl
c09iamVjdAorICAgIH07CisgICAgZW51bSBFcXVhbE51bGxPclVuZGVmaW5lZE1vZGUgeworICAg
ICAgICBFcXVhbE51bGwsCisgICAgICAgIEVxdWFsVW5kZWZpbmVkLAorICAgICAgICBFcXVhbE51
bGxPclVuZGVmaW5lZCwKKyAgICAgICAgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkCisgICAgfTsK
KyAgICBMVmFsdWUgZXF1YWxOdWxsT3JVbmRlZmluZWQoCisgICAgICAgIEVkZ2UgZWRnZSwgU3Ry
aW5nT3JPYmplY3RNb2RlIGNlbGxNb2RlLCBFcXVhbE51bGxPclVuZGVmaW5lZE1vZGUgcHJpbWl0
aXZlTW9kZSwKKyAgICAgICAgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBvcGVyYW5kTW9kZSA9IEF1
dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIGJvb2wgdmFsaWRXYXRj
aHBvaW50ID0gbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKTsK
KyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgb3BlcmFu
ZE1vZGUpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIGNlbGwgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1
YWxOdWxsT3JVbmRlZmluZWQgcHJpbWl0aXZlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1YWxOdWxsT3JVbmRlZmlu
ZWQgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShwcmltaXRpdmVDYXNlKSwgdW5z
dXJlKGNlbGxDYXNlKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBwcmltaXRpdmVDYXNlKTsKKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAoY2VsbE1vZGUpIHsKKyAgICAgICAgY2FzZSBBbGxDZWxsc0FyZUZhbHNlOgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0Ogor
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZSwgKH5TcGVjQ2VsbCkgfCBTcGVjT2JqZWN0LCBpc05vdE9iamVjdCh2YWx1
ZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICh2YWxpZFdhdGNocG9pbnQpIHsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuRmFsc2UpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG1hc3F1
ZXJhZGVzQ2FzZSA9CisgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJFcXVh
bE51bGxPclVuZGVmaW5lZCBtYXNxdWVyYWRlcyBjYXNlIikpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxz
ZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAg
ICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwK
KyAgICAgICAgICAgICAgICByYXJlbHkobWFzcXVlcmFkZXNDYXNlKSwgdXN1YWxseShjb250aW51
YXRpb24pKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obWFzcXVl
cmFkZXNDYXNlLCBwcmltaXRpdmVDYXNlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTFZh
bHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUodmFsdWUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoCisgICAgICAgICAgICAgICAgbV9v
dXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSksCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIoc3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9nbG9iYWxP
YmplY3QpKSkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhwcmltaXRpdmVDYXNlLCBjb250
aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHByaW1pdGl2ZVJlc3VsdDsKKyAg
ICAgICAgc3dpdGNoIChwcmltaXRpdmVNb2RlKSB7CisgICAgICAgIGNhc2UgRXF1YWxOdWxsOgor
ICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNv
bnN0SW50NjQoVmFsdWVOdWxsKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
cXVhbFVuZGVmaW5lZDoKKyAgICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmVxdWFs
KHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFcXVhbE51bGxPclVuZGVmaW5lZDoKKyAgICAgICAgICAgIHBy
aW1pdGl2ZVJlc3VsdCA9IGlzT3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3BlY3VsYXRlTnVsbE9yVW5kZWZpbmVkOgorICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZh
bHVlKSwgZWRnZSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUpKTsKKyAg
ICAgICAgICAgIHByaW1pdGl2ZVJlc3VsdCA9IG1fb3V0LmJvb2xlYW5UcnVlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHByaW1pdGl2ZVJlc3VsdCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgcmVzdWx0
cyk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4KKyAg
ICB2b2lkIGNvbnRpZ3VvdXNQdXRCeVZhbE91dE9mQm91bmRzKAorICAgICAgICBGdW5jdGlvblR5
cGUgc2xvd1BhdGhGdW5jdGlvbiwgTFZhbHVlIGJhc2UsIExWYWx1ZSBzdG9yYWdlLCBMVmFsdWUg
aW5kZXgsIExWYWx1ZSB2YWx1ZSwKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIGlzTm90SW5Cb3VuZHMgPSBtX291dC5hYm92ZU9yRXF1YWwo
CisgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9o
ZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSk7CisgICAgICAgIGlmICghbV9ub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdEluQm91
bmRzQ2FzZSA9CisgICAgICAgICAgICAgICAgRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZh
bCBub3QgaW4gYm91bmRzIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgcGVyZm9ybVN0b3Jl
ID0KKyAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIHBlcmZv
cm0gc3RvcmUiKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5icmFuY2go
aXNOb3RJbkJvdW5kcywgdW5zdXJlKG5vdEluQm91bmRzQ2FzZSksIHVuc3VyZShwZXJmb3JtU3Rv
cmUpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90SW5Cb3VuZHNDYXNlLCBwZXJmb3JtU3RvcmUpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIGlzT3V0T2ZCb3VuZHMgPSBtX291dC5hYm92
ZU9yRXF1YWwoCisgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZl
KHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCkpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMo
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwg
aXNPdXRPZkJvdW5kcyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBvdXRPZkJvdW5kc0Nhc2UgPQorICAgICAgICAgICAgICAgICAgICBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG91dCBvZiBib3VuZHMiKSk7CisgICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaG9sZUNhc2UgPQorICAgICAgICAgICAgICAgICAgICBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlB1dEJ5VmFsIGhvbGUgY2FzZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT3V0T2ZCb3VuZHMsIHJhcmVseShvdXRPZkJv
dW5kc0Nhc2UpLCB1c3VhbGx5KGhvbGVDYXNlKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhv
dXRPZkJvdW5kc0Nhc2UsIGhvbGVDYXNlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgdm1DYWxsKAorICAgICAgICAgICAgICAgICAgICBtX291dC52b2lkVHlwZSwgbV9v
dXQub3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24pLAorICAgICAgICAgICAgICAgICAgICBtX2Nh
bGxGcmFtZSwgYmFzZSwgaW5kZXgsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhob2xlQ2FzZSwgaW5uZXJMYXN0TmV4
dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnN0b3Jl
MzIoCisgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGluZGV4LCBtX291dC5pbnQzMk9uZSksCisg
ICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAocGVyZm9ybVN0b3JlKTsK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBlcmZvcm1TdG9yZSwgbGFzdE5leHQpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYnVpbGRTd2l0Y2goU3dpdGNoRGF0YSogZGF0
YSwgTFR5cGUgdHlwZSwgTFZhbHVlIHN3aXRjaFZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHR5cGUgPT0gbV9vdXQuaW50UHRyIHx8IHR5cGUgPT0gbV9vdXQuaW50MzIpOworCisgICAgICAg
IFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBTd2l0Y2hDYXNlIG5l
d0Nhc2U7CisKKyAgICAgICAgICAgIGlmICh0eXBlID09IG1fb3V0LmludFB0cikgeworICAgICAg
ICAgICAgICAgIG5ld0Nhc2UgPSBTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPmNh
c2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEtPmtpbmQpKSwKKyAgICAgICAgICAg
ICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKSwgV2VpZ2h0KGRh
dGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09IG1fb3V0LmludDMyKSB7CisgICAgICAgICAgICAgICAgbmV3Q2FzZSA9IFN3aXRjaENhc2Uo
bV9vdXQuY29uc3RJbnQzMihkYXRhLT5jYXNlc1tpXS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1ZShk
YXRhLT5raW5kKSksCisgICAgICAgICAgICAgICAgICAgIGxvd0Jsb2NrKGRhdGEtPmNhc2VzW2ld
LnRhcmdldC5ibG9jayksIFdlaWdodChkYXRhLT5jYXNlc1tpXS50YXJnZXQuY291bnQpKTsKKyAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIENSQVNIKCk7CisKKyAgICAgICAgICAg
IGNhc2VzLmFwcGVuZChuZXdDYXNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9v
dXQuc3dpdGNoSW5zdHJ1Y3Rpb24oCisgICAgICAgICAgICBzd2l0Y2hWYWx1ZSwgY2FzZXMsCisg
ICAgICAgICAgICBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayksIFdlaWdodChkYXRh
LT5mYWxsVGhyb3VnaC5jb3VudCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHN3aXRjaFN0cmlu
ZyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQorICAgIHsKKyAgICAgICAgYm9vbCBj
YW5Eb0JpbmFyeVN3aXRjaCA9IHRydWU7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0g
MDsKKyAgICAgICAgCisgICAgICAgIGZvciAoREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA6IGRhdGEt
PmNhc2VzKSB7CisgICAgICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmcgPSBteUNhc2UudmFsdWUu
c3RyaW5nSW1wbCgpOworICAgICAgICAgICAgaWYgKCFzdHJpbmctPmlzOEJpdCgpKSB7CisgICAg
ICAgICAgICAgICAgY2FuRG9CaW5hcnlTd2l0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzdHJpbmctPmxlbmd0aCgpID4g
T3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENhc2VMZW5ndGgoKSkgeworICAgICAg
ICAgICAgICAgIGNhbkRvQmluYXJ5U3dpdGNoID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0b3RhbExlbmd0aCArPSBzdHJpbmctPmxl
bmd0aCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWNhbkRvQmluYXJ5U3dp
dGNoIHx8IHRvdGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRv
dGFsTGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1Nsb3coZGF0YSwgc3RyaW5n
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ192
YWx1ZSk7CisgICAgICAgIExWYWx1ZSBsZW5ndGggPSBtX291dC5sb2FkMzIoc3RyaW5nLCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBoYXNJ
bXBsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgaGFz
IGltcGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0QmxvY2sgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgaXMgOCBiaXQgY2FzZSIpKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0
Y2gvU3dpdGNoU3RyaW5nIHNsb3cgY2FzZSIpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5pc051bGwoc3RyaW5nSW1wbCksIHVuc3VyZShzbG93QmxvY2spLCB1bnN1cmUo
aGFzSW1wbEJsb2NrKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGhhc0ltcGxCbG9jaywgaXM4Qml0QmxvY2spOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAorICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxf
aGFzaEFuZEZsYWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0lt
cGw6OmZsYWdJczhCaXQoKSkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dCbG9jayksIHVuc3Vy
ZShpczhCaXRCbG9jaykpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0
QmxvY2ssIHNsb3dCbG9jayk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9v
dXQubG9hZFB0cihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfZGF0YSk7CisgICAgICAg
IAorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3BhZ2F0ZSBicmFuY2ggd2VpZ2h0IGRh
dGEgdG8gdGhlIGNhc2VzIG9mIHRoaXMgc3dpdGNoLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY4CisgICAgICAgIAorICAgICAgICBWZWN0
b3I8U3RyaW5nU3dpdGNoQ2FzZT4gY2FzZXM7CisgICAgICAgIGZvciAoREZHOjpTd2l0Y2hDYXNl
IG15Q2FzZSA6IGRhdGEtPmNhc2VzKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN0cmluZ1N3
aXRjaENhc2UobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSwgbG93QmxvY2sobXlDYXNlLnRhcmdl
dC5ibG9jaykpKTsKKyAgICAgICAgc3RkOjpzb3J0KGNhc2VzLmJlZ2luKCksIGNhc2VzLmVuZCgp
KTsKKyAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZShkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2Fz
ZXMsIDAsIDAsIGNhc2VzLnNpemUoKSwgMCwgZmFsc2UpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dCbG9jaywgbGFzdE5leHQpOworICAgICAgICBzd2l0Y2hTdHJpbmdTbG93KGRhdGEs
IHN0cmluZyk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBjb2RlIGZvciBzdHJpbmcgc3dpdGNo
aW5nIGlzIGJhc2VkIGNsb3NlbHkgb24gdGhlIHNhbWUgY29kZSBpbiB0aGUgREZHIGJhY2tlbmQu
IFdoaWxlIGl0CisgICAgLy8gd291bGQgYmUgbmljZSB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBz
aW1pbGFyLWxvb2tpbmcgY29kZSwgaXQgc2VlbXMgbGlrZSB0aGlzIGlzIG9uZSBvZgorICAgIC8v
IHRob3NlIGFsZ29yaXRobXMgd2hlcmUgZmFjdG9yaW5nIG91dCB0aGUgY29tbW9uIGJpdHMgd291
bGQgcmVzdWx0IGluIG1vcmUgY29kZSB0aGFuIGp1c3QKKyAgICAvLyBkdXBsaWNhdGluZy4KKyAg
ICAKKyAgICBzdHJ1Y3QgU3RyaW5nU3dpdGNoQ2FzZSB7CisgICAgICAgIFN0cmluZ1N3aXRjaENh
c2UoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZ1N3aXRjaENhc2UoU3RyaW5nSW1wbCog
c3RyaW5nLCBMQmFzaWNCbG9jayB0YXJnZXQpCisgICAgICAgICAgICA6IHN0cmluZyhzdHJpbmcp
CisgICAgICAgICAgICAsIHRhcmdldCh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFN0cmluZ1N3aXRjaENhc2UmIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nTGVzc1RoYW4oKnN0cmluZywg
Km90aGVyLnN0cmluZyk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFN0cmluZ0ltcGwq
IHN0cmluZzsKKyAgICAgICAgTEJhc2ljQmxvY2sgdGFyZ2V0OworICAgIH07CisgICAgCisgICAg
c3RydWN0IENoYXJhY3RlckNhc2UgeworICAgICAgICBDaGFyYWN0ZXJDYXNlKCkKKyAgICAgICAg
ICAgIDogY2hhcmFjdGVyKDApCisgICAgICAgICAgICAsIGJlZ2luKDApCisgICAgICAgICAgICAs
IGVuZCgwKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENoYXJhY3Rl
ckNhc2UoTENoYXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBiZWdpbiwgdW5zaWduZWQgZW5kKQorICAg
ICAgICAgICAgOiBjaGFyYWN0ZXIoY2hhcmFjdGVyKQorICAgICAgICAgICAgLCBiZWdpbihiZWdp
bikKKyAgICAgICAgICAgICwgZW5kKGVuZCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBDaGFyYWN0ZXJDYXNlJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3RlciA8IG90aGVyLmNoYXJh
Y3RlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTENoYXIgY2hhcmFjdGVyOworICAg
ICAgICB1bnNpZ25lZCBiZWdpbjsKKyAgICAgICAgdW5zaWduZWQgZW5kOworICAgIH07CisgICAg
CisgICAgdm9pZCBzd2l0Y2hTdHJpbmdSZWN1cnNlKAorICAgICAgICBTd2l0Y2hEYXRhKiBkYXRh
LCBMVmFsdWUgYnVmZmVyLCBMVmFsdWUgbGVuZ3RoLCBjb25zdCBWZWN0b3I8U3RyaW5nU3dpdGNo
Q2FzZT4mIGNhc2VzLAorICAgICAgICB1bnNpZ25lZCBudW1DaGVja2VkLCB1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kLCB1bnNpZ25lZCBhbHJlYWR5Q2hlY2tlZExlbmd0aCwKKyAgICAgICAg
dW5zaWduZWQgY2hlY2tlZEV4YWN0TGVuZ3RoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sg
ZmFsbFRocm91Z2ggPSBsb3dCbG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jayk7CisgICAgICAg
IAorICAgICAgICBpZiAoYmVnaW4gPT0gZW5kKSB7CisgICAgICAgICAgICBtX291dC5qdW1wKGZh
bGxUaHJvdWdoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgbWluTGVuZ3RoID0gY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCk7
CisgICAgICAgIHVuc2lnbmVkIGNvbW1vbkNoYXJzID0gbWluTGVuZ3RoOworICAgICAgICBib29s
IGFsbExlbmd0aHNFcXVhbCA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2lu
ICsgMTsgaSA8IGVuZDsgKytpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBteUNvbW1vbkNoYXJz
ID0gbnVtQ2hlY2tlZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxpbWl0ID0gc3RkOjptaW4oY2Fz
ZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCksIGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbnVtQ2hlY2tlZDsgaiA8IGxpbWl0OyArK2op
IHsKKyAgICAgICAgICAgICAgICBpZiAoY2FzZXNbYmVnaW5dLnN0cmluZy0+YXQoaikgIT0gY2Fz
ZXNbaV0uc3RyaW5nLT5hdChqKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgbXlDb21tb25DaGFycysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29t
bW9uQ2hhcnMgPSBzdGQ6Om1pbihjb21tb25DaGFycywgbXlDb21tb25DaGFycyk7CisgICAgICAg
ICAgICBpZiAobWluTGVuZ3RoICE9IGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgYWxsTGVuZ3Roc0VxdWFsID0gZmFsc2U7CisgICAgICAgICAgICBtaW5MZW5ndGgg
PSBzdGQ6Om1pbihtaW5MZW5ndGgsIGNhc2VzW2ldLnN0cmluZy0+bGVuZ3RoKCkpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoY2hlY2tlZEV4YWN0TGVuZ3RoKSB7CisgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgYWxyZWFkeUNoZWNrZWRMZW5ndGggPT0g
bWluTGVuZ3RoKTsKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBhbGxM
ZW5ndGhzRXF1YWwpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgbWluTGVuZ3RoID49IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghYWxsTGVuZ3Roc0VxdWFsICYmIGFscmVhZHlDaGVja2VkTGVuZ3RoIDwgbWluTGVu
Z3RoKQorICAgICAgICAgICAgbV9vdXQuY2hlY2sobV9vdXQuYmVsb3cobGVuZ3RoLCBtX291dC5j
b25zdEludDMyKG1pbkxlbmd0aCkpLCB1bnN1cmUoZmFsbFRocm91Z2gpKTsKKyAgICAgICAgaWYg
KGFsbExlbmd0aHNFcXVhbCAmJiAoYWxyZWFkeUNoZWNrZWRMZW5ndGggPCBtaW5MZW5ndGggfHwg
IWNoZWNrZWRFeGFjdExlbmd0aCkpCisgICAgICAgICAgICBtX291dC5jaGVjayhtX291dC5ub3RF
cXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVuZ3RoKSksIHVuc3VyZShmYWxsVGhy
b3VnaCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtQ2hlY2tlZDsg
aSA8IGNvbW1vbkNoYXJzOyArK2kpIHsKKyAgICAgICAgICAgIG1fb3V0LmNoZWNrKAorICAgICAg
ICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
OFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hhcmFjdGVyczhbaV0pLAorICAgICAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PHVpbnQxNl90PihjYXNlc1tiZWdp
bl0uc3RyaW5nLT5hdChpKSkpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoZmFsbFRocm91Z2gp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG1pbkxlbmd0aCA9PSBjb21tb25D
aGFycykgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSBvbmUgb2YgdGhl
IGNhc2VzIGlzIGEgcHJlZml4IG9mIGFsbCBvZiB0aGUgb3RoZXIgY2FzZXMuCisgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGNoZWNrZWQgdGhhdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgcHJl
Zml4IG9mIGFsbCBvZiB0aGUgY2FzZXMsCisgICAgICAgICAgICAvLyBzbyB3ZSBqdXN0IGNoZWNr
IGxlbmd0aCB0byBqdW1wIHRvIHRoYXQgY2FzZS4KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2JlZ2luXS5zdHJpbmctPmxlbmd0aCgp
ID09IGNvbW1vbkNoYXJzKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJlZ2luICsg
MTsgaSA8IGVuZDsgKytpKQorICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9u
b2RlLCBjYXNlc1tpXS5zdHJpbmctPmxlbmd0aCgpID4gY29tbW9uQ2hhcnMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFsKSB7CisgICAgICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVuZCA9PSBiZWdpbiArIDEpOworICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY2FzZXNbYmVnaW5dLnRhcmdldCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5j
aGVjaygKKyAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsZW5ndGgsIG1fb3V0LmNvbnN0SW50
MzIoY29tbW9uQ2hhcnMpKSwKKyAgICAgICAgICAgICAgICB1bnN1cmUoY2FzZXNbYmVnaW5dLnRh
cmdldCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSd2ZSBjaGVja2VkIGlmIHRo
ZSBsZW5ndGggaXMgPj0gbWluTGVuZ3RoLCBhbmQgdGhlbiB3ZSBjaGVja2VkIGlmIHRoZSBsZW5n
dGggaXMKKyAgICAgICAgICAgIC8vID09IGNvbW1vbkNoYXJzLiBXZSBnZXQgdG8gdGhpcyBwb2lu
dCBpZiBpdCBpcyA+PSBtaW5MZW5ndGggYnV0IG5vdCA9PSBjb21tb25DaGFycy4KKyAgICAgICAg
ICAgIC8vIEhlbmNlIHdlIGtub3cgdGhhdCBpdCBub3cgbXVzdCBiZSA+IG1pbkxlbmd0aCwgaS5l
LiB0aGF0IGl0J3MgPj0gbWluTGVuZ3RoICsgMS4KKyAgICAgICAgICAgIHN3aXRjaFN0cmluZ1Jl
Y3Vyc2UoCisgICAgICAgICAgICAgICAgZGF0YSwgYnVmZmVyLCBsZW5ndGgsIGNhc2VzLCBjb21t
b25DaGFycywgYmVnaW4gKyAxLCBlbmQsIG1pbkxlbmd0aCArIDEsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB3ZSBrbm93IHRoYXQgdGhlIHN0cmluZyBpcyBsb25nZXIgdGhhbiBjb21tb25DaGFycywgYW5k
IHdlJ3ZlIG9ubHkgdmVyaWZpZWQKKyAgICAgICAgLy8gY29tbW9uQ2hhcnMuIFVzZSBhIGJpbmFy
eSBzd2l0Y2ggb24gdGhlIG5leHQgdW5jaGVja2VkIGNoYXJhY3RlciwgaS5lLgorICAgICAgICAv
LyBzdHJpbmdbY29tbW9uQ2hhcnNdLgorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGVuZCA+PSBiZWdpbiArIDIpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHVuY2hlY2tlZENoYXIgPSBtX291dC5sb2FkOFplcm9FeHQzMihidWZmZXIsIG1faGVhcHMuY2hh
cmFjdGVyczhbY29tbW9uQ2hhcnNdKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxDaGFyYWN0
ZXJDYXNlPiBjaGFyYWN0ZXJDYXNlczsKKyAgICAgICAgQ2hhcmFjdGVyQ2FzZSBjdXJyZW50Q2Fz
ZShjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChjb21tb25DaGFycyksIGJlZ2luLCBiZWdpbiArIDEp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBiZWdpbiArIDE7IGkgPCBlbmQ7ICsraSkgewor
ICAgICAgICAgICAgTENoYXIgY3VycmVudENoYXIgPSBjYXNlc1tpXS5zdHJpbmctPmF0KGNvbW1v
bkNoYXJzKTsKKyAgICAgICAgICAgIGlmIChjdXJyZW50Q2hhciAhPSBjdXJyZW50Q2FzZS5jaGFy
YWN0ZXIpIHsKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZS5lbmQgPSBpOworICAgICAgICAg
ICAgICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50Q2FzZSk7CisgICAgICAgICAgICAg
ICAgY3VycmVudENhc2UgPSBDaGFyYWN0ZXJDYXNlKGN1cnJlbnRDaGFyLCBpLCBpICsgMSk7Cisg
ICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZS5lbmQgPSBpICsg
MTsKKyAgICAgICAgfQorICAgICAgICBjaGFyYWN0ZXJDYXNlcy5hcHBlbmQoY3VycmVudENhc2Up
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrPiBjaGFyYWN0ZXJCbG9ja3M7
CisgICAgICAgIGZvciAoQ2hhcmFjdGVyQ2FzZSYgbXlDYXNlIDogY2hhcmFjdGVyQ2FzZXMpCisg
ICAgICAgICAgICBjaGFyYWN0ZXJCbG9ja3MuYXBwZW5kKEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3dpdGNoL1N3aXRjaFN0cmluZyBjYXNlIGZvciAiLCBteUNhc2UuY2hhcmFjdGVyLCAiIGF0IGlu
ZGV4ICIsIGNvbW1vbkNoYXJzKSkpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPFN3aXRjaENh
c2U+IHN3aXRjaENhc2VzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcmFj
dGVyQ2FzZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBjaGFyYWN0ZXJDYXNlc1tpIC0gMV0uY2hh
cmFjdGVyIDwgY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKTsKKyAgICAgICAgICAgIHN3aXRj
aENhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoY2hhcmFjdGVyQ2FzZXNbaV0uY2hhcmFjdGVyKSwgY2hhcmFjdGVyQmxvY2tzW2ldLCBXZWln
aHQoKSkpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKHVuY2hl
Y2tlZENoYXIsIHN3aXRjaENhc2VzLCBmYWxsVGhyb3VnaCwgV2VpZ2h0KCkpOworICAgICAgICAK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKKyAgICAg
ICAgY2hhcmFjdGVyQmxvY2tzLmFwcGVuZChsYXN0TmV4dCk7IC8vIE1ha2VzIGl0IGNvbnZlbmll
bnQgdG8gc2V0IG5leHRCbG9jay4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNo
YXJhY3RlckNhc2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGFyYWN0ZXJCbG9ja3NbaV0sIGNoYXJhY3RlckJsb2Nrc1tpICsgMV0pOworICAgICAgICAgICAg
c3dpdGNoU3RyaW5nUmVjdXJzZSgKKyAgICAgICAgICAgICAgICBkYXRhLCBidWZmZXIsIGxlbmd0
aCwgY2FzZXMsIGNvbW1vbkNoYXJzICsgMSwKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJDYXNl
c1tpXS5iZWdpbiwgY2hhcmFjdGVyQ2FzZXNbaV0uZW5kLCBtaW5MZW5ndGgsIGFsbExlbmd0aHNF
cXVhbCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bV9ub2RlLCBtX291dC5tX25leHRCbG9jayA9PSBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc3dpdGNoU3RyaW5nU2xvdyhTd2l0Y2hEYXRhKiBkYXRhLCBMVmFsdWUgc3RyaW5nKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIG91Z2h0IHRvIGJlIGFibGUgdG8gdXNlIGNvbXB1
dGVkIGdvdG9zIGhlcmUuIFdlIHdvdWxkIHNhdmUgdGhlIGxhYmVscyBvZiB0aGUKKyAgICAgICAg
Ly8gYmxvY2tzIHdlIHdhbnQgdG8ganVtcCB0bywgYW5kIHRoZW4gcmVxdWVzdCB0aGVpciBhZGRy
ZXNzZXMgYWZ0ZXIgY29tcGlsYXRpb24gY29tcGxldGVzLgorICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY5CisgICAgICAgIAorICAgICAgICBM
VmFsdWUgYnJhbmNoT2Zmc2V0ID0gdm1DYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50MzIsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFuY2hPZmZzZXQpLAor
ICAgICAgICAgICAgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpLCBzdHJpbmcpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiB0
YWJsZSA9IGNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFi
bGVJbmRleCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gY2FzZXM7Cisg
ICAgICAgIHN0ZDo6dW5vcmRlcmVkX3NldDxpbnQzMl90PiBhbHJlYWR5SGFuZGxlZDsgLy8gVGhl
c2UgbWF5IGJlIG5lZ2F0aXZlLCBvciB6ZXJvLCBvciBwcm9iYWJseSBvdGhlciBzdHVmZiwgdG9v
LiBXZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aCBIYXNoU2V0J3MgY29ybmVyIGNhc2VzIGFuZCB3
ZSBkb24ndCByZWFsbHkgY2FyZSBhYm91dCB0aHJvdWdocHV0IGhlcmUuCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLT5jYXNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBmYWN0IHRoYXQgd2UncmUgdXNpbmcgdGhlIGJ5dGVjb2RlJ3Mgc3dp
dGNoIHRhYmxlIG1lYW5zIHRoYXQgdGhlCisgICAgICAgICAgICAvLyBmb2xsb3dpbmcgREZHIElS
IHRyYW5zZm9ybWF0aW9uIHdvdWxkIGJlIGludmFsaWQuCisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gT3JpZ2luYWwgY29kZToKKyAgICAgICAgICAgIC8vICAgICBzd2l0Y2ggKHYpIHsK
KyAgICAgICAgICAgIC8vICAgICBjYXNlICJmb28iOgorICAgICAgICAgICAgLy8gICAgIGNhc2Ug
ImJhciI6CisgICAgICAgICAgICAvLyAgICAgICAgIHRoaW5ncygpOworICAgICAgICAgICAgLy8g
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Ly8gICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gTmV3IGNvZGU6CisgICAgICAgICAgICAvLyAgICAgc3dpdGNoICh2KSB7
CisgICAgICAgICAgICAvLyAgICAgY2FzZSAiZm9vIjoKKyAgICAgICAgICAgIC8vICAgICAgICAg
aW5zdHJ1bWVudEZvbygpOworICAgICAgICAgICAgLy8gICAgICAgICBnb3RvIF90aGluZ3M7Cisg
ICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKKyAgICAgICAgICAgIC8vICAgICAgICAgaW5z
dHJ1bWVudEJhcigpOworICAgICAgICAgICAgLy8gICAgIF90aGluZ3M6CisgICAgICAgICAgICAv
LyAgICAgICAgIHRoaW5ncygpOworICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIC8vICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIC8vICAgICB9CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTHVja2ls
eSwgd2UgZG9uJ3QgY3VycmVudGx5IGRvIGFueSBzdWNoIHRyYW5zZm9ybWF0aW9uLiBCdXQgaXQn
cyBraW5kIG9mIHNpbGx5IHRoYXQKKyAgICAgICAgICAgIC8vIHRoaXMgaXMgYW4gaXNzdWUuCisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0
NjM1CisgICAgICAgICAgICAKKyAgICAgICAgICAgIERGRzo6U3dpdGNoQ2FzZSBteUNhc2UgPSBk
YXRhLT5jYXNlc1tpXTsKKyAgICAgICAgICAgIFN0cmluZ0p1bXBUYWJsZTo6U3RyaW5nT2Zmc2V0
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPQorICAgICAgICAgICAgICAgIHRhYmxlLm9mZnNldFRhYmxl
LmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7CisgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgaXRlciAhPSB0YWJsZS5vZmZzZXRUYWJsZS5lbmQoKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghYWxyZWFkeUhhbmRsZWQuaW5zZXJ0KGl0ZXItPnZh
bHVlLmJyYW5jaE9mZnNldCkuc2Vjb25kKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSgKKyAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKGl0ZXItPnZhbHVlLmJyYW5jaE9mZnNldCksCisgICAgICAgICAgICAgICAg
bG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jayksIFdlaWdodChteUNhc2UudGFyZ2V0LmNvdW50
KSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlv
bigKKyAgICAgICAgICAgIGJyYW5jaE9mZnNldCwgY2FzZXMsIGxvd0Jsb2NrKGRhdGEtPmZhbGxU
aHJvdWdoLmJsb2NrKSwKKyAgICAgICAgICAgIFdlaWdodChkYXRhLT5mYWxsVGhyb3VnaC5jb3Vu
dCkpOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciBhdCB0aGUgcG9pbnQg
b2YgY29kZSBnZW5lcmF0aW9uIHdoZXJlIHdlIGtub3cgd2hhdCB0aGUgcmVzdWx0IHR5cGUgaXMu
CisgICAgLy8gWW91IGNhbiBlbWl0IHdoYXRldmVyIGNvZGUgeW91IGxpa2UgYXQgdGhhdCBwb2lu
dC4gRXhwZWN0cyB5b3UgdG8gdGVybWluYXRlIHRoZSBiYXNpYyBibG9jay4KKyAgICAvLyBXaGVu
IGJ1aWxkVHlwZU9mKCkgcmV0dXJucywgaXQgd2lsbCBoYXZlIHRlcm1pbmF0ZWQgYWxsIGJhc2lj
IGJsb2NrcyB0aGF0IGl0IGNyZWF0ZWQuIFNvLCBpZgorICAgIC8vIHlvdSBhcmVuJ3QgdXNpbmcg
dGhpcyBhcyB0aGUgdGVybWluYXRvciBvZiBhIGhpZ2gtbGV2ZWwgYmxvY2ssIHlvdSBzaG91bGQg
Y3JlYXRlIHlvdXIgb3duCisgICAgLy8gY29udGluYXRpb24gYW5kIHNldCBpdCBhcyB0aGUgbmV4
dEJsb2NrIChtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0aW9uKSkgYmVmb3Jl
CisgICAgLy8gY2FsbGluZyB0aGlzLiBGb3IgZXhhbXBsZToKKyAgICAvLworICAgIC8vIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXkgY29udGludWF0
aW9uIikpOworICAgIC8vIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CisgICAgLy8gYnVpbGRUeXBlT2YoCisgICAgLy8gICAg
IGNoaWxkLCB2YWx1ZSwKKyAgICAvLyAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUpIHsKKyAgICAv
LyAgICAgICAgICBkbyB0aGluZ3M7CisgICAgLy8gICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgIC8vICAgICB9KTsKKyAgICAvLyBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
YnVpbGRUeXBlT2YoRWRnZSBjaGlsZCwgTFZhbHVlIHZhbHVlLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisg
ICAgICAgIC8vIEltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBicmFuY2hpbmcgc3RydWN0dXJlOgor
ICAgICAgICAvLworICAgICAgICAvLyBpZiAoaXMgY2VsbCkgeworICAgICAgICAvLyAgICAgaWYg
KGlzIG9iamVjdCkgeworICAgICAgICAvLyAgICAgICAgIGlmIChpcyBmdW5jdGlvbikgeworICAg
ICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIC8vICAgICAgICAg
fSBlbHNlIGlmIChkb2Vzbid0IGhhdmUgY2FsbCB0cmFwIGFuZCBkb2Vzbid0IG1hc3F1ZXJhZGUg
YXMgdW5kZWZpbmVkKSB7CisgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBvYmplY3QKKyAg
ICAgICAgLy8gICAgICAgICB9IGVsc2UgeworICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4g
c2xvd1BhdGgoKTsKKyAgICAgICAgLy8gICAgICAgICB9CisgICAgICAgIC8vICAgICB9IGVsc2Ug
aWYgKGlzIHN0cmluZykgeworICAgICAgICAvLyAgICAgICAgIHJldHVybiBzdHJpbmcKKyAgICAg
ICAgLy8gICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN5bWJvbAorICAg
ICAgICAvLyAgICAgfQorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bWJlcikgeworICAgICAg
ICAvLyAgICAgcmV0dXJuIG51bWJlcgorICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIG51bGwpIHsK
KyAgICAgICAgLy8gICAgIHJldHVybiBvYmplY3QKKyAgICAgICAgLy8gfSBlbHNlIGlmIChpcyBi
b29sZWFuKSB7CisgICAgICAgIC8vICAgICByZXR1cm4gYm9vbGVhbgorICAgICAgICAvLyB9IGVs
c2UgeworICAgICAgICAvLyAgICAgcmV0dXJuIHVuZGVmaW5lZAorICAgICAgICAvLyB9CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiYnVpbGRUeXBlT2YgY2VsbCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBvYmplY3RD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBvYmplY3QgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgZnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJidWlsZFR5cGVPZiBmdW5jdGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3RG
dW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBmdW5j
dGlvbiBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayByZWFsbHlPYmplY3RDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiByZWFsbHkgb2JqZWN0IGNhc2UiKSk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWls
ZFR5cGVPZiBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHVucmVhY2hhYmxlID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiB1bnJlYWNoYWJsZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm90T2JqZWN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVp
bGRUeXBlT2Ygbm90IG9iamVjdCBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBzdHJpbmdD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzdHJpbmcgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgc3ltYm9sQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
YnVpbGRUeXBlT2Ygc3ltYm9sIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxD
YXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgY2VsbCBjYXNlIikp
OworICAgICAgICBMQmFzaWNCbG9jayBudW1iZXJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJidWlsZFR5cGVPZiBudW1iZXIgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90TnVt
YmVyQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bWJlciBj
YXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBub3ROdWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IG51bGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYm9vbGVhbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGJvb2xl
YW4gY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgdW5kZWZpbmVkIGNhc2UiKSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVu
c3VyZShjZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsQ2FzZSkpOworICAgICAgICAKKyAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgb2JqZWN0Q2Fz
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGls
ZCkpLCB1bnN1cmUob2JqZWN0Q2FzZSksIHVuc3VyZShub3RPYmplY3RDYXNlKSk7CisgICAgICAg
IAorICAgICAgICBtX291dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBmdW5jdGlvbkNhc2UpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0Z1bmN0aW9uKHZhbHVlLCBwcm92ZW5U
eXBlKGNoaWxkKSAmIFNwZWNPYmplY3QpLAorICAgICAgICAgICAgdW5zdXJlKGZ1bmN0aW9uQ2Fz
ZSksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGZ1bmN0aW9uQ2FzZSwgbm90RnVuY3Rpb25DYXNlKTsKKyAgICAgICAgZnVuY3RvcihU
eXBlb2ZUeXBlOjpGdW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RGdW5jdGlvbkNhc2UsIHJlYWxseU9iamVjdENhc2UpOworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBpc0V4b3RpY0ZvclR5cGVvZih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkg
JiAoU3BlY09iamVjdCAtIFNwZWNGdW5jdGlvbikpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQ
YXRoKSwgdXN1YWxseShyZWFsbHlPYmplY3RDYXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhyZWFsbHlPYmplY3RDYXNlLCBzbG93UGF0aCk7CisgICAgICAgIGZ1bmN0b3Io
VHlwZW9mVHlwZTo6T2JqZWN0KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dQYXRoLCB1bnJlYWNoYWJsZSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsYXp5U2xvd1Bh
dGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVj
dCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7Cisg
ICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlLCAzPiBjYXNlczsKKyAgICAgICAgY2FzZXMuYXBwZW5k
KFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZU
eXBlOjpVbmRlZmluZWQpKSwgdW5kZWZpbmVkQ2FzZSkpOworICAgICAgICBjYXNlcy5hcHBlbmQo
U3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5
cGU6Ok9iamVjdCkpLCByZWFsbHlPYmplY3RDYXNlKSk7CisgICAgICAgIGNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlw
ZTo6RnVuY3Rpb24pKSwgZnVuY3Rpb25DYXNlKSk7CisgICAgICAgIG1fb3V0LnN3aXRjaEluc3Ry
dWN0aW9uKG1fb3V0LmNhc3RUb0ludDMyKHJlc3VsdCksIGNhc2VzLCB1bnJlYWNoYWJsZSwgV2Vp
Z2h0KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5yZWFjaGFibGUsIG5v
dE9iamVjdENhc2UpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8obm90T2JqZWN0Q2FzZSwgc3RyaW5nQ2FzZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKGNo
aWxkKSAmIChTcGVjQ2VsbCAtIFNwZWNPYmplY3QpKSwKKyAgICAgICAgICAgIHVuc3VyZShzdHJp
bmdDYXNlKSwgdW5zdXJlKHN5bWJvbENhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHN0cmluZ0Nhc2UsIHN5bWJvbENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6OlN0cmluZyk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhzeW1ib2xDYXNl
LCBub3RDZWxsQ2FzZSk7CisgICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3ltYm9sKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBudW1iZXJDYXNlKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUsIHByb3Zl
blR5cGUoY2hpbGQpICYgflNwZWNDZWxsKSwKKyAgICAgICAgICAgIHVuc3VyZShudW1iZXJDYXNl
KSwgdW5zdXJlKG5vdE51bWJlckNhc2UpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG51bWJlckNhc2UsIG5vdE51bWJlckNhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5
cGU6Ok51bWJlcik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdW1iZXJD
YXNlLCBub3ROdWxsQ2FzZSk7CisgICAgICAgIExWYWx1ZSBpc051bGw7CisgICAgICAgIGlmIChw
cm92ZW5UeXBlKGNoaWxkKSAmIFNwZWNPdGhlcikKKyAgICAgICAgICAgIGlzTnVsbCA9IG1fb3V0
LmVxdWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBpc051bGwgPSBtX291dC5ib29sZWFuRmFsc2U7CisgICAgICAgIG1fb3V0
LmJyYW5jaChpc051bGwsIHVuc3VyZShyZWFsbHlPYmplY3RDYXNlKSwgdW5zdXJlKG5vdE51bGxD
YXNlKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhub3ROdWxsQ2FzZSwgYm9v
bGVhbkNhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0Jvb2xlYW4o
dmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgfihTcGVjQ2VsbCB8IFNwZWNGdWxsTnVtYmVyKSks
CisgICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1bnN1cmUodW5kZWZpbmVkQ2FzZSkp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm9vbGVhbkNhc2UsIHVuZGVmaW5l
ZENhc2UpOworICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkJvb2xlYW4pOworICAgICAgICAK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8odW5kZWZpbmVkQ2FzZSwgbGFzdE5leHQpOworICAgICAg
ICBmdW5jdG9yKFR5cGVvZlR5cGU6OlVuZGVmaW5lZCk7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSwgZG91YmxlIGxvdywgZG91YmxlIGhp
Z2gsIGJvb2wgaXNTaWduZWQgPSB0cnVlKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgZ3Jl
YXRFbm91Z2ggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50MzIgZ3JlYXRFbm91
Z2giKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHdpdGhpblJhbmdlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJkb3VibGVUb0ludDMyIHdpdGhpblJhbmdlIikpOworICAgICAgICBMQmFzaWNCbG9j
ayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiZG91YmxlVG9JbnQzMiBzbG93UGF0
aCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKKyAgICAgICAgCisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbChk
b3VibGVWYWx1ZSwgbV9vdXQuY29uc3REb3VibGUobG93KSksCisgICAgICAgICAgICB1bnN1cmUo
Z3JlYXRFbm91Z2gpLCB1bnN1cmUoc2xvd1BhdGgpKTsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZ3JlYXRFbm91Z2gsIHdpdGhpblJhbmdl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZG91YmxlTGVzc1Ro
YW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5jb25zdERvdWJsZShoaWdoKSksCisgICAgICAg
ICAgICB1bnN1cmUod2l0aGluUmFuZ2UpLCB1bnN1cmUoc2xvd1BhdGgpKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHdpdGhpblJhbmdlLCBzbG93UGF0aCk7CisgICAgICAgIExW
YWx1ZSBmYXN0UmVzdWx0OworICAgICAgICBpZiAoaXNTaWduZWQpCisgICAgICAgICAgICBmYXN0
UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBmYXN0UmVzdWx0ID0gbV9vdXQuZG91YmxlVG9VSW50KGRvdWJsZVZhbHVlKTsK
KyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGZhc3RSZXN1bHQpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihtX291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24odG9JbnQz
MiksIGRvdWJsZVZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cyk7CisgICAgfQor
ICAgIAorICAgIExWYWx1ZSBkb3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChPdXRwdXQ6Omhhc1NlbnNpYmxlRG91YmxlVG9JbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBzZW5zaWJsZURvdWJsZVRvSW50MzIoZG91YmxlVmFsdWUpOworICAgICAgICAK
KyAgICAgICAgZG91YmxlIGxpbWl0ID0gcG93KDIsIDMxKSAtIDE7CisgICAgICAgIHJldHVybiBk
b3VibGVUb0ludDMyKGRvdWJsZVZhbHVlLCAtbGltaXQsIGxpbWl0KTsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIHNlbnNpYmxlRG91YmxlVG9JbnQzMihMVmFsdWUgZG91YmxlVmFsdWUpCisgICAg
eworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
c2Vuc2libGUgZG91YmxlVG9JbnQzMiBzbG93IHBhdGgiKSk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic2Vuc2libGUgZG91YmxlVG9J
bnQzMiBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9
IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0UmVzdWx0VmFsdWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChmYXN0UmVzdWx0VmFsdWUsIG1fb3V0
LmNvbnN0SW50MzIoMHg4MDAwMDAwMCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwg
dXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBt
X291dC5jYWxsKG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24odG9JbnQzMiksIGRvdWJsZVZh
bHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICByZXR1
cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIGNvZGUgZ2VuZXJh
dG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUgdXNpbmcgb3VyCisgICAgLy8gb3du
IE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xvdyBwYXRocyB0aGF0IGludm9s
dmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAorICAgIC8vIHRvIHBheSB0aGUgcHJp
Y2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBn
ZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKKyAgICAvLyBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhh
bmQsIGEgbGF6eSBzbG93IHBhdGggYWx3YXlzIGluY3VycyB0aGUgY29zdCBvZiB0d28gYWRkaXRp
b25hbCBqdW1wcy4KKyAgICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBh
bGxvY2F0aW9uIHN0YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZlciBMTFZNIGRpZCwgc28geW91Cisg
ICAgLy8gaGF2ZSB0byB1c2UgYSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgdG8gdHJ5IHRvIHVz
ZSBzb21lIHVudXNlZCByZWdpc3RlcnMgYW5kIHlvdSBtYXkgaGF2ZQorICAgIC8vIHRvIHNwaWxs
IHRvIHRvcCBvZiBzdGFjayBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFi
bGUuCisgICAgLy8KKyAgICAvLyBMYXp5IHNsb3cgcGF0aHMgaW52b2x2ZSB0aHJlZSBkaWZmZXJl
bnQgc3RhZ2VzIG9mIGV4ZWN1dGlvbi4gRWFjaCBzdGFnZSBoYXMgdW5pcXVlCisgICAgLy8gY2Fw
YWJpbGl0aWVzIGFuZCBrbm93bGVkZ2UuIFRoZSBzdGFnZXMgYXJlOgorICAgIC8vCisgICAgLy8g
MSkgREZHLT5MTFZNIGxvd2VyaW5nLCBpLmUuIGNvZGUgdGhhdCBydW5zIGluIHRoaXMgcGhhc2Uu
IExvd2VyaW5nIGlzIHRoZSBsYXN0IHRpbWUgeW91IHdpbGwKKyAgICAvLyAgICBoYXZlIGFjY2Vz
cyB0byBMVmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBMVmFsdWUgdGhhdCBuZWVkcyB0byBiZSBmZWQg
YXMgaW5wdXQgdG8gYSBsYXp5IHNsb3cKKyAgICAvLyAgICBwYXRoLCB0aGVuIHlvdSBtdXN0IHBh
c3MgaXQgYXMgYW4gYXJndW1lbnQgaGVyZSAoYXMgb25lIG9mIHRoZSB2YXJhcmdzIGFyZ3VtZW50
cyBhZnRlciB0aGUKKyAgICAvLyAgICBmdW5jdG9yKS4gQnV0LCBsb3dlcmluZyBkb2Vzbid0IGtu
b3cgd2hpY2ggcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhvc2UgTFZhbHVlcy4gSGVuY2UK
KyAgICAvLyAgICB5b3UgcGFzcyBhIGxhbWJkYSB0byBsYXp5U2xvd1BhdGgoKSBhbmQgdGhhdCBs
YW1iZGEgd2lsbCBydW4gZHVyaW5nIHN0YWdlICgyKToKKyAgICAvLworICAgIC8vIDIpIEZUTENv
bXBpbGUuY3BwJ3MgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzLiBUaGlzIGNvZGUgaXMgdGhl
IG9ubHkgc3RhZ2UgYXQgd2hpY2ggd2Uga25vdworICAgIC8vICAgIHRoZSBtYXBwaW5nIGZyb20g
YXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRoZSByZWdpc3RlcnMg
dGhhdCBMTFZNCisgICAgLy8gICAgc2VsZWN0ZWQgZm9yIHRob3NlIGFyZ3VtZW50cy4gWW91IGRv
bid0IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGNvZGUgaGVyZSwgc2luY2UgdGhlbgor
ICAgIC8vICAgIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0dWFsbHkgYmUgbGF6aWx5IGdlbmVy
YXRlZC4gSW5zdGVhZCwgeW91IHdhbnQgdG8gc2F2ZSB0aGUKKyAgICAvLyAgICByZWdpc3RlcnMg
YmVpbmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVmZXIgY29kZSBnZW5lcmF0aW9uIHRv
IHN0YWdlICgzKSBieSBjcmVhdGluZworICAgIC8vICAgIGFuZCByZXR1cm5pbmcgYSBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcjoKKyAgICAvLworICAgIC8vIDMpIExhenlTbG93UGF0aCdzIGdlbmVy
YXRlKCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNwb25zZSB0byB0aGUgbGF6eSBzbG93
IHBhdGgKKyAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBmaXJzdCB0aW1lLiBJdCB3aWxsIGNh
bGwgdGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFnZSAoMikuCisgICAgLy8KKyAgICAv
LyBOb3RlIHRoYXQgZWFjaCB0aW1lIHlvdSBpbnZva2Ugc3RhZ2UgKDEpLCBzdGFnZSAoMikgbWF5
IGJlIGludm9rZWQgemVybywgb25lLCBvciBtYW55IHRpbWVzLgorICAgIC8vIFN0YWdlICgyKSB3
aWxsIHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFnZSAoMSkuIEJ1dCwgTExWTSBtYXkg
a2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKKyAgICAvLyBjYXNlIHN0YWdlICgyKSB3b24ndCBydW4u
IExMVk0gbWF5IGR1cGxpY2F0ZSB0aGUgY29kZSAoZm9yIGV4YW1wbGUgdmlhIGp1bXAgdGhyZWFk
aW5nKSwKKyAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMgdG8geW91ciBzdGFnZSAoMikgbGFt
YmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9yIG9uY2UgZm9yIGVhY2gKKyAgICAv
LyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8gdGltZXMgaWYgdGhlIHNsb3cgcGF0
aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUgZm9yCisgICAgLy8gd2hlbmV2ZXIg
eW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNtLgorICAgIC8vCisgICAgLy8gQSB0
eXBpY2FsIHVzZSBvZiBsYXp5U2xvd1BhdGgoKSB3aWxsIGxvb2sgbGlrZSB0aGUgZXhhbXBsZSBi
ZWxvdywgd2hpY2gganVzdCBjcmVhdGVzIGEgc2xvdworICAgIC8vIHBhdGggdGhhdCBhZGRzIHNv
bWUgdmFsdWUgdG8gdGhlIGlucHV0IGFuZCByZXR1cm5zIGl0LgorICAgIC8vCisgICAgLy8gLy8g
U3RhZ2UgKDEpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0IGNoYW5jZSB0byBmaWd1cmUgb3V0
IHdoaWNoIExWYWx1ZXMgdG8gdXNlIGFzIGlucHV0cy4KKyAgICAvLyAvLyBOb3RpY2UgaG93IHdl
IHBhc3MgImlucHV0IiBhcyBhbiBhcmd1bWVudCB0byBsYXp5U2xvd1BhdGgoKS4KKyAgICAvLyBM
VmFsdWUgaW5wdXQgPSAuLi47CisgICAgLy8gaW50IGFkZGVuZCA9IC4uLjsKKyAgICAvLyBMVmFs
dWUgb3V0cHV0ID0gbGF6eVNsb3dQYXRoKAorICAgIC8vICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CisgICAgLy8gICAgICAgICAvLyBTdGFnZSAoMikgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3Qg
Y2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcmVnaXN0ZXJzIGFyZSB1c2VkCisgICAgLy8gICAg
ICAgICAvLyBmb3Igd2hpY2ggdmFsdWVzLiBMb2NhdGlvbiB6ZXJvIGlzIGFsd2F5cyB0aGUgcmV0
dXJuIHZhbHVlLiBZb3UgY2FuIGlnbm9yZSBpdCBpZgorICAgIC8vICAgICAgICAgLy8geW91IGRv
bid0IHdhbnQgdG8gcmV0dXJuIGFueXRoaW5nLiBMb2NhdGlvbiAxIGlzIHRoZSByZWdpc3RlciBm
b3IgdGhlIGZpcnN0CisgICAgLy8gICAgICAgICAvLyBhcmd1bWVudCB0byB0aGUgbGF6eVNsb3dQ
YXRoKCksIGkuZS4gImlucHV0Ii4gTm90ZSB0aGF0IHRoZSBMb2NhdGlvbiBvYmplY3QgY291bGQK
KyAgICAvLyAgICAgICAgIC8vIGFsc28gaG9sZCBhbiBGUFIsIGlmIHlvdSBhcmUgcGFzc2luZyBh
IGRvdWJsZS4KKyAgICAvLyAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCk7CisgICAgLy8gICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCk7CisgICAgLy8gICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVh
dGVHZW5lcmF0b3IoCisgICAgLy8gICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
TGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAvLyAgICAgICAg
ICAgICAgICAgLy8gU3RhZ2UgKDMpIGlzIGhlcmUuIFRoaXMgaXMgd2hlbiB5b3UgZ2VuZXJhdGUg
Y29kZS4gWW91IGhhdmUgYWNjZXNzIHRvIHRoZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyBy
ZWdpc3RlcnMgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMikgYmVjYXVzZSB0aGlzIGxhbWJkYSBj
bG9zZXMgb3ZlciB0aG9zZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZXMgKG91
dHB1dEdQUiBhbmQgaW5wdXRHUFIpLiBZb3UgYWxzbyBoYXZlIGFjY2VzcyB0byB3aGF0ZXZlciBl
eHRyYQorICAgIC8vICAgICAgICAgICAgICAgICAvLyBkYXRhIHlvdSBjb2xsZWN0ZWQgaW4gc3Rh
Z2UgKDEpLCBzdWNoIGFzIHRoZSBhZGRlbmQgaW4gdGhpcyBjYXNlLgorICAgIC8vICAgICAgICAg
ICAgICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGFkZGVuZCksIGlucHV0R1BSLCBvdXRwdXRH
UFIpOworICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgaGF2ZSB0byBlbmQgYnkganVtcGlu
ZyB0byBkb25lLiBUaGVyZSBpcyBub3RoaW5nIHRvIGZhbGwgdGhyb3VnaCB0by4KKyAgICAvLyAg
ICAgICAgICAgICAgICAgLy8gWW91IGNhbiBhbHNvIGp1bXAgdG8gdGhlIGV4Y2VwdGlvbiBoYW5k
bGVyIChzZWUgTGF6eVNsb3dQYXRoLmggZm9yIG1vcmUKKyAgICAvLyAgICAgICAgICAgICAgICAg
Ly8gaW5mbykuIE5vdGUgdGhhdCBjdXJyZW50bHkgeW91IGNhbm5vdCBPU1IgZXhpdC4KKyAgICAv
LyAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7Cisg
ICAgLy8gICAgICAgICAgICAgfSk7CisgICAgLy8gICAgIH0sCisgICAgLy8gICAgIGlucHV0KTsK
KyAgICAvLworICAgIC8vIFlvdSBjYW4gYmFzaWNhbGx5IHBhc3MgYXMgbWFueSBpbnB1dHMgYXMg
eW91IGxpa2UsIGVpdGhlciB1c2luZyB0aGlzIHZhcmFyZ3MgZm9ybSwgb3IgYnkKKyAgICAvLyBw
YXNzaW5nIGEgVmVjdG9yIG9mIExWYWx1ZXMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaWYg
eW91ciBzbG93IHBhdGggaXMgb25seSBkb2luZyBhIGNhbGwsIHlvdSBjYW4gdXNlIHRoZSBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcigpCisgICAgLy8gaGVscGVyLiBGb3IgZXhhbXBsZToKKyAgICAv
LworICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKKyAgICAvLyBMVmFsdWUgb3V0cHV0ID0gbGF6
eVNsb3dQYXRoKAorICAgIC8vICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgLy8gICAgICAg
ICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgLy8gICAgICAgICAgICAgb3Bl
cmF0aW9uRG9UaGluZ3MsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpKTsKKyAgICAvLyAgICAgfSwgaW5wdXQpOworICAgIC8vCisgICAgLy8gRmluYWxs
eSwgbm90ZSB0aGF0IGFsbCBvZiB0aGUgbGFtYmRhcyAtIGJvdGggdGhlIHN0YWdlICgyKSBsYW1i
ZGEgYW5kIHRoZSBzdGFnZSAoMykgbGFtYmRhIC0KKyAgICAvLyBydW4gYWZ0ZXIgdGhlIGZ1bmN0
aW9uIHRoYXQgY3JlYXRlZCB0aGVtIHJldHVybnMuIEhlbmNlLCB5b3Ugc2hvdWxkIG5vdCB1c2Ug
YnktcmVmZXJlbmNlCisgICAgLy8gY2FwdHVyZSAoaS5lLiBbJl0pIGluIGFueSBvZiB0aGVzZSBs
YW1iZGFzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBsYXp5
U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFyZ3VtZW50cy4uLiB9KTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBsYXp5U2xvd1Bh
dGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJBcmd1
bWVudHMpCisgICAgeworICAgICAgICBDb2RlT3JpZ2luIG9yaWdpbiA9IG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljOworICAgICAgICAKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBt
X291dC5wYXRjaHBvaW50KEIzOjpJbnQ2NCk7CisgICAgICAgIGZvciAoTFZhbHVlIGFyZyA6IHVz
ZXJBcmd1bWVudHMpCisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChDb25zdHJhaW5lZFZhbHVl
KGFyZywgQjM6OlZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpKTsKKworICAgICAgICBSZWZQdHI8UGF0
Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KKyAgICAgICAgICAgIHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhyZXN1bHQpOworICAgICAgICAKKyAgICAgICAg
cmVzdWx0LT5jbG9iYmVyKFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Cisg
ICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOworCisgICAgICAgIHJlc3VsdC0+c2V0
R2VuZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICBWZWN0b3I8
TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IEIzOjpWYWx1
ZVJlcCYgcmVwIDogcGFyYW1zKQorICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5k
KExvY2F0aW9uOjpmb3JWYWx1ZVJlcChyZXApKTsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gZ2VuZXJhdG9yID0gZnVuY3Rvcihsb2NhdGlvbnMpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6UGF0Y2hhYmxl
SnVtcCBwYXRjaGFibGVKdW1wID0gaml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFiZWwoKTsKKworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMudW5hdmFpbGFibGVSZWdpc3Rl
cnMoKTsKKworICAgICAgICAgICAgICAgIFJlZlB0cjxFeGNlcHRpb25UYXJnZXQ+IGV4Y2VwdGlv
blRhcmdldCA9CisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhhbmRsZS0+c2NoZWR1bGVF
eGl0Q3JlYXRpb24ocGFyYW1zKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwYXJ0
IG9mIGhhbmRsaW5nIGV4Y2VwdGlvbnMsIHdlIG5lZWQgdG8gY3JlYXRlIGEgY29uY3JldGUgT1NS
RXhpdCBoZXJlLgorICAgICAgICAgICAgICAgIC8vIERvaW5nIHNvIHNob3VsZCBhdXRvbWFnaWNh
bGx5IHJlZ2lzdGVyIGxhdGUgcGF0aHMgdGhhdCBlbWl0IGV4aXQgdGh1bmtzLgorCisgICAgICAg
ICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAorICAgICAgICAgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2Ny
YXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaGFibGVKdW1wLm1fanVtcC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXpl
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+aml0Q29kZS0+bGF6eVNsb3dQYXRo
cy5hcHBlbmQobnVsbHB0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQucHVzaFRvU2F2
ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmRleCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRvckp1bXAgPSBqaXQuanVtcCgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc28gbG9uZyBhcyB3ZSdy
ZSBoZXJlLCB3ZSBkb24ndCByZWFsbHkga25vdyBpZiBvdXIgbGF0ZSBwYXRoCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBydW5zIGJlZm9yZSBvciBhZnRlciBhbnkgb3RoZXIgbGF0ZSBwYXRo
cyB0aGF0IHdlIG1pZ2h0IGRlcGVuZCBvbiwgbGlrZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIGV4Y2VwdGlvbiB0aHVuay4KKworICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRy
PEpJVENvZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZNKiB2bSA9ICZzdGF0ZS0+Z3JhcGgubV92bTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlu
a0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxpbmsoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0b3JKdW1wLCBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2bS0+Z2V0Q1RJU3R1YigKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5j
b2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAgbGlua2VkUGF0Y2hhYmxlSnVtcCA9
IENvZGVMb2NhdGlvbkp1bXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
aW5rQnVmZmVyLmxvY2F0aW9uT2YocGF0Y2hhYmxlSnVtcCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsaW5rZWREb25lID0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGRvbmUpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqaXRDb2RlLT5jb21tb24uYWRkVW5pcXVlQ2FsbFNpdGVJbmRleChvcmlnaW4pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPExhenlT
bG93UGF0aD4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2Vk
UGF0Y2hhYmxlSnVtcCwgbGlua2VkRG9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmxhYmVsKGxpbmtCdWZmZXIpLCB1c2VkUmVnaXN0
ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxTaXRlSW5k
ZXgsIGdlbmVyYXRvcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRl
eF0gPSBXVEZNb3ZlKGxhenlTbG93UGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBF
eGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoa2luZCwg
bG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgbV9vcmlnaW4pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc3Bl
Y3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAg
ICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGlkQWxy
ZWFkeVRlcm1pbmF0ZSgpCisgICAgeworICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2Up
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBFeGl0S2luZCBleGl0S2luZCA9
IEJhZFR5cGUpCisgICAgeworICAgICAgICBhcHBlbmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hW
YWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBleGl0S2luZCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIEV4aXRLaW5kIGV4aXRLaW5kKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGhpZ2hWYWx1
ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgQVNT
RVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOworICAgICAgICBhcHBl
bmRPU1JFeGl0KGV4aXRLaW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENvbmRp
dGlvbiwgbV9vcmlnaW4pOworICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlcihoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dJbnQzMihF
ZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRT
cGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IEtub3duSW50MzJVc2UpKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRn
ZS0+YXNKU1ZhbHVlKCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgeworICAg
ICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmludDMyWmVybzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBt
X291dC5jb25zdEludDMyKHZhbHVlLmFzSW50MzIoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50MzIoZWRnZSwgdmFsdWUudmFsdWUoKSk7Cisg
ICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmljdElu
dDUyVG9JbnQzMihlZGdlLCBpbnQ1MlRvU3RyaWN0SW50NTIodmFsdWUudmFsdWUoKSkpOworICAg
ICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgYm94ZWRS
ZXN1bHQgPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAg
ICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0ludDMyLCBp
c05vdEludDMyKGJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5i
b3hJbnQzMihib3hlZFJlc3VsdCk7CisgICAgICAgICAgICBzZXRJbnQzMihlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0KKworICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0lu
dDMyKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBt
X291dC5pbnQzMlplcm87CisgICAgfQorICAgIAorICAgIGVudW0gSW50NTJLaW5kIHsgU3RyaWN0
SW50NTIsIEludDUyIH07CisgICAgTFZhbHVlIGxvd0ludDUyKEVkZ2UgZWRnZSwgSW50NTJLaW5k
IGtpbmQpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51
c2VLaW5kKCkgPT0gSW50NTJSZXBVc2UpOworICAgICAgICAKKyAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBj
YXNlIEludDUyOgorICAgICAgICAgICAgdmFsdWUgPSBtX2ludDUyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhbHVlID0g
bV9zdHJpY3RJbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBzdHJpY3RJbnQ1MlRvSW50NTIo
dmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFs
dWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBpbnQ1MlRvU3Ry
aWN0SW50NTIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhcHJvdmVuVHlwZShlZGdlKSk7
CisgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5p
bnQ2NFplcm87CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dJbnQ1MihFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwgSW50NTIpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93U3RyaWN0SW50NTIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIFN0cmljdEludDUyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBi
ZXR0ZXJVc2VTdHJpY3RJbnQ1MihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFp
c1ZhbGlkKG1faW50NTJWYWx1ZXMuZ2V0KG5vZGUpKTsKKyAgICB9CisgICAgYm9vbCBiZXR0ZXJV
c2VTdHJpY3RJbnQ1MihFZGdlIGVkZ2UpCisgICAgeworICAgICAgICByZXR1cm4gYmV0dGVyVXNl
U3RyaWN0SW50NTIoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIEludDUyS2luZCBiZXN0SW50NTJLaW5kKFQgbm9kZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1Mihub2RlKSA/IFN0cmljdEludDUyIDogSW50NTI7Cisg
ICAgfQorICAgIEludDUyS2luZCBvcHBvc2l0ZShJbnQ1MktpbmQga2luZCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIEludDUyOgorICAgICAgICAgICAgcmV0
dXJuIFN0cmljdEludDUyOworICAgICAgICBjYXNlIFN0cmljdEludDUyOgorICAgICAgICAgICAg
cmV0dXJuIEludDUyOworICAgICAgICB9CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgcmV0dXJuIEludDUyOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93V2hpY2hldmVySW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQmIGtpbmQp
CisgICAgeworICAgICAgICBraW5kID0gYmVzdEludDUyS2luZChlZGdlKTsKKyAgICAgICAgcmV0
dXJuIGxvd0ludDUyKGVkZ2UsIGtpbmQpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93Q2Vs
bChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJh
bmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBERkc6OmlzQ2VsbChlZGdlLnVz
ZUtpbmQoKSkpOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gSlNDb25zdGFu
dCkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOworICAg
ICAgICAgICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZShVbmNvdW50YWJsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIodmFs
dWUuYXNDZWxsKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkgeworICAgICAgICAgICAgTFZhbHVlIHVuY2hlY2tlZFZhbHVlID0g
dmFsdWUudmFsdWUoKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh1bmNoZWNrZWRWYWx1ZSksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENl
bGwodW5jaGVja2VkVmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRWYWx1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUs
ICEocHJvdmVuVHlwZShlZGdlKSAmIFNwZWNDZWxsKSk7CisgICAgICAgIHRlcm1pbmF0ZShVbmNv
dW50YWJsZSk7CisgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgbG93T2JqZWN0KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBt
b2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVz
ZUtpbmQoKSA9PSBPYmplY3RVc2UpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSwgbW9kZSk7CisgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93
U3RyaW5nKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGlj
T3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBt
b2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25TdHJpbmdVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gU3RyaW5nSWRlbnRVc2UpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSwgbW9kZSk7CisgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG93
U3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IFN0cmluZ0lkZW50VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBzdHJpbmcgPSBsb3dT
dHJpbmcoZWRnZSwgbW9kZSk7CisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9h
ZFB0cihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBzcGVjdWxhdGVT
dHJpbmdJZGVudChlZGdlLCBzdHJpbmcsIHN0cmluZ0ltcGwpOworICAgICAgICByZXR1cm4gc3Ry
aW5nSW1wbDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG93U3ltYm9sKEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpOworCisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UsIG1vZGUpOworICAgICAgICBzcGVjdWxhdGVTeW1ib2wo
ZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFs
dWUgbG93Tm9uTnVsbE9iamVjdChFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9k
ZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VL
aW5kKCkgPT0gT2JqZWN0VXNlKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBs
b3dDZWxsKGVkZ2UsIG1vZGUpOworICAgICAgICBzcGVjdWxhdGVOb25OdWxsT2JqZWN0KGVkZ2Us
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIExWYWx1
ZSBsb3dCb29sZWFuKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0
b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCht
b2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9
PSBCb29sZWFuVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQm9vbGVhblVzZSk7CisgICAg
ICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOworICAgICAgICAgICAgaWYgKCF2YWx1ZS5p
c0Jvb2xlYW4oKSkgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEJvb2wodmFsdWUuYXNCb29sZWFuKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9i
b29sZWFuVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVl
KSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IHZhbHVl
LnZhbHVlKCk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBq
c1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xl
YW4odW5ib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94Qm9v
bGVhbih1bmJveGVkUmVzdWx0KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4oZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2Up
ICYgU3BlY0Jvb2xlYW4pKTsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAg
ICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGxv
d0RvdWJsZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgCisgICAgICAgIExvd2Vy
ZWROb2RlVmFsdWUgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUo
KTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFwcm92ZW5UeXBlKGVkZ2Up
KTsKKyAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0
LmRvdWJsZVplcm87CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dKU1ZhbHVlKEVkZ2UgZWRn
ZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0
aW9uKQorICAgIHsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Up
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIWlzRG91YmxlKGVkZ2UudXNl
S2luZCgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtp
bmQoKSAhPSBJbnQ1MlJlcFVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWRnZS0+aGFzQ29u
c3RhbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOworCisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFs
dWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAor
ICAgICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94SW50
MzIodmFsdWUudmFsdWUoKSk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYm94
Qm9vbGVhbih2YWx1ZS52YWx1ZSgpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVmFsdWUgbm90IGRlZmlu
ZWQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBsb3dTdG9y
YWdlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X3N0b3JhZ2VWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdl
Lm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7Cisg
ICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgbm9WYWx1ZSgpLCBlZGdlLCBTcGVj
SW50MzIsCisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChtX291dC5zaWduRXh0MzJUbzY0KHJl
c3VsdCksIHZhbHVlKSk7CisgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50
NTJUb0RvdWJsZShMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuaW50
VG9Eb3VibGUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0pT
VmFsdWUoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNJbnQzMiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNJbnQzMiBjYXNl
IikpOworICAgICAgICBMQmFzaWNCbG9jayBpc0RvdWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaWN0SW50NTJUb0pTVmFsdWUgaXNEb3VibGUgY2FzZSIpKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpY3RJbnQ1MlRv
SlNWYWx1ZSBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8VmFsdWVG
cm9tQmxvY2ssIDI+IHJlc3VsdHM7CisgICAgICAgICAgICAKKyAgICAgICAgTFZhbHVlIGludDMy
VmFsdWUgPSBtX291dC5jYXN0VG9JbnQzMih2YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIG1fb3V0LmVxdWFsKG1fb3V0LnNpZ25FeHQzMlRvNjQoaW50MzJWYWx1ZSks
IHZhbHVlKSwKKyAgICAgICAgICAgIHVuc3VyZShpc0ludDMyKSwgdW5zdXJlKGlzRG91YmxlKSk7
CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGlzSW50MzIsIGlzRG91YmxlKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1f
b3V0LmFuY2hvcihib3hJbnQzMihpbnQzMlZhbHVlKSkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhpc0RvdWJsZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcihib3hEb3VibGUobV9vdXQuaW50VG9Eb3VibGUodmFsdWUpKSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgcmVzdWx0cyk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSW50
NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnNobCh2YWx1ZSwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7CisgICAgfQorICAg
IAorICAgIExWYWx1ZSBpbnQ1MlRvU3RyaWN0SW50NTIoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
aW50NTJTaGlmdEFtb3VudCkpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNJbnQzMihMVmFs
dWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAg
ICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNJbnQzMikp
CisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmVP
ckVxdWFsKGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIExWYWx1ZSBpc05v
dEludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
CisgICAgeworICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwg
flNwZWNJbnQzMikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4g
bV9vdXQuYmVsb3coanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgTFZhbHVl
IHVuYm94SW50MzIoTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQu
Y2FzdFRvSW50MzIoanNWYWx1ZSk7CisgICAgfQorICAgIExWYWx1ZSBib3hJbnQzMihMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkKG1fb3V0Lnplcm9FeHQodmFs
dWUsIG1fb3V0LmludDY0KSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICB9CisgICAgCisgICAgTFZh
bHVlIGlzQ2VsbE9yTWlzYyhMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUsIFNwZWNDZWxsIHwgU3BlY01pc2MpKQorICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVO
dW1iZXIpOworICAgIH0KKyAgICBMVmFsdWUgaXNOb3RDZWxsT3JNaXNjKExWYWx1ZSBqc1ZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAo
TFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgfihTcGVjQ2VsbCB8IFNwZWNNaXNj
KSkpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQudGVz
dE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpOworICAgIH0KKyAgICAKKyAgICBM
VmFsdWUgdW5ib3hEb3VibGUoTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
bV9vdXQuYml0Q2FzdChtX291dC5hZGQoanNWYWx1ZSwgbV90YWdUeXBlTnVtYmVyKSwgbV9vdXQu
ZG91YmxlVHlwZSk7CisgICAgfQorICAgIExWYWx1ZSBib3hEb3VibGUoTFZhbHVlIGRvdWJsZVZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnN1YihtX291dC5iaXRDYXN0KGRvdWJs
ZVZhbHVlLCBtX291dC5pbnQ2NCksIG1fdGFnVHlwZU51bWJlcik7CisgICAgfQorICAgIAorICAg
IExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVl
KQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0ludDUy
IHVuYm94aW5nIGRvdWJsZSBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0ludDUyIHVuYm94aW5nIGNvbnRp
bnVhdGlvbiIpKTsKKyAgICAgICAgICAgIAorICAgICAgICBMVmFsdWUgaXNOb3RJbnQzMjsKKyAg
ICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNJbnQzMikp
CisgICAgICAgICAgICBpc05vdEludDMyID0gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBl
bHNlIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY0ludDMyKSkK
KyAgICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29sZWFuVHJ1ZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlzTm90SW50MzIoYm94ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91YmxlQ2FzZSksIHVu
c3VyZShpbnRDYXNlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVDYXNlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0ludDUyID0gbV9vdXQuYW5jaG9yKAorICAgICAg
ICAgICAgbV9vdXQuc2lnbkV4dDMyVG82NCh1bmJveEludDMyKGJveGVkVmFsdWUpKSk7CisgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBtX291
dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0Lmlu
dDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydEJveGVkRG91YmxlVG9JbnQ1Miks
IGJveGVkVmFsdWUpOworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFs
dWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUs
CisgICAgICAgICAgICBtX291dC5lcXVhbChwb3NzaWJsZVJlc3VsdCwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjpub3RJbnQ1MikpKTsKKyAgICAgICAgICAgIAorICAgICAgICBWYWx1ZUZyb21C
bG9jayBkb3VibGVUb0ludDUyID0gbV9vdXQuYW5jaG9yKHBvc3NpYmxlUmVzdWx0KTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgCisgICAgICAg
IHJldHVybiBtX291dC5waGkobV9vdXQuaW50NjQsIGludFRvSW50NTIsIGRvdWJsZVRvSW50NTIp
OworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgZG91YmxlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2Us
IExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSBwb3NzaWJsZVJlc3VsdCA9IG1f
b3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkNvbnZlcnREb3VibGVUb0ludDUyKSwgdmFsdWUpOworICAgICAgICBGVExfVFlQRV9DSEVD
S19XSVRIX0VYSVRfS0lORChJbnQ1Mk92ZXJmbG93LAorICAgICAgICAgICAgZG91YmxlVmFsdWUo
dmFsdWUpLCBlZGdlLCBTcGVjSW50NTJBc0RvdWJsZSwKKyAgICAgICAgICAgIG1fb3V0LmVxdWFs
KHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Om5vdEludDUyKSkpOwor
ICAgICAgICAKKyAgICAgICAgcmV0dXJuIHBvc3NpYmxlUmVzdWx0OworICAgIH0KKworICAgIExW
YWx1ZSBjb252ZXJ0RG91YmxlVG9JbnQzMihMVmFsdWUgdmFsdWUsIGJvb2wgc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8pCisgICAgeworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQu
ZG91YmxlVG9JbnQodmFsdWUpOworICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlQ29udmVydGVk
VG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyVmFsdWUpOworICAgICAgICBMVmFs
dWUgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlciA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQodmFsdWUsIGludGVnZXJWYWx1ZUNvbnZlcnRlZFRvRG91YmxlKTsKKyAgICAgICAg
c3BlY3VsYXRlKE92ZXJmbG93LCBGb3JtYXR0ZWRWYWx1ZShEYXRhRm9ybWF0RG91YmxlLCB2YWx1
ZSksIG1fbm9kZSwgdmFsdWVOb3RDb252ZXJ0aWJsZVRvSW50ZWdlcik7CisKKyAgICAgICAgaWYg
KHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKSB7CisgICAgICAgICAgICBMQmFzaWNCbG9jayB2YWx1
ZUlzWmVybyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgb24g
emVybyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQ29udmVydERvdWJsZVRvSW50MzIgY29udGludWF0aW9uIikpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKGludGVnZXJWYWx1ZSksIHVuc3Vy
ZSh2YWx1ZUlzWmVybyksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh2YWx1ZUlzWmVybywgY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgTFZhbHVlIGRvdWJsZUJpdGNhc3RUb0ludDY0ID0gbV9vdXQu
Yml0Q2FzdCh2YWx1ZSwgbV9vdXQuaW50NjQpOworICAgICAgICAgICAgTFZhbHVlIHNpZ25CaXRT
ZXQgPSBtX291dC5sZXNzVGhhbihkb3VibGVCaXRjYXN0VG9JbnQ2NCwgbV9vdXQuY29uc3RJbnQ2
NCgwKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIEZvcm1hdHRlZFZh
bHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2RlLCBzaWduQml0U2V0KTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBp
bnRlZ2VyVmFsdWU7CisgICAgfQorCisgICAgTFZhbHVlIGlzTnVtYmVyKExWYWx1ZSBqc1ZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAo
TFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0Z1bGxOdW1iZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIGlzTm90Q2VsbE9yTWlzYyhq
c1ZhbHVlKTsKKyAgICB9CisgICAgTFZhbHVlIGlzTm90TnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZh
bHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNGdWxsTnVtYmVyKSkKKyAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBpc0NlbGxPck1pc2MoanNWYWx1
ZSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdENlbGwoTFZhbHVlIGpzVmFsdWUsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0NlbGwpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3ROb25aZXJvNjQoanNWYWx1
ZSwgbV90YWdNYXNrKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzQ2VsbChMVmFsdWUganNW
YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAg
aWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNDZWxsKSkKKyAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvNjQo
anNWYWx1ZSwgbV90YWdNYXNrKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90TWlzYyhM
VmFsdWUgdmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7Cisg
ICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY01pc2Mp
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3Zl
KHZhbHVlLCBtX291dC5jb25zdEludDY0KFRhZ0JpdFR5cGVPdGhlciB8IFRhZ0JpdEJvb2wgfCBU
YWdCaXRVbmRlZmluZWQpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTWlzYyhMVmFsdWUg
dmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAg
IGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCBTcGVjTWlzYykpCisgICAg
ICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQubG9naWNhbE5vdChp
c05vdE1pc2ModmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzTm90Qm9vbGVhbihM
VmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsK
KyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjQm9v
bGVhbikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQu
dGVzdE5vblplcm82NCgKKyAgICAgICAgICAgIG1fb3V0LmJpdFhvcihqc1ZhbHVlLCBtX291dC5j
b25zdEludDY0KFZhbHVlRmFsc2UpKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQofjEp
KTsKKyAgICB9CisgICAgTFZhbHVlIGlzQm9vbGVhbihMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92
ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNCb29sZWFuKSkKKyAgICAgICAgICAgIHJldHVy
biBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzTm90Qm9vbGVhbihq
c1ZhbHVlKSk7CisgICAgfQorICAgIExWYWx1ZSB1bmJveEJvb2xlYW4oTFZhbHVlIGpzVmFsdWUp
CisgICAgeworICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFyYW50ZWVz
IHRoYXQgTExWTSBrbm93cyB0aGF0IGV2ZW4gdGhlIGludGVnZXIKKyAgICAgICAgLy8gdmFsdWUg
aXMganVzdCAwIG9yIDEuIEJ1dCBmb3Igbm93IHdlIGRvIGl0IHRoZSBkdW1iIHdheS4KKyAgICAg
ICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NChtX291dC5iaXRBbmQoanNWYWx1ZSwgbV9vdXQuY29u
c3RJbnQ2NCgxKSkpOworICAgIH0KKyAgICBMVmFsdWUgYm94Qm9vbGVhbihMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuc2VsZWN0KAorICAgICAgICAgICAgdmFsdWUs
IG1fb3V0LmNvbnN0SW50NjQoVmFsdWVUcnVlKSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNl
KSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc05vdE90aGVyKExWYWx1ZSB2YWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1
ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjT3RoZXIpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQuYml0QW5kKHZhbHVlLCBtX291dC5jb25zdEludDY0KH5UYWdCaXRVbmRlZmluZWQp
KSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7CisgICAgfQorICAg
IExWYWx1ZSBpc090aGVyKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNG
dWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVl
KHR5cGUsIFNwZWNPdGhlcikpCisgICAgICAgICAgICByZXR1cm4gcHJvdmVuOworICAgICAgICBy
ZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICBtX291dC5iaXRBbmQodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQ2NChWYWx1ZU51bGwpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGlzUHJvdmVuVmFsdWUo
U3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZSwgU3BlY3VsYXRlZFR5cGUgd2FudGVkVHlwZSkKKyAg
ICB7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB+d2FudGVkVHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gbV9vdXQuYm9vbGVhblRydWU7CisgICAgICAgIGlmICghKHByb3ZlblR5cGUgJiB3
YW50ZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgS25vd25JbnQz
MlVzZToKKyAgICAgICAgY2FzZSBLbm93blN0cmluZ1VzZToKKyAgICAgICAgY2FzZSBLbm93blBy
aW1pdGl2ZVVzZToKKyAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgIGNhc2UgSW50
NTJSZXBVc2U6CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50MzJVc2U6Cisg
ICAgICAgICAgICBzcGVjdWxhdGVJbnQzMihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVDZWxsKGVkZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6CisgICAgICAgICAg
ICBzcGVjdWxhdGVDZWxsT3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEtub3duQ2VsbFVzZToKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5u
ZWVkc1R5cGVDaGVjayhlZGdlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBN
YWNoaW5lSW50VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlTWFjaGluZUludChlZGdlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE9iamVjdFVzZToKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZU9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZ1
bmN0aW9uVXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24oZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgorICAgICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEZpbmFsT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlRmluYWxPYmplY3Qo
ZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdHJpbmdVc2U6CisgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTdHJpbmdJZGVudFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50
KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAg
ICAgICAgICAgc3BlY3VsYXRlU3ltYm9sKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nT2Jq
ZWN0KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RyaW5nT3JTdHJp
bmdPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPclN0cmluZ09iamVjdChl
ZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZU51bWJlcihlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFJlYWxOdW1iZXJVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVSZWFsTnVtYmVyKGVk
Z2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToK
KyAgICAgICAgICAgIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoZWRnZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5lSW50VXNlOgorICAgICAgICAgICAg
c3BlY3VsYXRlRG91YmxlUmVwTWFjaGluZUludChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVCb29sZWFuKGVk
Z2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90U3RyaW5nVmFyVXNlOgor
ICAgICAgICAgICAgc3BlY3VsYXRlTm90U3RyaW5nVmFyKGVkZ2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU5vdENl
bGwoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPdGhlclVzZToKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZU90aGVyKGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTWlzY1VzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1pc2MoZWRnZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJVbnN1cHBvcnRlZCBzcGVjdWxhdGlvbiB1c2Uga2luZCIpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlKE5vZGUqLCBFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBzcGVjdWxhdGUoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3BlY3VsYXRlSW50MzIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbG93SW50MzIoZWRnZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlQ2VsbChFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICBsb3dDZWxsKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUNl
bGxPck90aGVyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBpc05vdENlbGwgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBDZWxsT3JP
dGhlciBub3QgY2VsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgQ2VsbE9yT3RoZXIgY29udGludWF0aW9uIikp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkp
LCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGlzTm90Q2VsbCkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RDZWxsLCBjb250aW51YXRp
b24pOworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBT
cGVjQ2VsbCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTWFjaGluZUludChF
ZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBqc1ZhbHVl
VG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbikpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgaXNPYmplY3QoTFZhbHVlIGNlbGwsIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFs
dWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIFNwZWNPYmplY3QpKQor
ICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmFib3ZlT3JF
cXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlND
ZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE9iamVjdFR5
cGUpKTsKKyAgICB9CisKKyAgICBMVmFsdWUgaXNOb3RPYmplY3QoTFZhbHVlIGNlbGwsIFNwZWN1
bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUg
cHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjT2JqZWN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5iZWxvdygKKyAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvVHlwZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE9iamVjdFR5cGUpKTsKKyAg
ICB9CisKKyAgICBMVmFsdWUgaXNOb3RTdHJpbmcoTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSBTcGVjRnVsbFRvcCkKKyAgICB7CisgICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0g
aXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjU3RyaW5nKSkKKyAgICAgICAgICAg
IHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbCgKKyAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgpKSk7Cisg
ICAgfQorICAgIAorICAgIExWYWx1ZSBpc1N0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4g
PSBpc1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY1N0cmluZykpCisgICAgICAgICAg
ICByZXR1cm4gcHJvdmVuOworICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAg
ICBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAorICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkpOworICAg
IH0KKworICAgIExWYWx1ZSBpc05vdFN5bWJvbChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUg
dHlwZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBp
c1Byb3ZlblZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
cmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKKyAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zeW1ib2xTdHJ1Y3R1cmUtPmlkKCkpKTsKKyAg
ICB9CisKKyAgICBMVmFsdWUgaXNBcnJheVR5cGUoTFZhbHVlIGNlbGwsIEFycmF5TW9kZSBhcnJh
eU1vZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgTFZhbHVlIGluZGV4aW5n
VHlwZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX2luZGV4aW5n
VHlwZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5
Q2xhc3MoKSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKKyAgICAg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5leHBlY3RlZCBvcmlnaW5h
bCBhcnJheSIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmVxdWFsKAorICAgICAgICAgICAgICAgICAgICBtX291dC5iaXRBbmQoaW5kZXhpbmdUeXBl
LCBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKElzQXJyYXkgfCBhcnJheU1vZGUuc2hhcGVN
YXNrKCkpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Ok5vbkFy
cmF5OgorICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxOb25BcnJheToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJp
dEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIoSXNBcnJheSB8IEluZGV4aW5nU2hh
cGVNYXNrKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoYXJyYXlNb2Rl
LnNoYXBlTWFzaygpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEFycmF5
OjpQb3NzaWJseUFycmF5OgorICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKKyAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwgbV9vdXQuY29uc3RJ
bnQzMihJbmRleGluZ1NoYXBlTWFzaykpLAorICAgICAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDMyKGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBhcnJh
eSBjbGFzcyIpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJ
bmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVu
dHNUeXBlKSk7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihTY29wZWRBcmd1bWVudHNUeXBlKSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBtX291dC5l
cXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBz
LkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIo
dHlwZUZvclR5cGVkQXJyYXlUeXBlKGFycmF5TW9kZS50eXBlZEFycmF5VHlwZSgpKSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc0Z1bmN0aW9uKExWYWx1ZSBjZWxsLCBT
cGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAgICBpZiAoTFZh
bHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCBTcGVjRnVuY3Rpb24p
KQorICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKKyAgICAgICAgcmV0dXJuIGlzVHlwZShjZWxs
LCBKU0Z1bmN0aW9uVHlwZSk7CisgICAgfQorICAgIExWYWx1ZSBpc05vdEZ1bmN0aW9uKExWYWx1
ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCisgICAgeworICAgICAg
ICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAmIFNwZWNDZWxsLCB+U3Bl
Y0Z1bmN0aW9uKSkKKyAgICAgICAgICAgIHJldHVybiBwcm92ZW47CisgICAgICAgIHJldHVybiBp
c05vdFR5cGUoY2VsbCwgSlNGdW5jdGlvblR5cGUpOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IExWYWx1ZSBpc0V4b3RpY0ZvclR5cGVvZihMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlw
ZSA9IFNwZWNGdWxsVG9wKQorICAgIHsKKyAgICAgICAgaWYgKCEodHlwZSAmIFNwZWNPYmplY3RP
dGhlcikpCisgICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOworICAgICAgICBy
ZXR1cm4gbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAorICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIHwgVHlwZU9mU2hvdWxkQ2FsbEdl
dENhbGxEYXRhKSk7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBpc1R5cGUoTFZhbHVlIGNlbGws
IEpTVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAorICAgICAg
ICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9U
eXBlKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIodHlwZSkpOworICAgIH0KKyAgICAK
KyAgICBMVmFsdWUgaXNOb3RUeXBlKExWYWx1ZSBjZWxsLCBKU1R5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzVHlwZShjZWxsLCB0eXBlKSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KGNlbGwpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlT2JqZWN0
KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZUZ1
bmN0aW9uKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9D
SEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNGdW5jdGlvbiwgaXNOb3RGdW5jdGlv
bihjZWxsKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlRnVuY3Rpb24oZWRnZSwgbG93Q2VsbChlZGdl
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlciBjZWxsIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIHBy
aW1pdGl2ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIgcHJpbWl0aXZlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBjb250aW51YXRp
b24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goaXNOb3RDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNhc2UpLCB1bnN1cmUoY2VsbENhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oY2VsbENhc2UsIHByaW1pdGl2ZUNhc2UpOworICAgICAgICAKKyAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCAoflNwZWNDZWxs
KSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhwcmltaXRpdmVDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRl
RmluYWxPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjRmlu
YWxPYmplY3QsIGlzTm90VHlwZShjZWxsLCBGaW5hbE9iamVjdFR5cGUpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7
CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1N0
cmluZyB8IH5TcGVjQ2VsbCwgaXNOb3RTdHJpbmcoY2VsbCkpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVjdWxhdGVT
dHJpbmcoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3Vs
YXRlU3RyaW5nSWRlbnQoRWRnZSBlZGdlLCBMVmFsdWUgc3RyaW5nLCBMVmFsdWUgc3RyaW5nSW1w
bCkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjU3RyaW5nSWRlbnQgfCB+U3BlY1N0cmluZykpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHN0cmluZyks
IGVkZ2Uubm9kZSgpLCBtX291dC5pc051bGwoc3RyaW5nSW1wbCkpOworICAgICAgICBzcGVjdWxh
dGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwgZWRnZS5ub2Rl
KCksCisgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAgICAgICAgICAgbV9v
dXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzQXRvbWlj
KCkpKSk7CisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmdJZGVu
dCB8IH5TcGVjU3RyaW5nKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJ
ZGVudChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBsb3dTdHJpbmdJZGVudChlZGdlKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNT
dHJpbmdPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nT2JqZWN0Rm9yQ2VsbChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICAgICAg
bV9pbnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ09iamVjdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nT3JTdHJpbmdPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNT
dHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3BlY3VsYXRlIFN0cmluZ09yU3RyaW5nT2JqZWN0IG5vdCBzdHJpbmcgY2FzZSIpKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVj
dWxhdGUgU3RyaW5nT3JTdHJpbmdPYmplY3QgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAg
ICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGxvd0NlbGwoZWRnZSksIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmNvbnN0SW50MzIodm0oKS5zdHJp
bmdTdHJ1Y3R1cmUtPmlkKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1
bnN1cmUobm90U3RyaW5nKSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKKyAgICAgICAgc3Bl
Y3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQoZWRnZSwgc3RydWN0dXJlSUQpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAgIG1faW50
ZXJwcmV0ZXIuZmlsdGVyKGVkZ2UsIFNwZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JDZWxsKEVkZ2UgZWRn
ZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRChlZGdlLCBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRChFZGdlIGVkZ2UsIExWYWx1ZSBzdHJ1Y3R1cmVJRCkKKyAgICB7CisgICAgICAg
IFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KKyAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoYWJzdHJhY3RTdHJ1Y3R1cmUoZWRnZSku
aXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGUoCisgICAgICAgICAgICBO
b3RTdHJpbmdPYmplY3QsIG5vVmFsdWUoKSwgMCwKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFs
KHN0cnVjdHVyZUlELCB3ZWFrU3RydWN0dXJlSUQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpOwor
ICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU3ltYm9sKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNTeW1ib2wgfCB+U3BlY0NlbGwsIGlzTm90U3ltYm9sKGNlbGwpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNwZWN1bGF0ZVN5bWJvbChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVjdWxh
dGVTeW1ib2woZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxh
dGVOb25OdWxsT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBG
VExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsIGlzTm90
T2JqZWN0KGNlbGwpKTsKKyAgICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBzcGVjdWxhdGUoCisgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIGVk
Z2Uubm9kZSgpLAorICAgICAgICAgICAgbV9vdXQudGVzdE5vblplcm8zMigKKyAgICAgICAgICAg
ICAgICBtX291dC5sb2FkOFplcm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0Zs
YWdzKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTnVtYmVyKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBpc05vdE51bWJlcih2YWx1ZSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNwZWN1bGF0ZVJlYWxOdW1iZXIoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhlcmUgYmVjYXVzZSBsb3dEb3VibGUo
KSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4KKyAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworICAgICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2
YWx1ZSk7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJzcGVjdWxhdGVSZWFsTnVtYmVyIGludCBjYXNlIikpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0
ZVJlYWxOdW1iZXIgY29udGludWF0aW9uIikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwoZG91YmxlVmFsdWUsIGRvdWJsZVZh
bHVlKSwKKyAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGludENhc2Up
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHR5cGVDaGVjaygK
KyAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNwZWNC
eXRlY29kZVJlYWxOdW1iZXIsCisgICAgICAgICAgICBpc05vdEludDMyKHZhbHVlLCBwcm92ZW5U
eXBlKG1fbm9kZS0+Y2hpbGQxKCkpICYgflNwZWNGdWxsRG91YmxlKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVEb3VibGVSZXBS
ZWFsKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIC8vIERvIGFuIGVhcmx5IHJldHVybiBoZXJl
IGJlY2F1c2UgbG93RG91YmxlKCkgY2FuIGNyZWF0ZSBhIGxvdCBvZiBjb250cm9sIGZsb3cuCisg
ICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShl
ZGdlKTsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBkb3VibGVWYWx1ZSh2
YWx1ZSksIGVkZ2UsIFNwZWNEb3VibGVSZWFsLAorICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgdmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
cGVjdWxhdGVEb3VibGVSZXBNYWNoaW5lSW50KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZVRvU3RyaWN0SW50NTIoZWRnZSwgbG93RG91Ymxl
KGVkZ2UpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVjdWxhdGVCb29sZWFuKEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIGxvd0Jvb2xlYW4oZWRnZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc3BlY3VsYXRlTm90U3RyaW5nVmFyKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlLCB+U3BlY1N0cmluZ1ZhcikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAorICAgICAgICBM
QmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUg
Tm90U3RyaW5nVmFyIGlzIGNlbGwgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJp
bmdDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgTm90U3RyaW5nVmFyIGlz
IHN0cmluZyBjYXNlIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgY29udGludWF0aW9uIikp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlw
ZShlZGdlKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAg
ICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcodmFs
dWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNl
LCBjb250aW51YXRpb24pOworICAgICAgICBzcGVjdWxhdGVTdHJpbmdJZGVudChlZGdlLCB2YWx1
ZSwgbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzcGVj
dWxhdGVOb3RDZWxsKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIGlmICghbV9pbnRlcnByZXRl
ci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKKyAgICAgICAgdHlwZUNoZWNrKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIH5T
cGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRl
T3RoZXIoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICB0eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY090aGVy
LCBpc05vdE90aGVyKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3BlY3VsYXRlTWlz
YyhFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBl
Q2hlY2soZWRnZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBMVmFs
dWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIHR5cGVDaGVjayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjTWlzYywgaXNO
b3RNaXNjKHZhbHVlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVm
aW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZ3Jh
cGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpOworICAgIH0KKyAgICAKKyAgICBMVmFsdWUgbG9hZENlbGxTdGF0ZShM
VmFsdWUgYmFzZSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX291dC5sb2FkOFplcm9FeHQzMihi
YXNlLCBtX2hlYXBzLkpTQ2VsbF9jZWxsU3RhdGUpOworICAgIH0KKworICAgIHZvaWQgZW1pdFN0
b3JlQmFycmllcihMVmFsdWUgYmFzZSkKKyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQ
YXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKKworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBtX291dC5ub3RaZXJvMzIobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFs
bHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKwor
ICAgICAgICAvLyBXZSBlbWl0IHRoZSBzdG9yZSBiYXJyaWVyIHNsb3cgcGF0aCBsYXppbHkuIElu
IGEgbG90IG9mIGNhc2VzLCB0aGlzIHdpbGwgbmV2ZXIgZmlyZS4gQW5kCisgICAgICAgIC8vIHdo
ZW4gaXQgZG9lcyBmaXJlLCBpdCBtYWtlcyBzZW5zZSBmb3IgdXMgdG8gZ2VuZXJhdGUgdGhpcyBj
b2RlIHVzaW5nIG91ciBKSVQgcmF0aGVyIHRoYW4KKyAgICAgICAgLy8gd2FzdGluZyBMTFZNJ3Mg
dGltZSBvcHRpbWl6aW5nIGl0LgorICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93
UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCk7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gTGF6eVNsb3dQ
YXRoOjpjcmVhdGVHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gcGFyYW1zLmxh
enlTbG93UGF0aC0+dXNlZFJlZ2lzdGVycygpOworICAgICAgICAgICAgICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcih1c2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5s
b2NrKGJhc2VHUFIpOworCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDEg
PSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaDIgPSBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvcjo6UHJlc2VydmVkU3RhdGUgcHJlc2VydmVkU3RhdGUgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQsIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvcjo6
RXh0cmFTdGFja1NwYWNlOjpTcGFjZUZvckNDYWxsKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSBzYXZlZCB0aGVzZSwgc28gd2hlbiB3ZSBtYWtlIGEgc2xvdyBw
YXRoIGNhbGwsIHdlIGRvbid0IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRvIHNh
dmUgdGhlbSBhZ2Fpbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuZXhj
bHVkZShSZWdpc3RlclNldChzY3JhdGNoMSwgc2NyYXRjaDIpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQnVmZmVyJiB3cml0ZUJhcnJpZXJCdWZmZXIgPSBqaXQudm0o
KS0+aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpp
dC5sb2FkMzIod3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJlc3MoKSwgc2NyYXRj
aDIpOworICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIG5lZWRUb0Zs
dXNoID0gaml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWJvdmVPckVxdWFsLCBzY3JhdGNoMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMih3cml0ZUJhcnJpZXJCdWZmZXIuY2FwYWNpdHko
KSkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkMzIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5z
dG9yZTMyKHNjcmF0Y2gyLCB3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygp
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHdyaXRlQmFycmllckJ1ZmZlci5idWZmZXIoKSksIHNjcmF0Y2gxKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiYXNlR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoMSwgc2Ny
YXRjaDIsIENDYWxsSGVscGVyczo6U2NhbGVQdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KC1zaXplb2Yodm9pZCopKSkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJl
Z2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNlcnZlZFN0YXRlKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5lZWRUb0ZsdXNoLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMsIGppdCwgcGFyYW1zLmxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5leGNlcHRpb25KdW1wcywgb3BlcmF0aW9u
Rmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIsIEludmFsaWRHUFJSZWcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmFzZUdQUik7CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IucmVzdG9yZVJldXNlZFJlZ2lzdGVyc0J5UG9wcGluZyhqaXQsIHByZXNl
cnZlZFN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBw
ZW5kKGppdC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICBiYXNlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgTFZhbHVlIHZtQ2FsbChMVHlw
ZSB0eXBlLCBMVmFsdWUgZnVuY3Rpb24sIEFyZ3MuLi4gYXJncykKKyAgICB7CisgICAgICAgIGNh
bGxQcmVmbGlnaHQoKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNhbGwodHlwZSwg
ZnVuY3Rpb24sIGFyZ3MuLi4pOworICAgICAgICBjYWxsQ2hlY2soKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKKyAgICB7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCA9
IG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4oY29kZU9yaWdpbik7Cisg
ICAgICAgIG1fb3V0LnN0b3JlMzIoCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGNhbGxT
aXRlSW5kZXguYml0cygpKSwKKyAgICAgICAgICAgIHRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsUHJlZmxpZ2h0KCkKKyAgICB7CisgICAgICAg
IGNhbGxQcmVmbGlnaHQoY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpKTsKKyAgICB9
CisKKyAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW5EZXNjcmlwdGlvbk9mQ2FsbFNpdGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbV9ub2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxJbmxpbmVkQ2Fs
bGVyCisgICAgICAgICAgICB8fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcgorICAgICAgICAgICAgfHwgbV9ub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyKSB7CisgICAgICAgICAgICAvLyBUaGlzIGNhc2UgYXJpc2VzIHdo
ZW4geW91IGhhdmUgYSBzaXR1YXRpb24gbGlrZSB0aGlzOgorICAgICAgICAgICAgLy8gZm9vIG1h
a2VzIGEgY2FsbCB0byBiYXIsIGJhciBpcyBpbmxpbmVkIGluIGZvby4gYmFyIG1ha2VzIGEgY2Fs
bAorICAgICAgICAgICAgLy8gdG8gYmF6IGFuZCBiYXogaXMgaW5saW5lZCBpbiBiYXIuIEFuZCB0
aGVuIGJheiBtYWtlcyBhIHRhaWwtY2FsbCB0byBqYXosCisgICAgICAgICAgICAvLyBhbmQgamF6
IGlzIGlubGluZWQgaW4gYmF6LiBXZSB3YW50IHRoZSBjYWxsZnJhbWUgZm9yIGpheiB0byBhcHBl
YXIgdG8gCisgICAgICAgICAgICAvLyBoYXZlIGNhbGxlciBiZSBiYXIuCisgICAgICAgICAgICBj
b2RlT3JpZ2luID0gKmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGlu
Z1RhaWxDYWxscygpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW47Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2FsbENoZWNrKCkKKyAgICB7CisgICAgICAgIGlmIChPcHRp
b25zOjp1c2VFeGNlcHRpb25GdXp6KCkpCisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZv
aWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRXhjZXB0aW9uRnV6eiksIG1fY2FsbEZy
YW1lKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAgICBMVmFs
dWUgaGFkRXhjZXB0aW9uID0gbV9vdXQubm90WmVybzY0KGV4Y2VwdGlvbik7CisKKyAgICAgICAg
Q29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOworICAgICAgICBIYW5kbGVySW5mbyogZXhjZXB0aW9u
SGFuZGxlcjsKKyAgICAgICAgaWYgKG1fZ3JhcGgud2lsbENhdGNoRXhjZXB0aW9uSW5NYWNoaW5l
RnJhbWUobV9vcmlnaW4uZm9yRXhpdCwgb3BDYXRjaE9yaWdpbiwgZXhjZXB0aW9uSGFuZGxlcikp
IHsKKyAgICAgICAgICAgIGJvb2wgZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgIGJvb2wgaXNF
eGNlcHRpb25IYW5kbGVyID0gdHJ1ZTsKKyAgICAgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAg
ICAgICAgICAgICAgRXhjZXB0aW9uQ2hlY2ssIG5vVmFsdWUoKSwgbnVsbHB0ciwgaGFkRXhjZXB0
aW9uLAorICAgICAgICAgICAgICAgIG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0
Y2hPcmlnaW4sIGV4aXRPSyksIGlzRXhjZXB0aW9uSGFuZGxlcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkV4Y2VwdGlvbiBjaGVjayBjb250aW51YXRpb24iKSk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaGFkRXhjZXB0aW9uLCByYXJlbHkobV9o
YW5kbGVFeGNlcHRpb25zKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgIH0KKworICAgIFJlZlB0cjxQYXRjaHBvaW50
RXhjZXB0aW9uSGFuZGxlPiBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMoUGF0Y2hwb2lu
dFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIENvZGVPcmlnaW4gb3BDYXRjaE9yaWdpbjsK
KyAgICAgICAgSGFuZGxlckluZm8qIGV4Y2VwdGlvbkhhbmRsZXI7CisgICAgICAgIGJvb2wgd2ls
bENhdGNoRXhjZXB0aW9uID0gbV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFt
ZShtX29yaWdpbi5mb3JFeGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKTsKKyAg
ICAgICAgaWYgKCF3aWxsQ2F0Y2hFeGNlcHRpb24pCisgICAgICAgICAgICByZXR1cm4gUGF0Y2hw
b2ludEV4Y2VwdGlvbkhhbmRsZTo6ZGVmYXVsdEhhbmRsZShtX2Z0bFN0YXRlKTsKKworICAgICAg
ICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAgICBkYXRhTG9n
KCIgICAgUGF0Y2hwb2ludCBleGNlcHRpb24gT1NSIGV4aXQgIyIsIG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdERlc2NyaXB0b3JzLnNpemUoKSwgIiB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZh
aWxhYmlsaXR5TWFwKCksICJcbiIpOworICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292
ZXJpZXMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxh
YmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIp
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBleGl0T0sgPSB0cnVlOworICAgICAgICBOb2Rl
T3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luLndpdGhGb3JFeGl0QW5kRXhpdE9LKG9wQ2F0Y2hPcmln
aW4sIGV4aXRPSyk7CisKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9y
ID0gYXBwZW5kT1NSRXhpdERlc2NyaXB0b3Iobm9WYWx1ZSgpLCBudWxscHRyKTsKKworICAgICAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgaW50byB0aGUgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1z
IHdoZXJlIHdlIHdpbGwgZmluZCB0aGUgZXhpdCBhcmd1bWVudHMKKyAgICAgICAgLy8gd2UgYXJl
IGFib3V0IHRvIGFwcGVuZC4gV2UgbmVlZCB0byBhY2NvdW50IGZvciBib3RoIHRoZSBjaGlsZHJl
biB3ZSd2ZSBhbHJlYWR5IGFkZGVkLCBhbmQKKyAgICAgICAgLy8gZm9yIHRoZSBwb3NzaWJpbGl0
eSBvZiBhIHJlc3VsdCB2YWx1ZSBpZiB0aGUgcGF0Y2hwb2ludCBpcyBub3Qgdm9pZC4KKyAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gdmFsdWUtPm51bUNoaWxkcmVuKCk7CisgICAgICAgIGlmICh2
YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICBvZmZzZXQrKzsKKworICAgICAgICAv
LyBVc2UgTGF0ZUNvbGRBbnkgdG8gZW5zdXJlIHRoYXQgdGhlIHN0YWNrbWFwIGFyZ3VtZW50cyBp
bnRlcmZlcmUgd2l0aCB0aGUgcGF0Y2hwb2ludCdzCisgICAgICAgIC8vIHJlc3VsdCBhbmQgd2l0
aCBhbnkgbGF0ZS1jbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICB2YWx1ZS0+YXBwZW5kVmVj
dG9yV2l0aFJlcCgKKyAgICAgICAgICAgIGJ1aWxkRXhpdEFyZ3VtZW50cyhleGl0RGVzY3JpcHRv
ciwgb3BDYXRjaE9yaWdpbiwgbm9WYWx1ZSgpKSwKKyAgICAgICAgICAgIFZhbHVlUmVwOjpMYXRl
Q29sZEFueSk7CisKKyAgICAgICAgcmV0dXJuIFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU6OmNy
ZWF0ZSgKKyAgICAgICAgICAgIG1fZnRsU3RhdGUsIGV4aXREZXNjcmlwdG9yLCBvcmlnaW4sIG9m
ZnNldCwgKmV4Y2VwdGlvbkhhbmRsZXIpOworICAgIH0KKworICAgIExCYXNpY0Jsb2NrIGxvd0Js
b2NrKERGRzo6QmFzaWNCbG9jayogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9j
a3MuZ2V0KGJsb2NrKTsKKyAgICB9CisKKyAgICBPU1JFeGl0RGVzY3JpcHRvciogYXBwZW5kT1NS
RXhpdERlc2NyaXB0b3IoRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiAmbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3Jp
cHRvcnMuYWxsb2MoCisgICAgICAgICAgICBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0
dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24s
IAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiwgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSBm
YWxzZSkKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsK
KyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0RGVzY3JpcHRvcnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7CisgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zl
cmllcy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFi
bGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7
CisgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgb3JpZ2lu
LmV4aXRPSyk7CisgICAgICAgIAorICAgICAgICBpZiAoZG9PU1JFeGl0RnV6emluZygpICYmICFp
c0V4Y2VwdGlvbkhhbmRsZXIpIHsKKyAgICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpDaGVj
a3MgPSBtX291dC5hZGQoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKG1fb3V0LmFic29s
dXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKSwKKyAgICAgICAgICAgICAgICBtX291
dC5pbnQzMk9uZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIobnVt
YmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5hYnNvbHV0ZSgmZ19udW1iZXJPZk9TUkV4aXRGdXp6Q2hl
Y2tzKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh1bnNpZ25lZCBhdE9yQWZ0ZXIg
PSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpBdE9yQWZ0ZXIoKSkgeworICAgICAgICAgICAgICAg
IGZhaWxDb25kaXRpb24gPSBtX291dC5iaXRPcigKKyAgICAgICAgICAgICAgICAgICAgZmFpbENv
bmRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKG51bWJlck9m
RnV6ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdE9yQWZ0ZXIpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAodW5zaWduZWQgYXQgPSBPcHRpb25zOjpmaXJlT1NSRXhpdEZ1enpB
dCgpKSB7CisgICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiA9IG1fb3V0LmJpdE9yKAorICAg
ICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAorICAgICAgICAgICAgICAgICAgICBtX291
dC5lcXVhbChudW1iZXJPZkZ1enpDaGVja3MsIG1fb3V0LmNvbnN0SW50MzIoYXQpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFpbENvbmRpdGlvbiA9PSBtX291
dC5ib29sZWFuRmFsc2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYmxlc3NTcGVj
dWxhdGlvbigKKyAgICAgICAgICAgIG1fb3V0LnNwZWN1bGF0ZShmYWlsQ29uZGl0aW9uKSwga2lu
ZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgb3JpZ2luKTsKKyAgICB9CisKKyAgICB2b2lkIGJsZXNz
U3BlY3VsYXRpb24oQ2hlY2tWYWx1ZSogdmFsdWUsIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIE5vZGVPcmlnaW4gb3JpZ2luKQorICAgIHsK
KyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yID0gYXBwZW5kT1NSRXhp
dERlc2NyaXB0b3IobG93VmFsdWUsIGhpZ2hWYWx1ZSk7CisgICAgICAgIAorICAgICAgICB2YWx1
ZS0+YXBwZW5kQ29sZEFueXMoYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBvcmln
aW4uZm9yRXhpdCwgbG93VmFsdWUpKTsKKworICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxT
dGF0ZTsKKyAgICAgICAgdmFsdWUtPnNldEdlbmVyYXRvcigKKyAgICAgICAgICAgIFs9XSAoQ0Nh
bGxIZWxwZXJzJiBqaXQsIGNvbnN0IEIzOjpTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFt
cykgeworICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5lbWl0T1NSRXhpdCgKKyAgICAg
ICAgICAgICAgICAgICAgKnN0YXRlLCBraW5kLCBvcmlnaW4sIGppdCwgcGFyYW1zLCAwKTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KKworICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IGJ1aWxkRXhp
dEFyZ3VtZW50cygKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBD
b2RlT3JpZ2luIGV4aXRPcmlnaW4sIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICB1
bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKKyAg
ICB7CisgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgYnVpbGRF
eGl0QXJndW1lbnRzKAorICAgICAgICAgICAgZXhpdERlc2NyaXB0b3IsIGV4aXRPcmlnaW4sIHJl
c3VsdCwgbG93VmFsdWUsIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIGJ1aWxkRXhp
dEFyZ3VtZW50cygKKyAgICAgICAgT1NSRXhpdERlc2NyaXB0b3IqIGV4aXREZXNjcmlwdG9yLCBD
b2RlT3JpZ2luIGV4aXRPcmlnaW4sIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLAorICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZkV4aXRBcmd1
bWVudHNJblN0YWNrbWFwTG9jYXRpb25zID0gMCkKKyAgICB7CisgICAgICAgIGlmICghIWxvd1Zh
bHVlKQorICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFpbGFiaWxpdHlNYXAgPSB0aGlzLT5h
dmFpbGFiaWxpdHlNYXAoKTsKKyAgICAgICAgYXZhaWxhYmlsaXR5TWFwLnBydW5lQnlMaXZlbmVz
cyhtX2dyYXBoLCBleGl0T3JpZ2luKTsKKyAgICAgICAgCisgICAgICAgIEhhc2hNYXA8Tm9kZSos
IEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4gbWFwOworICAgICAgICBhdmFpbGFiaWxp
dHlNYXAuZm9yRWFjaEF2YWlsYWJpbGl0eSgKKyAgICAgICAgICAgIFsmXSAoQXZhaWxhYmlsaXR5
IGF2YWlsYWJpbGl0eSkgeworICAgICAgICAgICAgICAgIGlmICghYXZhaWxhYmlsaXR5LnNob3Vs
ZFVzZU5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBhdmFpbGFiaWxpdHkubm9kZSgpOworICAg
ICAgICAgICAgICAgIGlmICghbm9kZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBtYXAuYWRkKG5vZGUsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4aXREZXNjcmlwdG9yLT5tX21hdGVy
aWFsaXphdGlvbnMuYWRkKG5vZGUtPm9wKCksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcy5vcGVy
YW5kRm9ySW5kZXgoaSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF2YWlsYWJpbGl0eSBh
dmFpbGFiaWxpdHkgPSBhdmFpbGFiaWxpdHlNYXAubV9sb2NhbHNbaV07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChPcHRpb25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7
CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVCgKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbV9ub2RlLAorICAgICAgICAgICAgICAgICAgICAoIShhdmFpbGFiaWxpdHkuaXNEZWFkKCkg
JiYgbV9ncmFwaC5pc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgZXhp
dE9yaWdpbikpKSB8fCBtX2dyYXBoLm1fcGxhbi5tb2RlID09IEZUTEZvck9TUkVudHJ5TW9kZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZh
bHVlRm9yQXZhaWxhYmlsaXR5KGFyZ3VtZW50cywgbWFwLCBhdmFpbGFiaWxpdHkpOworICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKKyAgICAg
ICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlvbnNJbmRleEJ5T2Zmc2V0
KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOworICAgICAgICAgICAg
ZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzW2ldID0gZXhpdFZhbHVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBmb3IgKGF1dG8gaGVhcFBhaXIgOiBhdmFpbGFiaWxpdHlNYXAubV9oZWFw
KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gaGVhcFBhaXIua2V5LmJhc2UoKTsKKyAgICAg
ICAgICAgIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gPSBt
YXAuZ2V0KG5vZGUpOworICAgICAgICAgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZSA9IGV4aXRWYWx1
ZUZvckF2YWlsYWJpbGl0eShhcmd1bWVudHMsIG1hcCwgaGVhcFBhaXIudmFsdWUpOworICAgICAg
ICAgICAgaWYgKGV4aXRWYWx1ZS5oYXNJbmRleEluU3RhY2ttYXBMb2NhdGlvbnMoKSkKKyAgICAg
ICAgICAgICAgICBleGl0VmFsdWUuYWRqdXN0U3RhY2ttYXBMb2NhdGlvbnNJbmRleEJ5T2Zmc2V0
KG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMpOworICAgICAgICAgICAg
bWF0ZXJpYWxpemF0aW9uLT5hZGQoCisgICAgICAgICAgICAgICAgaGVhcFBhaXIua2V5LmRlc2Ny
aXB0b3IoKSwKKyAgICAgICAgICAgICAgICBleGl0VmFsdWUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKSB7CisgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgIEV4aXQgdmFsdWVzOiAiLCBleGl0RGVzY3JpcHRvci0+bV92YWx1
ZXMsICJcbiIpOworICAgICAgICAgICAgaWYgKCFleGl0RGVzY3JpcHRvci0+bV9tYXRlcmlhbGl6
YXRpb25zLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgTWF0
ZXJpYWxpemF0aW9uczogXG4iKTsKKyAgICAgICAgICAgICAgICBmb3IgKEV4aXRUaW1lT2JqZWN0
TWF0ZXJpYWxpemF0aW9uKiBtYXRlcmlhbGl6YXRpb24gOiBleGl0RGVzY3JpcHRvci0+bV9tYXRl
cmlhbGl6YXRpb25zKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICAgICAi
LCBwb2ludGVyRHVtcChtYXRlcmlhbGl6YXRpb24pLCAiXG4iKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
CisgICAgICAgIFN0YWNrbWFwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIGNvbnN0IEhhc2hNYXA8
Tm9kZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKj4mIG1hcCwKKyAgICAgICAgQXZh
aWxhYmlsaXR5IGF2YWlsYWJpbGl0eSkKKyAgICB7CisgICAgICAgIEZsdXNoZWRBdCBmbHVzaCA9
IGF2YWlsYWJpbGl0eS5mbHVzaGVkQXQoKTsKKyAgICAgICAgc3dpdGNoIChmbHVzaC5mb3JtYXQo
KSkgeworICAgICAgICBjYXNlIERlYWRGbHVzaDoKKyAgICAgICAgY2FzZSBDb25mbGljdGluZ0Zs
dXNoOgorICAgICAgICAgICAgaWYgKGF2YWlsYWJpbGl0eS5oYXNOb2RlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4aXRWYWx1ZUZvck5vZGUoYXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0
eS5ub2RlKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
dGhlIHZhbHVlIGlzIGRlYWQuIEl0IGNvdWxkIGJlIGRlYWQgaW4gYnl0ZWNvZGUgb3IgaXQgY291
bGQgaGF2ZQorICAgICAgICAgICAgLy8gYmVlbiBraWxsZWQgYnkgb3VyIERDRSwgd2hpY2ggY2Fu
IHNvbWV0aW1lcyBraWxsIHRoaW5ncyBldmVuIGlmIHRoZXkgd2VyZSBsaXZlIGluCisgICAgICAg
ICAgICAvLyBieXRlY29kZS4KKyAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsK
KworICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgICAgICBjYXNlIEZsdXNoZWRDZWxs
OgorICAgICAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICAgICAgcmV0dXJuIEV4aXRW
YWx1ZTo6aW5KU1N0YWNrKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZh
bHVlOjppbkpTU3RhY2tBc0ludDMyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAgICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDUyKGZsdXNoLnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICAgICAg
cmV0dXJuIEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmlydHVhbFJlZ2lzdGVy
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiSW52YWxpZCBmbHVzaCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6
ZGVhZCgpOworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWUgZXhpdFZhbHVlRm9yTm9kZSgKKyAg
ICAgICAgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2Rl
KiwgRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAorICAgICAgICBOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgLy8gTk9URTogSW4gRlRMLT5CMywgd2UgY2Fubm90IGdlbmVy
YXRlIGNvZGUgaGVyZSwgYmVjYXVzZSBtX291dHB1dCBpcyBwb3NpdGlvbmVkIGFmdGVyIHRoZQor
ICAgICAgICAvLyBzdGFja21hcCB2YWx1ZS4gTGlrZSBhbGwgdmFsdWVzLCB0aGUgc3RhY2ttYXAg
dmFsdWUgY2Fubm90IHVzZSBhIGNoaWxkIHRoYXQgaXMgZGVmaW5lZCBhZnRlcgorICAgICAgICAv
LyBpdC4KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
KyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBpZiAobm9kZSkg
eworICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIEJv
dHRvbVZhbHVlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYXJpc2UgaW4gb2JqZWN0
IG1hdGVyaWFsaXphdGlvbnMuIEkgYWN0dWFsbHkgZG91YnQgdGhhdCBpdCB3b3VsZCwKKyAgICAg
ICAgICAgICAgICAvLyBidXQgaXQgc2VlbXMgd29ydGh3aGlsZSB0byBiZSBjb25zZXJ2YXRpdmUu
CisgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBJbnQ1
MkNvbnN0YW50OgorICAgICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBF
eGl0VmFsdWU6Om1hdGVyaWFsaXplTmV3T2JqZWN0KG1hcC5nZXQobm9kZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hdmFpbGFibGVSZWNvdmVyaWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBBdmFpbGFibGVSZWNvdmVyeSByZWNvdmVyeSA9IG1fYXZhaWxh
YmxlUmVjb3Zlcmllc1tpXTsKKyAgICAgICAgICAgIGlmIChyZWNvdmVyeS5ub2RlKCkgIT0gbm9k
ZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEV4aXRWYWx1ZSByZXN1
bHQgPSBFeGl0VmFsdWU6OnJlY292ZXJ5KAorICAgICAgICAgICAgICAgIHJlY292ZXJ5Lm9wY29k
ZSgpLCBhcmd1bWVudHMuc2l6ZSgpLCBhcmd1bWVudHMuc2l6ZSgpICsgMSwKKyAgICAgICAgICAg
ICAgICByZWNvdmVyeS5mb3JtYXQoKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHJl
Y292ZXJ5LmxlZnQoKSk7CisgICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHJlY292ZXJ5LnJp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUp
OworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFy
Z3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICAg
ICAgCisgICAgICAgIHZhbHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlm
IChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1l
bnRzLCBEYXRhRm9ybWF0SW50NTIsIHZhbHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAg
dmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFs
aWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERh
dGFGb3JtYXRTdHJpY3RJbnQ1MiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2
YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9y
bWF0Qm9vbGVhbiwgdmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICB2YWx1ZSA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIHZh
bHVlLnZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgdmFsdWUgPSBtX2RvdWJsZVZhbHVlcy5n
ZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0RG91YmxlLCB2YWx1ZS52YWx1ZSgp
KTsKKworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkNhbm5v
dCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRhKCkpOworICAgICAgICByZXR1cm4g
RXhpdFZhbHVlOjpkZWFkKCk7CisgICAgfQorCisgICAgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChT
dGFja21hcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBEYXRhRm9ybWF0IGZvcm1hdCwgTFZhbHVl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9IEV4aXRWYWx1ZTo6ZXhp
dEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvclRhaWxDYWxsKFN0YWNrbWFwQXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CisK
KyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
KyAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50
OgorICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6Y29uc3RhbnQobm9kZS0+YXNKU1ZhbHVl
KCkpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5v
ZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhp
dEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCB2YWx1ZS52YWx1ZSgpKTsKKworICAg
ICAgICB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0
YUZvcm1hdEpTLCBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKSk7CisKKyAgICAgICAgdmFsdWUgPSBt
X2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdEpTLCBi
b3hCb29sZWFuKHZhbHVlLnZhbHVlKCkpKTsKKworICAgICAgICAvLyBEb3VibGVzIGFuZCBJbnQ1
MiBoYXZlIGJlZW4gY29udmVydGVkIGJ5IFZhbHVlUmVwKCkKKyAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwg
bm9kZSkuZGF0YSgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzS2lsbChFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBpZiAoZWRnZS5kb2VzTm90S2lsbCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAorICAgICAgICBOb2RlKiBu
b2RlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIERh
dGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgbV9hdmFpbGFibGVSZWNvdmVyaWVzLmFw
cGVuZChBdmFpbGFibGVSZWNvdmVyeShub2RlLCBvcGNvZGUsIGxlZnQsIHJpZ2h0LCBmb3JtYXQp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRBdmFpbGFibGVSZWNvdmVyeSgKKyAgICAgICAg
RWRnZSBlZGdlLCBSZWNvdmVyeU9wY29kZSBvcGNvZGUsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmln
aHQsIERhdGFGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgYWRkQXZhaWxhYmxlUmVjb3Zl
cnkoZWRnZS5ub2RlKCksIG9wY29kZSwgbGVmdCwgcmlnaHQsIGZvcm1hdCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgc2V0SW50MzIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9pbnQzMlZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9o
aWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihOb2RlKiBub2RlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBtX2ludDUyVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KKyAgICB2b2lkIHNldFN0cmljdElu
dDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RyaWN0SW50
NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7
CisgICAgfQorICAgIHZvaWQgc2V0SW50NTIoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlLCBJbnQ1
MktpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNl
IEludDUyOgorICAgICAgICAgICAgc2V0SW50NTIobm9kZSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgU3RyaWN0SW50NTI6CisgICAgICAg
ICAgICBzZXRTdHJpY3RJbnQ1Mihub2RlLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJD
b3JydXB0IGludDUyIGtpbmQiKTsKKyAgICB9CisgICAgdm9pZCBzZXRKU1ZhbHVlKE5vZGUqIG5v
ZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5zZXQobm9k
ZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9p
ZCBzZXRCb29sZWFuKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
Ym9vbGVhblZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CisgICAgdm9pZCBzZXREb3VibGUoTm9k
ZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRJbnQzMihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRJbnQzMiht
X25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBz
ZXRTdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBzZXRTdHJpY3RJbnQ1
MihtX25vZGUsIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRJbnQ1MihMVmFsdWUgdmFsdWUs
IEludDUyS2luZCBraW5kKQorICAgIHsKKyAgICAgICAgc2V0SW50NTIobV9ub2RlLCB2YWx1ZSwg
a2luZCk7CisgICAgfQorICAgIHZvaWQgc2V0SlNWYWx1ZShMVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBzZXRKU1ZhbHVlKG1fbm9kZSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIHNldEJv
b2xlYW4oTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihtX25vZGUsIHZh
bHVlKTsKKyAgICB9CisgICAgdm9pZCBzZXRTdG9yYWdlKExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgc2V0RG91
YmxlKExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldERvdWJsZShtX25vZGUsIHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1ZhbGlkKGNvbnN0IExvd2VyZWROb2RlVmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFtX2dyYXBoLm1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKHZhbHVl
LmJsb2NrKCksIG1faGlnaEJsb2NrKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShK
U0NlbGwqIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLndlYWtSZWZlcmVu
Y2VzLmFkZExhemlseSh0YXJnZXQpOworICAgIH0KKworICAgIExWYWx1ZSBsb2FkU3RydWN0dXJl
KExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSB0YWJsZUluZGV4ID0gbV9vdXQu
bG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIExWYWx1
ZSB0YWJsZUJhc2UgPSBtX291dC5sb2FkUHRyKAorICAgICAgICAgICAgbV9vdXQuYWJzb2x1dGUo
dm0oKS5oZWFwLnN0cnVjdHVyZUlEVGFibGUoKS5iYXNlKCkpKTsKKyAgICAgICAgVHlwZWRQb2lu
dGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCisgICAgICAgICAgICBtX2hlYXBzLnN0cnVj
dHVyZVRhYmxlLCB0YWJsZUJhc2UsIG1fb3V0Lnplcm9FeHRQdHIodGFibGVJbmRleCkpOworICAg
ICAgICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzKTsKKyAgICB9CisKKyAgICBMVmFsdWUg
d2Vha1BvaW50ZXIoSlNDZWxsKiBwb2ludGVyKQorICAgIHsKKyAgICAgICAgYWRkV2Vha1JlZmVy
ZW5jZShwb2ludGVyKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50UHRyKHBvaW50ZXIp
OworICAgIH0KKworICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlSUQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKHN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgfQorICAgIAor
ICAgIExWYWx1ZSB3ZWFrU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIFR5
cGVkUG9pbnRlciBhZGRyZXNzRm9yKExWYWx1ZSBiYXNlLCBpbnQgb3BlcmFuZCwgcHRyZGlmZl90
IG9mZnNldCA9IDApCisgICAgeworICAgICAgICByZXR1cm4gbV9vdXQuYWRkcmVzcyhiYXNlLCBt
X2hlYXBzLnZhcmlhYmxlc1tvcGVyYW5kXSwgb2Zmc2V0KTsKKyAgICB9CisgICAgVHlwZWRQb2lu
dGVyIHBheWxvYWRGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7CisgICAgfQor
ICAgIFR5cGVkUG9pbnRlciB0YWdGb3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoYmFzZSwgb3BlcmFuZCwgVGFnT2Zmc2V0KTsKKyAg
ICB9CisgICAgVHlwZWRQb2ludGVyIGFkZHJlc3NGb3IoaW50IG9wZXJhbmQsIHB0cmRpZmZfdCBv
ZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3IoVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLCBvZmZzZXQpOworICAgIH0KKyAgICBUeXBlZFBvaW50ZXIgYWRkcmVzc0Zv
cihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCisgICAgewor
ICAgICAgICBpZiAob3BlcmFuZC5pc0xvY2FsKCkpCisgICAgICAgICAgICByZXR1cm4gYWRkcmVz
c0ZvcihtX2NhcHR1cmVkLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOworICAgICAgICByZXR1
cm4gYWRkcmVzc0ZvcihtX2NhbGxGcmFtZSwgb3BlcmFuZC5vZmZzZXQoKSwgb2Zmc2V0KTsKKyAg
ICB9CisgICAgVHlwZWRQb2ludGVyIHBheWxvYWRGb3IoaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0K
KyAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQsIFBheWxvYWRPZmZzZXQpOwor
ICAgIH0KKyAgICBUeXBlZFBvaW50ZXIgdGFnRm9yKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOworICAgIH0KKyAgICBU
eXBlZFBvaW50ZXIgdGFnRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkZHJlc3NGb3Iob3BlcmFuZCwgVGFnT2Zmc2V0KTsKKyAgICB9CisgICAgCisg
ICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICByZXR1cm4gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOworICAgIH0KKyAgICBBYnN0cmFjdFZhbHVl
IGFic3RyYWN0VmFsdWUoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFic3RyYWN0
VmFsdWUoZWRnZS5ub2RlKCkpOworICAgIH0KKyAgICAKKyAgICBTcGVjdWxhdGVkVHlwZSBwcm92
ZW5UeXBlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShu
b2RlKS5tX3R5cGU7CisgICAgfQorICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3ZlblR5cGUoZWRnZS5ub2RlKCkpOworICAg
IH0KKyAgICAKKyAgICBKU1ZhbHVlIHByb3ZlblZhbHVlKE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShub2RlKS5tX3ZhbHVlOworICAgIH0KKyAgICBKU1Zh
bHVlIHByb3ZlblZhbHVlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJldHVybiBwcm92ZW5W
YWx1ZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUgYWJzdHJhY3RTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBh
YnN0cmFjdFZhbHVlKG5vZGUpLm1fc3RydWN0dXJlOworICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIGFic3RyYWN0U3RydWN0dXJlKEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhYnN0cmFjdFN0cnVjdHVyZShlZGdlLm5vZGUoKSk7CisgICAgfQorICAgIAorI2lmIEVO
QUJMRShNQVNNX1BST0JFKQorICAgIHZvaWQgcHJvYmUoc3RkOjpmdW5jdGlvbjx2b2lkIChDQ2Fs
bEhlbHBlcnM6OlByb2JlQ29udGV4dCopPiBwcm9iZUZ1bmMpCisgICAgeworICAgICAgICBVTlVT
RURfUEFSQU0ocHJvYmVGdW5jKTsKKyAgICB9CisjZW5kaWYKKworICAgIHZvaWQgY3Jhc2goKQor
ICAgIHsKKyAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmluZGV4LCBtX25vZGUtPmluZGV4KCkp
OworICAgIH0KKyAgICB2b2lkIGNyYXNoKEJsb2NrSW5kZXggYmxvY2tJbmRleCwgdW5zaWduZWQg
bm9kZUluZGV4KQorICAgIHsKKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgbV9vdXQuY2Fs
bChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKGZ0bFVucmVhY2hhYmxlKSk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShibG9ja0luZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vZGVJ
bmRleCk7CisjZWxzZQorICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQudm9p
ZFR5cGUsCisgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihmdGxVbnJlYWNoYWJsZSksCisg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSksIG1fb3V0LmNvbnN0SW50
MzIoYmxvY2tJbmRleCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKG5vZGVJbmRleCkp
OworI2VuZGlmCisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgfQorCisgICAgQXZh
aWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNh
bGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KKyAgICAKKyAgICBWTSYgdm0oKSB7IHJldHVybiBt
X2dyYXBoLm1fdm07IH0KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3Jh
cGgubV9jb2RlQmxvY2s7IH0KKyAgICAKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICBTdGF0ZSYg
bV9mdGxTdGF0ZTsKKyAgICBBYnN0cmFjdEhlYXBSZXBvc2l0b3J5IG1faGVhcHM7CisgICAgT3V0
cHV0IG1fb3V0OworICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIAorICAgIExCYXNpY0Jsb2Nr
IG1fcHJvbG9ndWU7CisgICAgTEJhc2ljQmxvY2sgbV9oYW5kbGVFeGNlcHRpb25zOworICAgIEhh
c2hNYXA8REZHOjpCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOworICAgIAorICAg
IExWYWx1ZSBtX2NhbGxGcmFtZTsKKyAgICBMVmFsdWUgbV9jYXB0dXJlZDsKKyAgICBMVmFsdWUg
bV90YWdUeXBlTnVtYmVyOworICAgIExWYWx1ZSBtX3RhZ01hc2s7CisgICAgCisgICAgSGFzaE1h
cDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9pbnQzMlZhbHVlczsKKyAgICBIYXNoTWFwPE5v
ZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0cmljdEludDUyVmFsdWVzOworICAgIEhhc2hNYXA8
Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1faW50NTJWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2Rl
KiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSos
IExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CisgICAgCisgICAgLy8gVGhpcyBpcyBhIGJp
dCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBoYXZpbmcgdG8gZG8gQ1NFIG9uIGxv
YWRpbmcgb2YgYXJndW1lbnRzLgorICAgIC8vIEl0J3MgbmljZSB0byBoYXZlIHRoZXNlIG9wdGlt
aXphdGlvbnMgb24gb3VyIGVuZCBiZWNhdXNlIHdlIGNhbiBndWFyYW50ZWUgdGhlbSBhIGJpdCBi
ZXR0ZXIuCisgICAgLy8gUHJvYmFibHkgYWxzbyBzYXZlcyBMTFZNIGNvbXBpbGUgdGltZS4KKyAg
ICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fbG9hZGVkQXJndW1lbnRWYWx1ZXM7CisgICAgCisg
ICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3BoaXM7CisgICAgCisgICAgTG9jYWxPU1JBdmFp
bGFiaWxpdHlDYWxjdWxhdG9yIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjsKKyAgICAKKyAgICBW
ZWN0b3I8QXZhaWxhYmxlUmVjb3ZlcnksIDM+IG1fYXZhaWxhYmxlUmVjb3ZlcmllczsKKyAgICAK
KyAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOworICAgIEFic3RyYWN0SW50ZXJwcmV0
ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CisgICAgREZHOjpCYXNpY0Js
b2NrKiBtX2hpZ2hCbG9jazsKKyAgICBERkc6OkJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsK
KyAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKKworICAgIE5vZGVPcmlnaW4gbV9vcmln
aW47CisgICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CisgICAgTm9kZSogbV9ub2RlOworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0
YXRlKQoreworICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRlKTsKKyAgICBsb3dlcmlu
Zy5sb3dlcigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBA
CiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZUTExvd2VyREZHVG9MTFZN
LmgiCisjaW5jbHVkZSAiRlRMTG93ZXJERkdUb0IzLmgiCiAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
IApAQCAtMTA1LDcgKzEwNSw3IEBAIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQg
ZnRsVW4KIH0KICNlbmRpZgogCi0vLyBVc2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkg
aGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0aW5nCisvLyBVc2luZyB0
aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIEIz
LCBieSBjcmVhdGluZwogLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUg
RlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQoZXhpdEtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCiAgICAgICAgIEZv
cm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAg
ICAgICBcCkBAIC0xMTksMTAgKzExOSwxMCBAQCBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRp
YyB2b2lkIGZ0bFVuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgXAogICAgIEZUTF9UWVBFX0NIRUNL
X1dJVEhfRVhJVF9LSU5EKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2Vk
VGhyb3VnaCwgZmFpbENvbmRpdGlvbikKIAotY2xhc3MgTG93ZXJERkdUb0xMVk0gewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKExvd2VyREZHVG9MTFZNKTsKK2NsYXNzIExvd2VyREZHVG9CMyB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTG93ZXJERkdUb0IzKTsKIHB1YmxpYzoKLSAgICBM
b3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCisgICAgTG93ZXJERkdUb0IzKFN0YXRlJiBzdGF0
ZSkKICAgICAgICAgOiBtX2dyYXBoKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1fZnRsU3RhdGUo
c3RhdGUpCiAgICAgICAgICwgbV9vdXQoc3RhdGUpCkBAIC0zNTksNyArMzU5LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIC8vIEFsbCBvZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBu
ZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGtlZXAgdGhlCiAgICAgICAgIC8vIGdl
bmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dyYW0gb3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVj
dCB0aGUgcGVyZm9ybWFuY2UKLSAgICAgICAgLy8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5j
ZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVyIHRoaW5ncykgYnV0IGl0IHdpbGwKKyAgICAgICAg
Ly8gb2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgQjMgdG8gcmVvcmRlciB0
aGluZ3MpIGJ1dCBpdCB3aWxsCiAgICAgICAgIC8vIG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJl
YWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAg
ICAgICAgIApAQCAtMTc2NCw4ICsxNzY0LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGls
ZUFyaXRoUG93KCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBsbHZtLnBv
d2kgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4K
LSAgICAgICAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBsb29wIGlu
IERGRyB0b28uCiAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSkKICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKICAgICAgICAg
ZWxzZSB7CkBAIC0xOTIyLDggKzE5MjAsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFz
aG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhNb2RlKCkpKQogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0Lm5lZyh2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmICghc2hvdWxk
Q2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAg
ICAvLyAiMCAtIHgiIGlzIHRoZSBjYW5vbmljYWwgd2F5IG9mIHNheWluZyAiLXgiIGluIGJvdGgg
QjMgYW5kIExMVk0uIFRoaXMgZ2V0cwotICAgICAgICAgICAgICAgIC8vIGxvd2VyZWQgdG8gdGhl
IHJpZ2h0IHRoaW5nLgogICAgICAgICAgICAgICAgIENoZWNrVmFsdWUqIGNoZWNrID0gbV9vdXQu
c3BlY3VsYXRlU3ViKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwogICAgICAgICAgICAgICAgIGJs
ZXNzU3BlY3VsYXRpb24oY2hlY2ssIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3Jp
Z2luKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGVjazsKQEAgLTQyMTcsNyArNDIxMyw5
IEBAIHByaXZhdGU6CiAgICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbV9ub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCiAgICAgICAgIGlmIChkYXRhLmNhc2VzLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IGNyZWF0aW5nIGEgUGhpIGZ1
bmN0aW9uIHdpdGggemVybyBpbnB1dHMuIExMVk0gZG9lc24ndCBsaWtlIHRoYXQuCisgICAgICAg
ICAgICAvLyBQcm90ZWN0IGFnYWluc3QgY3JlYXRpbmcgYSBQaGkgZnVuY3Rpb24gd2l0aCB6ZXJv
IGlucHV0cy4gTExWTSBkaWRuJ3QgbGlrZSB0aGF0LgorICAgICAgICAgICAgLy8gSXQncyBub3Qg
Y2xlYXIgaWYgdGhpcyBpcyBuZWVkZWQgYW55bW9yZS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MzgyCiAgICAgICAgICAg
ICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC01ODQyLDcgKzU4NDAsNyBAQCBwcml2YXRlOgogICAgICAgICBMQmFzaWNCbG9jayBkZWZhdWx0
SGFzSW5zdGFuY2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNl
IFN5bWJvbC5oYXNJbnN0YW5jZSBpcyBkZWZhdWx0IikpOwogICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNl
IGNvbnRpbnVhdGlvbiIpKTsKIAotICAgICAgICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9u
J3Qgd29ycnkgYWJvdXQgY2xlYW5pbmcgdGhpcyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3
ZSBoYXZlIHByb3ZlbiB0aGUgaGFzSW5zdGFuY2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIExMVk0g
c2hvdWxkIGZpeCBpdCBmb3IgdXMuCisgICAgICAgIC8vIFVubGlrZSBpbiB0aGUgREZHLCB3ZSBk
b24ndCB3b3JyeSBhYm91dCBjbGVhbmluZyB0aGlzIGNvZGUgdXAgZm9yIHRoZSBjYXNlIHdoZXJl
IHdlIGhhdmUgcHJvdmVuIHRoZSBoYXNJbnN0YW5jZVZhbHVlIGlzIGEgY29uc3RhbnQgYXMgQjMg
c2hvdWxkIGZpeCBpdCBmb3IgdXMuCiAKICAgICAgICAgQVNTRVJUKCFtX25vZGUtPmNoaWxkMigp
Lm5vZGUoKS0+aXNDZWxsQ29uc3RhbnQoKSB8fCBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9
PSBtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+YXNDZWxsKCkpOwogCkBAIC04NDM5LDIzICs4NDM3
LDIzIEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGlu
ZyBhIGNvZGUgZ2VuZXJhdG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUgdXNpbmcg
b3VyCiAgICAgLy8gb3duIE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xvdyBw
YXRocyB0aGF0IGludm9sdmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAotICAgIC8v
IHRvIHBheSB0aGUgcHJpY2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRo
IHdpbGwgb25seSBiZSBnZW5lcmF0ZWQgaWYgaXQgYWN0dWFsbHkKKyAgICAvLyB0byBwYXkgdGhl
IHByaWNlIG9mIEIzIG9wdGltaXppbmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2lsbCBvbmx5IGJl
IGdlbmVyYXRlZCBpZiBpdCBhY3R1YWxseQogICAgIC8vIGV4ZWN1dGVzLiBPbiB0aGUgb3RoZXIg
aGFuZCwgYSBsYXp5IHNsb3cgcGF0aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9mIHR3byBhZGRp
dGlvbmFsIGp1bXBzLgotICAgIC8vIEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdzIHJlZ2lzdGVy
IGFsbG9jYXRpb24gc3RhdGUgaXMgc2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlkLCBzbyB5b3UK
KyAgICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBhbGxvY2F0aW9uIHN0
YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZlciBCMyBkaWQsIHNvIHlvdQogICAgIC8vIGhhdmUgdG8g
dXNlIGEgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yIHRvIHRyeSB0byB1c2Ugc29tZSB1bnVzZWQg
cmVnaXN0ZXJzIGFuZCB5b3UgbWF5IGhhdmUKICAgICAvLyB0byBzcGlsbCB0byB0b3Agb2Ygc3Rh
Y2sgaWYgdGhlcmUgYXJlbid0IGVub3VnaCByZWdpc3RlcnMgYXZhaWxhYmxlLgogICAgIC8vCiAg
ICAgLy8gTGF6eSBzbG93IHBhdGhzIGludm9sdmUgdGhyZWUgZGlmZmVyZW50IHN0YWdlcyBvZiBl
eGVjdXRpb24uIEVhY2ggc3RhZ2UgaGFzIHVuaXF1ZQogICAgIC8vIGNhcGFiaWxpdGllcyBhbmQg
a25vd2xlZGdlLiBUaGUgc3RhZ2VzIGFyZToKICAgICAvLwotICAgIC8vIDEpIERGRy0+TExWTSBs
b3dlcmluZywgaS5lLiBjb2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0
aGUgbGFzdCB0aW1lIHlvdSB3aWxsCisgICAgLy8gMSkgREZHLT5CMyBsb3dlcmluZywgaS5lLiBj
b2RlIHRoYXQgcnVucyBpbiB0aGlzIHBoYXNlLiBMb3dlcmluZyBpcyB0aGUgbGFzdCB0aW1lIHlv
dSB3aWxsCiAgICAgLy8gICAgaGF2ZSBhY2Nlc3MgdG8gTFZhbHVlcy4gSWYgdGhlcmUgaXMgYW4g
TFZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgZmVkIGFzIGlucHV0IHRvIGEgbGF6eSBzbG93CiAgICAg
Ly8gICAgcGF0aCwgdGhlbiB5b3UgbXVzdCBwYXNzIGl0IGFzIGFuIGFyZ3VtZW50IGhlcmUgKGFz
IG9uZSBvZiB0aGUgdmFyYXJncyBhcmd1bWVudHMgYWZ0ZXIgdGhlCiAgICAgLy8gICAgZnVuY3Rv
cikuIEJ1dCwgbG93ZXJpbmcgZG9lc24ndCBrbm93IHdoaWNoIHJlZ2lzdGVycyB3aWxsIGJlIHVz
ZWQgZm9yIHRob3NlIExWYWx1ZXMuIEhlbmNlCiAgICAgLy8gICAgeW91IHBhc3MgYSBsYW1iZGEg
dG8gbGF6eVNsb3dQYXRoKCkgYW5kIHRoYXQgbGFtYmRhIHdpbGwgcnVuIGR1cmluZyBzdGFnZSAo
Mik6CiAgICAgLy8KICAgICAvLyAyKSBGVExDb21waWxlLmNwcCdzIGZpeEZ1bmN0aW9uQmFzZWRP
blN0YWNrTWFwcy4gVGhpcyBjb2RlIGlzIHRoZSBvbmx5IHN0YWdlIGF0IHdoaWNoIHdlIGtub3cK
LSAgICAvLyAgICB0aGUgbWFwcGluZyBmcm9tIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRo
b2QgaW4gKDEpIGFuZCB0aGUgcmVnaXN0ZXJzIHRoYXQgTExWTQorICAgIC8vICAgIHRoZSBtYXBw
aW5nIGZyb20gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRoZSBy
ZWdpc3RlcnMgdGhhdCBCMwogICAgIC8vICAgIHNlbGVjdGVkIGZvciB0aG9zZSBhcmd1bWVudHMu
IFlvdSBkb24ndCBhY3R1YWxseSB3YW50IHRvIGdlbmVyYXRlIGFueSBjb2RlIGhlcmUsIHNpbmNl
IHRoZW4KICAgICAvLyAgICB0aGUgc2xvdyBwYXRoIHdvdWxkbid0IGFjdHVhbGx5IGJlIGxhemls
eSBnZW5lcmF0ZWQuIEluc3RlYWQsIHlvdSB3YW50IHRvIHNhdmUgdGhlCiAgICAgLy8gICAgcmVn
aXN0ZXJzIGJlaW5nIHVzZWQgZm9yIHRoZSBhcmd1bWVudHMgYW5kIGRlZmVyIGNvZGUgZ2VuZXJh
dGlvbiB0byBzdGFnZSAoMykgYnkgY3JlYXRpbmcKQEAgLTg0NjUsOCArODQ2Myw4IEBAIHByaXZh
dGU6CiAgICAgLy8gICAgZXhlY3V0aW5nIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgd2lsbCBjYWxs
IHRoZSBnZW5lcmF0b3IgeW91IGNyZWF0ZWQgaW4gc3RhZ2UgKDIpLgogICAgIC8vCiAgICAgLy8g
Tm90ZSB0aGF0IGVhY2ggdGltZSB5b3UgaW52b2tlIHN0YWdlICgxKSwgc3RhZ2UgKDIpIG1heSBi
ZSBpbnZva2VkIHplcm8sIG9uZSwgb3IgbWFueSB0aW1lcy4KLSAgICAvLyBTdGFnZSAoMikgd2ls
bCB1c3VhbGx5IGJlIGludm9rZWQgb25jZSBmb3Igc3RhZ2UgKDEpLiBCdXQsIExMVk0gbWF5IGtp
bGwgdGhlIGNvZGUsIGluIHdoaWNoCi0gICAgLy8gY2FzZSBzdGFnZSAoMikgd29uJ3QgcnVuLiBM
TFZNIG1heSBkdXBsaWNhdGUgdGhlIGNvZGUgKGZvciBleGFtcGxlIHZpYSBqdW1wIHRocmVhZGlu
ZyksCisgICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZva2VkIG9uY2UgZm9yIHN0
YWdlICgxKS4gQnV0LCBCMyBtYXkga2lsbCB0aGUgY29kZSwgaW4gd2hpY2gKKyAgICAvLyBjYXNl
IHN0YWdlICgyKSB3b24ndCBydW4uIEIzIG1heSBkdXBsaWNhdGUgdGhlIGNvZGUgKGZvciBleGFt
cGxlIHZpYSB0YWlsIGR1cGxpY2F0aW9uKSwKICAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMg
dG8geW91ciBzdGFnZSAoMikgbGFtYmRhLiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9y
IG9uY2UgZm9yIGVhY2gKICAgICAvLyBzdGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8g
dGltZXMgaWYgdGhlIHNsb3cgcGF0aCBuZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUg
Zm9yCiAgICAgLy8gd2hlbmV2ZXIgeW91IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNt
LgpAQCAtOTEzNCw3ICs5MTMyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgTFZhbHVlIHVuYm94
Qm9vbGVhbihMVmFsdWUganNWYWx1ZSkKICAgICB7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gdXNl
IGEgY2FzdCB0aGF0IGd1YXJhbnRlZXMgdGhhdCBMTFZNIGtub3dzIHRoYXQgZXZlbiB0aGUgaW50
ZWdlcgorICAgICAgICAvLyBXZSB3YW50IHRvIHVzZSBhIGNhc3QgdGhhdCBndWFyYW50ZWVzIHRo
YXQgQjMga25vd3MgdGhhdCBldmVuIHRoZSBpbnRlZ2VyCiAgICAgICAgIC8vIHZhbHVlIGlzIGp1
c3QgMCBvciAxLiBCdXQgZm9yIG5vdyB3ZSBkbyBpdCB0aGUgZHVtYiB3YXkuCiAgICAgICAgIHJl
dHVybiBtX291dC5ub3RaZXJvNjQobV9vdXQuYml0QW5kKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50
NjQoMSkpKTsKICAgICB9CkBAIC05NzE1LDcgKzk3MTMsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qg
b2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZlciBmaXJlLiBBbmQKICAgICAgICAgLy8gd2hlbiBpdCBk
b2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNp
bmcgb3VyIEpJVCByYXRoZXIgdGhhbgotICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9w
dGltaXppbmcgaXQuCisgICAgICAgIC8vIHdhc3RpbmcgQjMncyB0aW1lIG9wdGltaXppbmcgaXQu
CiAgICAgICAgIGxhenlTbG93UGF0aCgKICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
ICAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIo
KTsKQEAgLTEwNDI1LDkgKzEwNDIzLDkgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBM
b3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93
ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCi0gICAgLy8gVGhpcyBpcyBhIGJp
dCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIExMVk0gZnJvbSBoYXZpbmcgdG8gZG8gQ1NFIG9uIGxv
YWRpbmcgb2YgYXJndW1lbnRzLgorICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBw
cmV2ZW50cyBCMyBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMu
CiAgICAgLy8gSXQncyBuaWNlIHRvIGhhdmUgdGhlc2Ugb3B0aW1pemF0aW9ucyBvbiBvdXIgZW5k
IGJlY2F1c2Ugd2UgY2FuIGd1YXJhbnRlZSB0aGVtIGEgYml0IGJldHRlci4KLSAgICAvLyBQcm9i
YWJseSBhbHNvIHNhdmVzIExMVk0gY29tcGlsZSB0aW1lLgorICAgIC8vIFByb2JhYmx5IGFsc28g
c2F2ZXMgQjMgY29tcGlsZSB0aW1lLgogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9sb2Fk
ZWRBcmd1bWVudFZhbHVlczsKICAgICAKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fcGhp
czsKQEAgLTEwNDQ5LDkgKzEwNDQ3LDkgQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCiAKLXZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0YXRlKQordm9pZCBsb3dlckRG
R1RvQjMoU3RhdGUmIHN0YXRlKQogewotICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRl
KTsKKyAgICBMb3dlckRGR1RvQjMgbG93ZXJpbmcoc3RhdGUpOwogICAgIGxvd2VyaW5nLmxvd2Vy
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuaAkocmV2aXNpb24gMTk2NzMxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmg6MTk2NzMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMTG93ZXJE
RkdUb0xMVk1faAorI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9oCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIGxvd2VyREZHVG9MTFZNKFN0
YXRlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMTG93ZXJERkdUb0xMVk1faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgRlRM
TG93ZXJERkdUb0xMVk1faAotI2RlZmluZSBGVExMb3dlckRGR1RvTExWTV9oCisjaWZuZGVmIEZU
TExvd2VyREZHVG9CM19oCisjZGVmaW5lIEZUTExvd2VyREZHVG9CM19oCiAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIApAQCAtMzMsMTEgKzMzLDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOwordm9pZCBsb3dlckRGR1Rv
QjMoU3RhdGUmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCiAKLSNlbmRpZiAvLyBGVExMb3dlckRGR1RvTExWTV9oCisjZW5kaWYgLy8g
RlRMTG93ZXJERkdUb0IzX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNDYxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRlRMTG93ZXJERkdUb0xM
Vk0uaCIKLQotI2lmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UuaCIKLSNp
bmNsdWRlICJCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5oIgotI2luY2x1ZGUgIkNhbGxGcmFt
ZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKLSNpbmNsdWRl
ICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgotI2luY2x1ZGUgIkRGR0RvbWluYXRv
cnMuaCIKLSNpbmNsdWRlICJERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIgotI2luY2x1ZGUgIkRG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCIKLSNpbmNsdWRlICJERkdPU1JFeGl0RnV6
ei5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKLSNpbmNsdWRlICJGVExBdmFpbGFibGVSZWNvdmVyeS5oIgotI2lu
Y2x1ZGUgIkZUTEV4Y2VwdGlvblRhcmdldC5oIgotI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklU
Q29kZS5oIgotI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgiCi0jaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKLSNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiRlRMT3V0cHV0LmgiCi0jaW5jbHVkZSAi
RlRMUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZS5oIgotI2luY2x1ZGUgIkZUTFRodW5rcy5oIgot
I2luY2x1ZGUgIkZUTFdlaWdodGVkVGFyZ2V0LmgiCi0jaW5jbHVkZSAiSklUQWRkR2VuZXJhdG9y
LmgiCi0jaW5jbHVkZSAiSklUQml0QW5kR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUQml0T3JH
ZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRYb3JHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJK
SVREaXZHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVy
YXRvci5oIgotI2luY2x1ZGUgIkpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJK
SVRTdWJHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNH
ZW5lcmF0b3JGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCi0j
aW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgi
Ci0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKLSNpbmNsdWRlICJTY3JhdGNoUmVn
aXN0ZXJBbGxvY2F0b3IuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgotI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgIldhdGNoZG9nLmgiCi0jaW5jbHVkZSA8
YXRvbWljPgotI2lmICFPUyhXSU5ET1dTKQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLSNp
bmNsdWRlIDx1bm9yZGVyZWRfc2V0PgotI2luY2x1ZGUgPHd0Zi9Cb3guaD4KLSNpbmNsdWRlIDx3
dGYvUHJvY2Vzc0lELmg+Ci0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEIzOwotdXNpbmcgbmFtZXNwYWNlIERGRzsKLQotbmFtZXNwYWNlIHsKLQot
c3RkOjphdG9taWM8aW50PiBjb21waWxlQ291bnRlcjsKLQotI2lmIEFTU0VSVF9ESVNBQkxFRAot
Tk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgpCi17Ci0g
ICAgQ1JBU0goKTsKLX0KLSNlbHNlCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lk
IGZ0bFVucmVhY2hhYmxlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBCbG9ja0luZGV4IGJs
b2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKLXsKLSAgICBkYXRhTG9nKCJDcmFzaGluZyBp
biB0aG91Z2h0LXRvLWJlLXVucmVhY2hhYmxlIEZUTC1nZW5lcmF0ZWQgY29kZSBmb3IgIiwgcG9p
bnRlckR1bXAoY29kZUJsb2NrKSwgIiBhdCBiYXNpYyBibG9jayAjIiwgYmxvY2tJbmRleCk7Ci0g
ICAgaWYgKG5vZGVJbmRleCAhPSBVSU5UX01BWCkKLSAgICAgICAgZGF0YUxvZygiLCBub2RlIEAi
LCBub2RlSW5kZXgpOwotICAgIGRhdGFMb2coIi5cbiIpOwotICAgIENSQVNIKCk7Ci19Ci0jZW5k
aWYKLQotLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVj
ZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwotLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRl
YWQgY29kZS4KLSNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0tfV0lUSF9FWElUX0tJTkQoZXhpdEtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikg
ZG8geyBcCi0gICAgICAgIEZvcm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUp
OyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAo
aGlnaFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFNwZWN1
bGF0ZWRUeXBlIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7
ICBcCi0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hW
YWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gpKSBcCi0gICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIHR5cGVDaGVjayhfZnRjX2xvd1ZhbHVlLCBfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bh
c3NlZFRocm91Z2gsIChmYWlsQ29uZGl0aW9uKSwgZXhpdEtpbmQpOyBcCi0gICAgfSB3aGlsZSAo
ZmFsc2UpCi0KLSNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBcCi0gICAgRlRMX1RZUEVfQ0hFQ0tfV0lU
SF9FWElUX0tJTkQoQmFkVHlwZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uKQotCi1jbGFzcyBMb3dlckRGR1RvTExWTSB7Ci0gICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoTG93ZXJERkdUb0xMVk0pOwotcHVibGljOgotICAgIExvd2VyREZHVG9M
TFZNKFN0YXRlJiBzdGF0ZSkKLSAgICAgICAgOiBtX2dyYXBoKHN0YXRlLmdyYXBoKQotICAgICAg
ICAsIG1fZnRsU3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV9vdXQoc3RhdGUpCi0gICAgICAgICwg
bV9wcm9jKCpzdGF0ZS5wcm9jKQotICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCi0gICAg
ICAgICwgbV9pbnRlcnByZXRlcihzdGF0ZS5ncmFwaCwgbV9zdGF0ZSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgbG93ZXIoKQotICAgIHsKLSAgICAgICAgU3RhdGUqIHN0YXRlID0gJm1f
ZnRsU3RhdGU7Ci0gICAgICAgIAotICAgICAgICBDU3RyaW5nIG5hbWU7Ci0gICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIG5hbWUgPSB0b0NTdHJp
bmcoCi0gICAgICAgICAgICAgICAgImpzQm9keV8iLCArK2NvbXBpbGVDb3VudGVyLCAiXyIsIGNv
ZGVCbG9jaygpLT5pbmZlcnJlZE5hbWUoKSwKLSAgICAgICAgICAgICAgICAiXyIsIGNvZGVCbG9j
aygpLT5oYXNoKCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5hbWUgPSAianNCb2R5
IjsKLSAgICAgICAgCi0gICAgICAgIG1fZ3JhcGguZW5zdXJlRG9taW5hdG9ycygpOwotCi0gICAg
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBkYXRhTG9n
KCJGdW5jdGlvbiByZWFkeSwgYmVnaW5uaW5nIGxvd2VyaW5nLlxuIik7Ci0KLSAgICAgICAgbV9v
dXQuaW5pdGlhbGl6ZShtX2hlYXBzKTsKLQotICAgICAgICAvLyBXZSB1c2UgcHJvbG9ndWUgZnJl
cXVlbmN5IGZvciBhbGwgb2YgdGhlIGluaXRpYWxpemF0aW9uIGNvZGUuCi0gICAgICAgIG1fb3V0
LnNldEZyZXF1ZW5jeSgxKTsKLSAgICAgICAgCi0gICAgICAgIG1fcHJvbG9ndWUgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlByb2xvZ3VlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzdGFja092
ZXJmbG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdGFjayBvdmVyZmxvdyIpKTsKLSAgICAg
ICAgbV9oYW5kbGVFeGNlcHRpb25zID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYW5kbGUgRXhj
ZXB0aW9ucyIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrQXJndW1lbnRz
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVjayBhcmd1bWVudHMiKSk7Ci0KLSAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5udW1C
bG9ja3MoKTsgKytibG9ja0luZGV4KSB7Ci0gICAgICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3Jh
cGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9vdXQuc2V0RnJlcXVlbmN5KG1f
aGlnaEJsb2NrLT5leGVjdXRpb25Db3VudCk7Ci0gICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9o
aWdoQmxvY2ssIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQmxvY2sgIiwgKm1faGlnaEJsb2NrKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQmFjayB0byBwcm9sb2d1ZSBmcmVxdWVuY3kgZm9y
IGFueSBib2NrcyB0aGF0IGdldCBzbmVha2lseSBjcmVhdGVkIGluIHRoZSBpbml0aWFsaXphdGlv
biBjb2RlLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3koMSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBzdGFja092ZXJmbG93KTsKLSAgICAgICAgbV9v
dXQuaW5pdGlhbGl6ZUNvbnN0YW50cyhtX3Byb2MsIG1fcHJvbG9ndWUpOwotICAgICAgICBjcmVh
dGVQaGlWYXJpYWJsZXMoKTsKLQotICAgICAgICBzaXplX3Qgc2l6ZU9mQ2FwdHVyZWQgPSBzaXpl
b2YoSlNWYWx1ZSkgKiBtX2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbDsKLSAgICAgICAgQjM6OlNs
b3RCYXNlVmFsdWUqIGNhcHR1cmVkQmFzZSA9IG1fb3V0LmxvY2tlZFN0YWNrU2xvdChzaXplT2ZD
YXB0dXJlZCk7Ci0gICAgICAgIG1fY2FwdHVyZWQgPSBtX291dC5hZGQoY2FwdHVyZWRCYXNlLCBt
X291dC5jb25zdEludFB0cihzaXplT2ZDYXB0dXJlZCkpOwotICAgICAgICBzdGF0ZS0+Y2FwdHVy
ZWRWYWx1ZSA9IGNhcHR1cmVkQmFzZS0+c2xvdCgpOwotCi0gICAgICAgIGF1dG8gcHJlT3JkZXIg
PSBtX2dyYXBoLmJsb2Nrc0luUHJlT3JkZXIoKTsKLQotICAgICAgICAvLyBXZSBzaG91bGQgbm90
IGNyZWF0ZSBhbnkgYWxsb2NhJ3MgYWZ0ZXIgdGhpcyBwb2ludCwgc2luY2UgdGhleSB3aWxsIGNl
YXNlIHRvCi0gICAgICAgIC8vIGJlIG1lbTJyZWcgY2FuZGlkYXRlcy4KLSAgICAgICAgCi0gICAg
ICAgIG1fY2FsbEZyYW1lID0gbV9vdXQuZnJhbWVQb2ludGVyKCk7Ci0gICAgICAgIG1fdGFnVHlw
ZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7Ci0gICAgICAgIG1fdGFn
TWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgQjMga25vd3MgdGhhdCB3ZSByZWFsbHkgY2FyZSBhYm91dCB0aGUgbWFzayByZWdpc3Rl
cnMuIFRoaXMgZm9yY2VzIHRoZQotICAgICAgICAvLyBjb25zdGFudHMgdG8gYmUgbWF0ZXJpYWxp
emVkIGluIHJlZ2lzdGVycy4KLSAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudChtX3RhZ1R5
cGVOdW1iZXItPmtleSgpKTsKLSAgICAgICAgbV9wcm9jLmFkZEZhc3RDb25zdGFudChtX3RhZ01h
c2stPmtleSgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKG1fb3V0LmNvbnN0
SW50UHRyKGNvZGVCbG9jaygpKSwgYWRkcmVzc0ZvcihKU1N0YWNrOjpDb2RlQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGRpZE92ZXJmbG93U3Rh
Y2soKSwgcmFyZWx5KHN0YWNrT3ZlcmZsb3cpLCB1c3VhbGx5KGNoZWNrQXJndW1lbnRzKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzdGFja092ZXJmbG93LCBtX2hhbmRsZUV4
Y2VwdGlvbnMpOwotICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93RXJyb3IpLCBtX2NhbGxGcmFtZSwgbV9v
dXQuY29uc3RJbnRQdHIoY29kZUJsb2NrKCkpKTsKLSAgICAgICAgbV9vdXQucGF0Y2hwb2ludChW
b2lkKS0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgewotICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSB0ZXJtaW5hbCwgc28gd2UgY2FuIGNsb2JiZXIgZXZlcnl0aGluZy4gVGhhdCdzIHdoeSB3
ZSBkb24ndCBjbGFpbSB0bwotICAgICAgICAgICAgICAgIC8vIGNsb2JiZXIgc2NyYXRjaC4KLSAg
ICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNo
KGppdCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmNvcHlDYWxsZWVT
YXZlc1RvVk1DYWxsZWVTYXZlc0J1ZmZlcigpOwotICAgICAgICAgICAgICAgIGppdC5tb3ZlKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQudm0oKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7Ci0gICAgICAgICAgICAgICAgaml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpD
YWxsIGNhbGwgPSBqaXQuY2FsbCgpOwotICAgICAgICAgICAgICAgIGppdC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAg
ICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGNhbGwsIEZ1bmN0aW9uUHRyKGxvb2t1cEV4Y2Vw
dGlvbkhhbmRsZXJGcm9tQ2FsbGVyRnJhbWUpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faGFuZGxlRXhjZXB0aW9ucywgY2hlY2tBcmd1bWVudHMp
OwotICAgICAgICBCb3g8Q0NhbGxIZWxwZXJzOjpMYWJlbD4gZXhjZXB0aW9uSGFuZGxlciA9IHN0
YXRlLT5leGNlcHRpb25IYW5kbGVyOwotICAgICAgICBtX291dC5wYXRjaHBvaW50KFZvaWQpLT5z
ZXRHZW5lcmF0b3IoCi0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBT
dGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXAgPSBqaXQuanVtcCgpOwotICAgICAgICAgICAgICAgIGppdC5hZGRMaW5rVGFz
aygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoanVtcCwgbGlua0J1ZmZlci5s
b2NhdGlvbk9mKCpleGNlcHRpb25IYW5kbGVyKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0FyZ3VtZW50cywgbG93QmxvY2sobV9ncmFwaC5i
bG9jaygwKSkpOwotICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5jbGVhcigpOwotICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2FscyA9IE9wZXJhbmRzPEF2YWlsYWJpbGl0eT4oY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKSwgMCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNv
ZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKLSAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KLSAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSkpOwotICAgICAgICB9Ci0gICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Ci0gICAgICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsg
aS0tOykgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07
Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9
IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG5vZGUpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5v
ZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBp
dCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFsbG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCi0gICAg
ICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBsb2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVz
IHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290IHB1dCBpbgotICAgICAgICAgICAgICAgIC8vIHBs
YWNlIG9mIHRoZSBvcmlnaW5hbCBTZXRBcmd1bWVudCBkb2Vzbid0IGhhdmUgYW55IGVmZmVjdHMg
YmVmb3JlIGl0LiBUaGlzCi0gICAgICAgICAgICAgICAgLy8gc2hvdWxkIGhvbGQgdHJ1ZS4KLSAg
ICAgICAgICAgICAgICBtX2xvYWRlZEFyZ3VtZW50VmFsdWVzLmFkZChub2RlLCBqc1ZhbHVlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3dpdGNoIChtX2dyYXBo
Lm1fYXJndW1lbnRGb3JtYXRzW2ldKSB7Ci0gICAgICAgICAgICBjYXNlIEZsdXNoZWRJbnQzMjoK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUp
LCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRl
KEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFs
dWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgRmx1c2hlZENl
bGw6Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1Zh
bHVlKSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCBmb3IgYXJndW1lbnQiKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX291dC5qdW1wKGxv
d0Jsb2NrKG1fZ3JhcGguYmxvY2soMCkpKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoREZHOjpC
YXNpY0Jsb2NrKiBibG9jayA6IHByZU9yZGVyKQotICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJs
b2NrKTsKLQotICAgICAgICAvLyBXZSBjcmVhdGUgYWxsIFBoaSdzIHVwIGZyb250LCBidXQgd2Ug
bWF5IHRoZW4gZGVjaWRlIG5vdCB0byBjb21waWxlIHRoZSBiYXNpYyBibG9jawotICAgICAgICAv
LyB0aGF0IHdvdWxkIGhhdmUgY29udGFpbmVkIG9uZSBvZiB0aGVtLiBTbyB0aGlzIGNyZWF0ZXMg
b3JwaGFucywgd2hpY2ggdHJpZ2dlcnMgQjMKLSAgICAgICAgLy8gdmFsaWRhdGlvbiBmYWlsdXJl
cy4gQ2FsbGluZyB0aGlzIGZpeGVzIHRoZSBpc3N1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
Tm90ZSB0aGF0IHlvdSBzaG91bGQgYXZvaWQgdGhlIHRlbXB0YXRpb24gdG8gbWFrZSB0aGlzIGNh
bGwgY29uZGl0aW9uYWwgdXBvbgotICAgICAgICAvLyB2YWxpZGF0aW9uIGJlaW5nIGVuYWJsZWQu
IEIzIG1ha2VzIG5vIGd1YXJhbnRlZXMgb2YgYW55IGtpbmQgb2YgY29ycmVjdG5lc3Mgd2hlbgot
ICAgICAgICAvLyBkZWFsaW5nIHdpdGggSVIgdGhhdCB3b3VsZCBoYXZlIGZhaWxlZCB2YWxpZGF0
aW9uLiBGb3IgZXhhbXBsZSwgaXQgd291bGQgYmUgdmFsaWQgdG8KLSAgICAgICAgLy8gd3JpdGUg
YSBCMyBwaGFzZSB0aGF0IHNvIGFnZ3Jlc3NpdmVseSBhc3N1bWVzIHRoZSBsYWNrIG9mIG9ycGhh
bnMgdGhhdCBpdCB3b3VsZCBjcmFzaAotICAgICAgICAvLyBpZiBhbnkgb3JwaGFucyB3ZXJlIGFy
b3VuZC4gV2UgbWlnaHQgZXZlbiBoYXZlIHN1Y2ggcGhhc2VzIGFscmVhZHkuCi0gICAgICAgIG1f
cHJvYy5kZWxldGVPcnBoYW5zKCk7Ci0KLSAgICAgICAgLy8gV2UgcHV0IHRoZSBibG9ja3MgaW50
byB0aGUgQjMgcHJvY2VkdXJlIGluIGEgc3VwZXIgd2VpcmQgb3JkZXIuIE5vdyB3ZSByZW9yZGVy
IHRoZW0uCi0gICAgICAgIG1fb3V0LmFwcGx5QmxvY2tPcmRlcigpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICAKLSAgICB2b2lkIGNyZWF0ZVBoaVZhcmlhYmxlcygpCi0gICAgewotICAgICAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJs
b2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2st
PnNpemUoKTsgbm9kZUluZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IERG
Rzo6UGhpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBM
VHlwZSB0eXBlOwotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVS
ZXN1bHRNYXNrKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgotICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuZG91YmxlVHlwZTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6Ci0gICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQzMjsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50NTI6Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBtX291dC5pbnQ2NDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBOb2RlUmVzdWx0Qm9vbGVhbjoKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZSA9IG1fb3V0LmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgTm9kZVJlc3VsdEpTOgotICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50NjQ7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBu
b2RlLCAiQmFkIFBoaSBub2RlIHJlc3VsdCB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUs
IG1fcHJvYy5hZGQ8VmFsdWU+KEIzOjpQaGksIHR5cGUsIE9yaWdpbihub2RlKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJsb2NrKERG
Rzo6QmFzaWNCbG9jayogYmxvY2spCi0gICAgewotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkNvbXBpbGluZyBibG9jayAiLCAqYmxvY2ss
ICJcbiIpOwotICAgICAgICAKLSAgICAgICAgbV9oaWdoQmxvY2sgPSBibG9jazsKLSAgICAgICAg
Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IGFueSBibG9ja3MgY3JlYXRlZCB3aGlsZSBsb3dl
cmluZyBjb2RlIGluIHRoZSBoaWdoIGJsb2NrIGhhdmUgdGhlIGZyZXF1ZW5jeSBvZgotICAgICAg
ICAvLyB0aGUgaGlnaCBibG9jay4gVGhpcyBpcyBhcHByb3ByaWF0ZSBiZWNhdXNlIEIzIGRvZXNu
J3QgbmVlZCBwcmVjaXNlIGZyZXF1ZW5jaWVzLiBJdCBqdXN0IG5lZWRzCi0gICAgICAgIC8vIHNv
bWV0aGluZyByb3VnaGx5IGFwcHJveGltYXRlIGZvciB0aGluZ3MgbGlrZSByZWdpc3RlciBhbGxv
Y2F0aW9uLgotICAgICAgICBtX291dC5zZXRGcmVxdWVuY3kobV9oaWdoQmxvY2stPmV4ZWN1dGlv
bkNvdW50KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxvd0Jsb2NrID0gbV9ibG9j
a3MuZ2V0KG1faGlnaEJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIG1fbmV4dEhpZ2hCbG9jayA9
IDA7Ci0gICAgICAgIGZvciAoQmxvY2tJbmRleCBuZXh0QmxvY2tJbmRleCA9IG1faGlnaEJsb2Nr
LT5pbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytuZXh0
QmxvY2tJbmRleCkgewotICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5ibG9j
ayhuZXh0QmxvY2tJbmRleCk7Ci0gICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2NrKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIG1fbmV4dExvd0Jsb2NrID0g
bV9uZXh0SGlnaEJsb2NrID8gbV9ibG9ja3MuZ2V0KG1fbmV4dEhpZ2hCbG9jaykgOiAwOwotICAg
ICAgICAKLSAgICAgICAgLy8gQWxsIG9mIHRoaXMgZWZmb3J0IHRvIGZpbmQgdGhlIG5leHQgYmxv
Y2sgZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8ga2VlcCB0aGUKLSAgICAgICAgLy8gZ2VuZXJhdGVk
IElSIGluIHJvdWdobHkgcHJvZ3JhbSBvcmRlci4gVGhpcyBvdWdodCBub3QgYWZmZWN0IHRoZSBw
ZXJmb3JtYW5jZQotICAgICAgICAvLyBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgKHNpbmNlIHdlIGV4
cGVjdCBMTFZNIHRvIHJlb3JkZXIgdGhpbmdzKSBidXQgaXQgd2lsbAotICAgICAgICAvLyBtYWtl
IElSIGR1bXBzIGVhc2llciB0byByZWFkLgotICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9j
aywgbV9uZXh0TG93QmxvY2spOwotICAgICAgICAKLSAgICAgICAgaWYgKE9wdGlvbnM6OmZ0bENy
YXNoZXMoKSkKLSAgICAgICAgICAgIG1fb3V0LnRyYXAoKTsKLSAgICAgICAgCi0gICAgICAgIGlm
ICghbV9oaWdoQmxvY2stPmNmYUhhc1Zpc2l0ZWQpIHsKLSAgICAgICAgICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZyBi
ZWNhdXNlIENGQSBkaWRuJ3QgcmVhY2guXG4iKTsKLSAgICAgICAgICAgIGNyYXNoKG1faGlnaEJs
b2NrLT5pbmRleCwgVUlOVF9NQVgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBtX2F2YWlsYWJpbGl0eUNhbGN1bGF0b3IuYmVnaW5CbG9jayhtX2hp
Z2hCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBtX3N0YXRlLnJlc2V0KCk7Ci0gICAgICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAobV9ub2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsr
bV9ub2RlSW5kZXgpIHsKLSAgICAgICAgICAgIGlmICghY29tcGlsZU5vZGUobV9ub2RlSW5kZXgp
KQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBz
YWZlbHlJbnZhbGlkYXRlQWZ0ZXJUZXJtaW5hdGlvbigpCi0gICAgewotICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgZGF0YUxvZygiQmFpbGluZy5c
biIpOwotICAgICAgICBjcmFzaCgpOwotCi0gICAgICAgIC8vIEludmFsaWRhdGUgZG9taW5hdGVk
IGJsb2Nrcy4gVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgd2Ugd291bGQgZXhwZWN0Ci0gICAg
ICAgIC8vIHRoZW0gdG8gYmUgaW52YWxpZGF0ZWQgYWxyZWFkeS4gQnV0IHlvdSBjYW4gaGF2ZSB0
aGUgQ0ZBIGJlY29tZSBtb3JlCi0gICAgICAgIC8vIHByZWNpc2Ugb3ZlciB0aW1lIGJlY2F1c2Ug
dGhlIHN0cnVjdHVyZXMgb2Ygb2JqZWN0cyBjaGFuZ2Ugb24gdGhlIG1haW4KLSAgICAgICAgLy8g
dGhyZWFkLiBGYWlsaW5nIHRvIGRvIHRoaXMgd291bGQgcmVzdWx0IGluIHdlaXJkIGNyYXNoZXMg
ZHVlIHRvIGEgdmFsdWUKLSAgICAgICAgLy8gYmVpbmcgdXNlZCBidXQgbm90IGRlZmluZWQuIFJh
Y2UgY29uZGl0aW9ucyBGVFchCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgREZHOjpC
YXNpY0Jsb2NrKiB0YXJnZXQgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAg
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaC5tX2RvbWluYXRvcnMtPmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkg
ewotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkJsb2NrICIsICp0YXJnZXQsICIgd2lsbCBiYWlsIGFs
c28uXG4iKTsKLSAgICAgICAgICAgICAgICB0YXJnZXQtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgY29tcGlsZU5vZGUo
dW5zaWduZWQgbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQo
KSkgewotICAgICAgICAgICAgc2FmZWx5SW52YWxpZGF0ZUFmdGVyVGVybWluYXRpb24oKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9u
b2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fb3JpZ2luID0gbV9u
b2RlLT5vcmlnaW47Ci0gICAgICAgIG1fb3V0LnNldE9yaWdpbihtX25vZGUpOwotICAgICAgICAK
LSAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgIGRh
dGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxuIik7Ci0gICAgICAgIAotICAgICAgICBtX2F2
YWlsYWJsZVJlY292ZXJpZXMucmVzaXplKDApOwotICAgICAgICAKLSAgICAgICAgbV9pbnRlcnBy
ZXRlci5zdGFydEV4ZWN1dGluZygpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUt
Pm9wKCkpIHsKLSAgICAgICAgY2FzZSBERkc6OlVwc2lsb246Ci0gICAgICAgICAgICBjb21waWxl
VXBzaWxvbigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpQaGk6Ci0g
ICAgICAgICAgICBjb21waWxlUGhpKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG91YmxlQ29u
c3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxlRG91YmxlQ29uc3RhbnQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxl
SW50NTJDb25zdGFudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG91Ymxl
UmVwOgotICAgICAgICAgICAgY29tcGlsZURvdWJsZVJlcCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKLSAgICAgICAgICAgIGNvbXBpbGVEb3VibGVB
c0ludDMyKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERkc6OlZhbHVlUmVw
OgotICAgICAgICAgICAgY29tcGlsZVZhbHVlUmVwKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBJbnQ1MlJlcDoKLSAgICAgICAgICAgIGNvbXBpbGVJbnQ1MlJlcCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgotICAgICAgICAgICAg
Y29tcGlsZVZhbHVlVG9JbnQzMigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Qm9vbGVhblRvTnVtYmVyOgotICAgICAgICAgICAgY29tcGlsZUJvb2xlYW5Ub051bWJlcigpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6Ci0g
ICAgICAgICAgICBjb21waWxlRXh0cmFjdE9TUkVudHJ5TG9jYWwoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdldFN0YWNrOgotICAgICAgICAgICAgY29tcGlsZUdldFN0YWNr
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRTdGFjazoKLSAgICAgICAg
ICAgIGNvbXBpbGVQdXRTdGFjaygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
REZHOjpDaGVjazoKLSAgICAgICAgICAgIGNvbXBpbGVOb09wKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUb1RoaXM6Ci0gICAgICAgICAgICBjb21waWxlVG9UaGlzKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgICAgIGNv
bXBpbGVWYWx1ZUFkZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyQ2F0
OgotICAgICAgICAgICAgY29tcGlsZVN0ckNhdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXJpdGhBZGQ6Ci0gICAgICAgIGNhc2UgQXJpdGhTdWI6Ci0gICAgICAgICAgICBj
b21waWxlQXJpdGhBZGRPclN1YigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJpdGhDbHozMjoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aENsejMyKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0
aE11bCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhEaXY6Ci0gICAg
ICAgICAgICBjb21waWxlQXJpdGhEaXYoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFyaXRoTW9kOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoTW9kKCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE1pbjoKLSAgICAgICAgY2FzZSBBcml0aE1heDoK
LSAgICAgICAgICAgIGNvbXBpbGVBcml0aE1pbk9yTWF4KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcml0aEFiczoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aEFicygpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhTaW46Ci0gICAgICAgICAgICBj
b21waWxlQXJpdGhTaW4oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRo
Q29zOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoQ29zKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcml0aFBvdzoKLSAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhSYW5kb206Ci0gICAgICAgICAg
ICBjb21waWxlQXJpdGhSYW5kb20oKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFyaXRoUm91bmQ6Ci0gICAgICAgICAgICBjb21waWxlQXJpdGhSb3VuZCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhTcXJ0OgotICAgICAgICAgICAgY29tcGlsZUFy
aXRoU3FydCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJpdGhMb2c6Ci0g
ICAgICAgICAgICBjb21waWxlQXJpdGhMb2coKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFyaXRoRlJvdW5kOgotICAgICAgICAgICAgY29tcGlsZUFyaXRoRlJvdW5kKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aE5lZ2F0ZToKLSAgICAgICAgICAg
IGNvbXBpbGVBcml0aE5lZ2F0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
REZHOjpCaXRBbmQ6Ci0gICAgICAgICAgICBjb21waWxlQml0QW5kKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBERkc6OkJpdE9yOgotICAgICAgICAgICAgY29tcGlsZUJpdE9y
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBERkc6OkJpdFhvcjoKLSAgICAg
ICAgICAgIGNvbXBpbGVCaXRYb3IoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEJpdFJTaGlmdDoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRSU2hpZnQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEJpdExTaGlmdDoKLSAgICAgICAgICAgIGNvbXBpbGVCaXRM
U2hpZnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0g
ICAgICAgICAgICBjb21waWxlQml0VVJTaGlmdCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVUludDMyVG9OdW1iZXI6Ci0gICAgICAgICAgICBjb21waWxlVUludDMyVG9OdW1i
ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBDaGVja0NlbGw6Ci0gICAgICAgICAgICBjb21waWxlQ2hlY2tDZWxsKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja05vdEVtcHR5OgotICAgICAg
ICAgICAgY29tcGlsZUNoZWNrTm90RW1wdHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENoZWNrQmFkQ2VsbDoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVja0JhZENlbGwoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrSWRlbnQ6Ci0gICAgICAgICAg
ICBjb21waWxlQ2hlY2tJZGVudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0RXhlY3V0YWJsZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRFeGVjdXRhYmxlKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgotICAgICAg
ICAgICAgY29tcGlsZUFycmF5aWZ5VG9TdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAgIGNvbXBpbGVQdXRTdHJ1Y3R1
cmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEJ5SWQ6Ci0gICAgICAg
IGNhc2UgR2V0QnlJZEZsdXNoOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5SWQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEluOgotICAgICAgICAgICAgY29tcGlsZUluKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRCeUlkOgotICAgICAgICBjYXNl
IFB1dEJ5SWREaXJlY3Q6Ci0gICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgotICAgICAgICAgICAg
Y29tcGlsZVB1dEJ5SWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1dEdl
dHRlckJ5SWQ6Ci0gICAgICAgIGNhc2UgUHV0U2V0dGVyQnlJZDoKLSAgICAgICAgICAgIGNvbXBp
bGVQdXRBY2Nlc3NvckJ5SWQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB1
dEdldHRlclNldHRlckJ5SWQ6Ci0gICAgICAgICAgICBjb21waWxlUHV0R2V0dGVyU2V0dGVyQnlJ
ZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0R2V0dGVyQnlWYWw6Ci0g
ICAgICAgIGNhc2UgUHV0U2V0dGVyQnlWYWw6Ci0gICAgICAgICAgICBjb21waWxlUHV0QWNjZXNz
b3JCeVZhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ1dHRlcmZseSgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5UmVhZE9ubHk6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnV0dGVyZmx5UmVhZE9ubHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IENvbnN0YW50U3RvcmFnZVBvaW50ZXI6Ci0gICAgICAgICAgICBjb21waWxlQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0SW5kZXhl
ZFByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlT
dG9yYWdlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0FycmF5Ogot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrQXJyYXkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldEFycmF5TGVu
Z3RoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOgot
ICAgICAgICAgICAgY29tcGlsZUNoZWNrSW5Cb3VuZHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdldEJ5VmFsOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBQdXRCeVZhbDoKLSAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAg
ICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgotICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheVB1c2g6Ci0gICAgICAgICAg
ICBjb21waWxlQXJyYXlQdXNoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheVBvcDoKLSAgICAgICAgICAgIGNvbXBpbGVBcnJheVBvcCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgICAgIGNvbXBpbGVD
cmVhdGVBY3RpdmF0aW9uKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdG
dW5jdGlvbjoKLSAgICAgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgotICAgICAgICBjYXNlIE5l
d0dlbmVyYXRvckZ1bmN0aW9uOgotICAgICAgICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDcmVhdGVEaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgICAgICBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDcmVhdGVTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBj
b21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDcmVhdGVDbG9uZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlQ3JlYXRl
Q2xvbmVkQXJndW1lbnRzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOZXdP
YmplY3Q6Ci0gICAgICAgICAgICBjb21waWxlTmV3T2JqZWN0KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgICAgIGNvbXBpbGVOZXdBcnJheSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAg
ICAgICAgICBjb21waWxlTmV3QXJyYXlCdWZmZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6Ci0gICAgICAgICAgICBjb21waWxlTmV3QXJyYXlX
aXRoU2l6ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTmV3VHlwZWRBcnJh
eToKLSAgICAgICAgICAgIGNvbXBpbGVOZXdUeXBlZEFycmF5KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldDoKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgICAgICBjb21waWxlUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9T
dHJpbmc6Ci0gICAgICAgIGNhc2UgQ2FsbFN0cmluZ0NvbnN0cnVjdG9yOgotICAgICAgICAgICAg
Y29tcGlsZVRvU3RyaW5nT3JDYWxsU3RyaW5nQ29uc3RydWN0b3IoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRvUHJpbWl0aXZlOgotICAgICAgICAgICAgY29tcGlsZVRvUHJp
bWl0aXZlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNYWtlUm9wZToKLSAg
ICAgICAgICAgIGNvbXBpbGVNYWtlUm9wZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJBdCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKLSAgICAg
ICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5n
RnJvbUNoYXJDb2RlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKLSAgICAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRCeU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0R2V0dGVyOgotICAgICAgICAgICAgY29tcGlsZUdldEdldHRlcigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0U2V0dGVyOgotICAgICAgICAgICAgY29tcGlsZUdldFNl
dHRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNl
dDoKLSAgICAgICAgICAgIGNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRC
eU9mZnNldCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTXVsdGlQdXRCeU9m
ZnNldDoKLSAgICAgICAgICAgIGNvbXBpbGVNdWx0aVB1dEJ5T2Zmc2V0KCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2V0R2xv
YmFsTGV4aWNhbFZhcmlhYmxlOgotICAgICAgICAgICAgY29tcGlsZUdldEdsb2JhbFZhcmlhYmxl
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXJpYWJsZToK
LSAgICAgICAgICAgIGNvbXBpbGVQdXRHbG9iYWxWYXJpYWJsZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgTm90aWZ5V3JpdGU6Ci0gICAgICAgICAgICBjb21waWxlTm90aWZ5
V3JpdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldENhbGxlZToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRDYWxsZWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEFyZ3VtZW50Q291bnQ6Ci0gICAgICAgICAgICBjb21waWxlR2V0QXJndW1lbnRD
b3VudCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0U2NvcGU6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0U2NvcGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNraXBTY29wZToKLSAgICAgICAgICAgIGNvbXBpbGVTa2lwU2NvcGUoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0Q2xvc3VyZVZhcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHV0
Q2xvc3VyZVZhcjoKLSAgICAgICAgICAgIGNvbXBpbGVQdXRDbG9zdXJlVmFyKCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgotICAgICAgICAgICAg
Y29tcGlsZUdldEZyb21Bcmd1bWVudHMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFB1dFRvQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZVB1dFRvQXJndW1lbnRzKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6Ci0gICAgICAgICAg
ICBjb21waWxlQ29tcGFyZUVxKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6Ci0gICAgICAgICAgICBjb21waWxlQ29tcGFyZVN0cmljdEVxKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKLSAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlTGVzcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3NFcToKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlTGVzc0VxKCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKLSAgICAgICAgICAg
IGNvbXBpbGVDb21wYXJlR3JlYXRlcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlR3JlYXRlckVx
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMb2dpY2FsTm90OgotICAgICAg
ICAgICAgY29tcGlsZUxvZ2ljYWxOb3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENhbGw6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgotICAgICAgICBj
YXNlIENvbnN0cnVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3QoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRhaWxDYWxsOgotICAgICAgICAgICAgY29t
cGlsZVRhaWxDYWxsKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKLSAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
Ci0gICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgotICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgotICAgICAgICAg
ICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgotICAgICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdz
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKLSAg
ICAgICAgICAgIGNvbXBpbGVGb3J3YXJkVmFyYXJncygpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgREZHOjpKdW1wOgotICAgICAgICAgICAgY29tcGlsZUp1bXAoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERGRzo6QnJhbmNoOgotICAgICAgICAgICAgY29t
cGlsZUJyYW5jaCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgREZHOjpTd2l0
Y2g6Ci0gICAgICAgICAgICBjb21waWxlU3dpdGNoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBERkc6OlJldHVybjoKLSAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKLSAgICAgICAgICAg
IGNvbXBpbGVGb3JjZU9TUkV4aXQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFRocm93OgotICAgICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6Ci0gICAgICAgICAgICBj
b21waWxlVGhyb3coKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEludmFsaWRh
dGlvblBvaW50OgotICAgICAgICAgICAgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKLSAgICAgICAgICAgIGNv
bXBpbGVJc1VuZGVmaW5lZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSXNC
b29sZWFuOgotICAgICAgICAgICAgY29tcGlsZUlzQm9vbGVhbigpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSXNOdW1iZXI6Ci0gICAgICAgICAgICBjb21waWxlSXNOdW1iZXIo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzU3RyaW5nOgotICAgICAgICAg
ICAgY29tcGlsZUlzU3RyaW5nKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJ
c09iamVjdDoKLSAgICAgICAgICAgIGNvbXBpbGVJc09iamVjdCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSXNPYmplY3RPck51bGw6Ci0gICAgICAgICAgICBjb21waWxlSXNP
YmplY3RPck51bGwoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElzRnVuY3Rp
b246Ci0gICAgICAgICAgICBjb21waWxlSXNGdW5jdGlvbigpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgVHlwZU9mOgotICAgICAgICAgICAgY29tcGlsZVR5cGVPZigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2hlY2tUeXBlSW5mb0ZsYWdzOgotICAgICAg
ICAgICAgY29tcGlsZUNoZWNrVHlwZUluZm9GbGFncygpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT3ZlcnJpZGVzSGFzSW5zdGFuY2U6Ci0gICAgICAgICAgICBjb21waWxlT3Zl
cnJpZGVzSGFzSW5zdGFuY2UoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIElu
c3RhbmNlT2Y6Ci0gICAgICAgICAgICBjb21waWxlSW5zdGFuY2VPZigpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKLSAgICAgICAgICAgIGNvbXBp
bGVJbnN0YW5jZU9mQ3VzdG9tKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b3VudEV4ZWN1dGlvbjoKLSAgICAgICAgICAgIGNvbXBpbGVDb3VudEV4ZWN1dGlvbigpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgotICAgICAgICAgICAg
Y29tcGlsZVN0b3JlQmFycmllcigpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzR2VuZXJpY1Byb3BlcnR5
OgotICAgICAgICAgICAgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1l
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3Ro
OgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICAgICAgICAgIGNvbXBp
bGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxl
R2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKLSAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgICAg
ICAgICBjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKLSAgICAgICAgICAgIGNv
bXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb24oKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKLSAgICAgICAgICAgIGNvbXBpbGVDaGVj
a1dhdGNoZG9nVGltZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlS
ZXN0OgotICAgICAgICAgICAgY29tcGlsZUNvcHlSZXN0KCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldFJlc3RM
ZW5ndGgoKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgotICAgICAgICBjYXNlIExvb3BIaW50OgotICAgICAgICBjYXNlIE1vdkhpbnQ6Ci0gICAgICAg
IGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBFeGl0T0s6Ci0gICAgICAgIGNhc2UgUGhh
bnRvbU5ld09iamVjdDoKLSAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246Ci0gICAgICAg
IGNhc2UgUGhhbnRvbU5ld0dlbmVyYXRvckZ1bmN0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21D
cmVhdGVBY3RpdmF0aW9uOgotICAgICAgICBjYXNlIFBoYW50b21EaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgIGNhc2UgUGhhbnRvbUNsb25lZEFyZ3VtZW50czoKLSAgICAgICAgY2FzZSBQdXRIaW50
OgotICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgotICAgICAgICBjYXNlIEtpbGxTdGFjazoKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kIik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9k
ZS0+aXNUZXJtaW5hbCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAg
ICAgICAgaWYgKCFtX3N0YXRlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgc2FmZWx5SW52YWxp
ZGF0ZUFmdGVyVGVybWluYXRpb24oKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShtX25v
ZGUpOwotICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVV
cHNpbG9uKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSB1cHNpbG9uVmFsdWUgPSBudWxscHRyOwot
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgRG91YmxlUmVwVXNlOgotICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW50MzJV
c2U6Ci0gICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKLSAgICAgICAgICAgIHVwc2lsb25WYWx1
ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSW50NTJSZXBVc2U6Ci0gICAgICAgICAgICB1cHNpbG9uVmFsdWUgPSBsb3dJbnQ1
MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEJv
b2xlYW5Vc2U6Ci0gICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgotICAgICAgICAgICAgdXBz
aWxvblZhbHVlID0gbG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgot
ICAgICAgICAgICAgdXBzaWxvblZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICB1
cHNpbG9uVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBWYWx1ZUZyb21CbG9jayB1cHNpbG9uID0gbV9vdXQuYW5jaG9yKHVwc2lsb25WYWx1
ZSk7Ci0gICAgICAgIExWYWx1ZSBwaGlOb2RlID0gbV9waGlzLmdldChtX25vZGUtPnBoaSgpKTsK
LSAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwaGlOb2RlLCB1cHNpbG9uKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUGhpKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBwaGkg
PSBtX3BoaXMuZ2V0KG1fbm9kZSk7Ci0gICAgICAgIG1fb3V0Lm1fYmxvY2stPmFwcGVuZChwaGkp
OwotCi0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5mbGFncygpICYgTm9kZVJlc3VsdE1hc2spIHsK
LSAgICAgICAgY2FzZSBOb2RlUmVzdWx0RG91YmxlOgotICAgICAgICAgICAgc2V0RG91YmxlKHBo
aSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBOb2RlUmVzdWx0SW50MzI6Ci0g
ICAgICAgICAgICBzZXRJbnQzMihwaGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTm9kZVJlc3VsdEludDUyOgotICAgICAgICAgICAgc2V0SW50NTIocGhpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE5vZGVSZXN1bHRCb29sZWFuOgotICAgICAgICAgICAg
c2V0Qm9vbGVhbihwaGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTm9kZVJl
c3VsdEpTOgotICAgICAgICAgICAgc2V0SlNWYWx1ZShwaGkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVEb3VibGVDb25zdGFudCgpCi0gICAgewotICAgICAgICBz
ZXREb3VibGUobV9vdXQuY29uc3REb3VibGUobV9ub2RlLT5hc051bWJlcigpKSk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUludDUyQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgaW50
NjRfdCB2YWx1ZSA9IG1fbm9kZS0+YXNNYWNoaW5lSW50KCk7Ci0gICAgICAgIAotICAgICAgICBz
ZXRJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91
bnQpKTsKLSAgICAgICAgc2V0U3RyaWN0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSkpOwot
ICAgIH0KLQotICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgUmVhbE51bWJl
clVzZTogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgZG91YmxlVmFsdWUgPSB1bmJveERvdWJsZSh2YWx1ZSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkRvdWJsZVJlcCBSZWFsTnVtYmVyVXNlIGludCBjYXNlIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJEb3VibGVSZXAg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1
ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwg
cmFyZWx5KGludENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUodmFsdWUpLCBtX25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVy
LAotICAgICAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkgJiB+U3BlY0Z1bGxEb3VibGUpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuaW50VG9Eb3VibGUodW5ib3hJbnQzMih2
YWx1ZSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91
YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgotICAgICAg
ICBjYXNlIE51bWJlclVzZTogewotICAgICAgICAgICAgYm9vbCBzaG91bGRDb252ZXJ0Tm9uTnVt
YmVyID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hp
bmcgaW50IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVUZXN0aW5nID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBkb3VibGUgY2Fz
ZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5lZCBjYXNlIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVl
VG9Eb3VibGUgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGRvdWJs
ZVRlc3RpbmcpLCB1bnN1cmUoaW50Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGRvdWJsZVRlc3Rp
bmcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRUb0RvdWJs
ZSA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5pbnRUb0RvdWJsZSh1bmJv
eEludDMyKHZhbHVlKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVUZXN0aW5nLCBk
b3VibGVDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVtYmVyID0gaXNOdW1iZXIo
dmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKHZhbHVlSXNOdW1iZXIsIHVzdWFsbHkoZG91YmxlQ2FzZSksIHJhcmVseShub25Eb3Vi
bGVDYXNlKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vbkRv
dWJsZUNhc2UpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgdW5ib3hlZERvdWJsZSA9IG1f
b3V0LmFuY2hvcih1bmJveERvdWJsZSh2YWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICBpZiAoc2hvdWxkQ29udmVydE5vbk51bWJlcikg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIHVuZGVmaW5lZCBjYXNlIikp
OwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHRlc3ROdWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgbnVsbCBjYXNlIikpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJq
c1ZhbHVlVG9Eb3VibGUgY29udmVydGluZyBudWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
anNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVhbiB0cnVlIGNhc2UiKSk7Ci0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnQgYm9vbGVhbiB0cnVlIGNhc2UiKSk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udmVydEJvb2xlYW5GYWxzZUNhc2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0IGJvb2xlYW4gZmFsc2Ug
Y2FzZSIpKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2Us
IHVuZGVmaW5lZENhc2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzVW5kZWZpbmVk
ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsK
LSAgICAgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc1VuZGVmaW5lZCwgdW5zdXJlKHVu
ZGVmaW5lZENhc2UpLCB1bnN1cmUodGVzdE51bGxDYXNlKSk7Ci0KLSAgICAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyh1bmRlZmluZWRDYXNlLCB0ZXN0TnVsbENhc2UpOwotICAgICAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFVuZGVmaW5lZCA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8odGVzdE51bGxDYXNlLCBu
dWxsQ2FzZSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNOdWxsID0gbV9vdXQuZXF1
YWwodmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKHZhbHVlSXNOdWxsLCB1bnN1cmUobnVsbENhc2UpLCB1bnN1cmUodGVzdEJv
b2xlYW5UcnVlQ2FzZSkpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obnVsbENh
c2UsIHRlc3RCb29sZWFuVHJ1ZUNhc2UpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGNvbnZlcnRlZE51bGwgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwotICAg
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHRlc3RCb29sZWFuVHJ1ZUNhc2UsIGNvbnZlcnRCb29sZWFuVHJ1ZUNh
c2UpOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzQm9vbGVhblRydWUgPSBtX291dC5l
cXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZVRydWUpKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2godmFsdWVJc0Jvb2xlYW5UcnVlLCB1bnN1cmUoY29udmVydEJvb2xlYW5U
cnVlQ2FzZSksIHVuc3VyZShjb252ZXJ0Qm9vbGVhbkZhbHNlQ2FzZSkpOwotCi0gICAgICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xl
YW5GYWxzZUNhc2UpOwotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZFRy
dWUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMSkpOwotICAgICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UgPSBtX291dC5ub3RFcXVhbCh2YWx1
ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZUZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgflNwZWNDZWxs
LCB2YWx1ZUlzTm90Qm9vbGVhbkZhbHNlKTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjb252ZXJ0ZWRGYWxzZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgwKSk7Ci0g
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAg
ICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBpbnRUb0RvdWJsZSwgdW5i
b3hlZERvdWJsZSwgY29udmVydGVkVW5kZWZpbmVkLCBjb252ZXJ0ZWROdWxsLCBjb252ZXJ0ZWRU
cnVlLCBjb252ZXJ0ZWRGYWxzZSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBt
X25vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIsIG1fb3V0LmJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotCi0gICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXREb3VibGUoc3RyaWN0SW50NTJUb0Rv
dWJsZShsb3dTdHJpY3RJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZURvdWJsZUFzSW50MzIoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIGludGVnZXJWYWx1ZSA9IGNvbnZlcnREb3VibGVUb0ludDMyKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1v
ZGUoKSkpOwotICAgICAgICBzZXRJbnQzMihpbnRlZ2VyVmFsdWUpOwotICAgIH0KLQotICAgIHZv
aWQgY29tcGlsZVZhbHVlUmVwKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2Rl
LT5jaGlsZDEoKSwgflNwZWNEb3VibGVJbXB1cmVOYU4pKSB7Ci0gICAgICAgICAgICAgICAgdmFs
dWUgPSBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFs
KHZhbHVlLCB2YWx1ZSksIHZhbHVlLCBtX291dC5jb25zdERvdWJsZShQTmFOKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEpTVmFsdWUoYm94RG91YmxlKHZh
bHVlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHN0cmljdElu
dDUyVG9KU1ZhbHVlKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUludDUyUmVwKCkKLSAgICB7
Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAg
Y2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LnNpZ25FeHQz
MlRvNjQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Ci0gICAgICAgICAgICBz
ZXRTdHJpY3RJbnQ1MigKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVG9TdHJpY3RJbnQ1MigKLSAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBNYWNoaW5lSW50VXNlOgotICAg
ICAgICAgICAgc2V0U3RyaWN0SW50NTIoCi0gICAgICAgICAgICAgICAgZG91YmxlVG9TdHJpY3RJ
bnQ1MigKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKSwgbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVmFsdWVUb0ludDMyKCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAg
ICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RU
b0ludDMyKGxvd1N0cmljdEludDUyKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKLSAgICAgICAg
ICAgIHNldEludDMyKGRvdWJsZVRvSW50MzIobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE51bWJlclVz
ZToKLSAgICAgICAgY2FzZSBOb3RDZWxsVXNlOiB7Ci0gICAgICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobV9ub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwot
ICAgICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW50
MzIodmFsdWUudmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldCht
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBzZXRJbnQzMihudW1iZXJPck5vdENlbGxUb0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCksIHZhbHVlLnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gV2UnbGwgYmFzaWNhbGx5
IGp1c3QgZ2V0IGhlcmUgZm9yIGNvbnN0YW50cy4gQnV0IGl0J3MgZ29vZCB0byBoYXZlIHRoaXMK
LSAgICAgICAgICAgIC8vIGNhdGNoLWFsbCBzaW5jZSB3ZSBvZnRlbiBhZGQgbmV3IHJlcHJlc2Vu
dGF0aW9ucyBpbnRvIHRoZSBtaXguCi0gICAgICAgICAgICBzZXRJbnQzMigKLSAgICAgICAgICAg
ICAgICBudW1iZXJPck5vdENlbGxUb0ludDMyKAotICAgICAgICAgICAgICAgICAgICBtX25vZGUt
PmNoaWxkMSgpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJvb2xlYW5Ub051bWJl
cigpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgIGNhc2UgQm9vbGVhblVzZTogewotICAgICAgICAgICAgc2V0SW50MzIobV9vdXQu
emVyb0V4dChsb3dCb29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX291dC5pbnQzMikpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0
ZXIubmVlZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDEoKSwgU3BlY0Jvb2xJbnQzMiB8IFNwZWNC
b29sZWFuKSkgewotICAgICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChtX291dC5j
YXN0VG9JbnQzMih2YWx1ZSksIG1fb3V0LmludDMyT25lKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBib29sZWFuQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGVhblRvTnVtYmVyIGJv
b2xlYW4gY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGVhblRvTnVtYmVyIGNvbnRpbnVhdGlvbiIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Qm9vbGVhblJlc3VsdCA9
IG1fb3V0LmFuY2hvcih2YWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICAgICAgaXNCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwK
LSAgICAgICAgICAgICAgICB1bnN1cmUoYm9vbGVhbkNhc2UpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oYm9vbGVhbkNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBib29sZWFuUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJpdE9yKAotICAg
ICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHQodW5ib3hCb29sZWFuKHZhbHVlKSwgbV9vdXQuaW50
NjQpLCBtX3RhZ1R5cGVOdW1iZXIpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgYm9vbGVhblJlc3VsdCwgbm90Qm9vbGVhblJlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2NhbCgp
Ci0gICAgewotICAgICAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5j
b2RlZEpTVmFsdWUqPigKLSAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+ZnRsRm9yT1NS
RW50cnkoKS0+ZW50cnlCdWZmZXIoKS0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsgbV9ub2RlLT51bmxpbmtlZExv
Y2FsKCkudG9Mb2NhbCgpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRTdGFj
aygpCi0gICAgewotICAgICAgICAvLyBHZXRMb2NhbHMgYXJpc2Ugb25seSBmb3IgY2FwdHVyZWQg
dmFyaWFibGVzIGFuZCBhcmd1bWVudHMuIEZvciBhcmd1bWVudHMsIHdlIG1pZ2h0IGhhdmUKLSAg
ICAgICAgLy8gYWxyZWFkeSBsb2FkZWQgaXQuCi0gICAgICAgIGlmIChMVmFsdWUgdmFsdWUgPSBt
X2xvYWRlZEFyZ3VtZW50VmFsdWVzLmdldChtX25vZGUpKSB7Ci0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsK
LSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQoZGF0YS0+bG9jYWwpOwotICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIGlzQ29uY3JldGUoZGF0YS0+Zm9ybWF0KSk7Ci0gICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBkYXRhLT5mb3JtYXQgIT0gRmx1c2hlZERvdWJsZSk7IC8vIFRoaXMganVz
dCBoYXBwZW5zIHRvIG5vdCBhcmlzZSBmb3IgR2V0U3RhY2tzLCByaWdodCBub3cuIEl0IHdvdWxk
IGJlIHRyaXZpYWwgdG8gc3VwcG9ydC4KLSAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb24odmFsdWUubV90eXBlKSkKLSAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQz
MihwYXlsb2FkRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9j
YWwpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dFN0YWNrKCkKLSAgICB7Ci0g
ICAgICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIHN3aXRjaCAoZGF0YS0+Zm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRh
dGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlRG91YmxlKHZhbHVlLCBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZs
dXNoZWRJbnQzMjogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9y
KGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNoZWRJbnQ1MjogewotICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2NhbCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZsdXNo
ZWRDZWxsOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0ZvcihkYXRh
LT5tYWNoaW5lTG9jYWwpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjogewotICAgICAgICAgICAgc3BlY3Vs
YXRlQm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQo
Ci0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAgIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGlu
ZUxvY2FsKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGZsdXNoIGZvcm1hdCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTm9PcCgpCi0gICAgewotICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHNwZWN1bGF0ZSk7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVRvVGhpcygpCi0gICAgewotICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9UaGlzIGlzIGNlbGwgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlRvVGhpcyBzbG93IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9UaGlzIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShz
bG93Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBzbG93Q2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IodmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2go
aXNUeXBlKHZhbHVlLCBGaW5hbE9iamVjdFR5cGUpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShzbG93Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIEpfSklUT3BlcmF0aW9uX0VKIGZ1bmN0aW9uOwot
ICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpKQotICAgICAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25Ub1RoaXNTdHJpY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uVG9UaGlzOwotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAg
dm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBtX2NhbGxGcmFt
ZSwgdmFsdWUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKCkKLSAgICB7Ci0gICAg
ICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVEFkZEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVBZGQp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJDYXQoKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIHJlc3VsdDsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQzKCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblN0ckNhdDMpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgICAg
ICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiks
Ci0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDMoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25TdHJDYXQyKSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAg
ICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pLAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SlNWYWx1ZShyZXN1
bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVBcml0aEFkZE9yU3ViKCkKLSAgICB7
Ci0gICAgICAgIGJvb2wgaXNTdWIgPSAgbV9ub2RlLT5vcCgpID09IEFyaXRoU3ViOwotICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJV
c2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigp
KTsKLQotICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+YXJpdGhN
b2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgc2V0SW50MzIoaXNTdWIgPyBtX291dC5zdWIobGVm
dCwgcmlnaHQpIDogbV9vdXQuYWRkKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIENoZWNrVmFsdWUqIHJlc3VsdCA9Ci0g
ICAgICAgICAgICAgICAgaXNTdWIgPyBtX291dC5zcGVjdWxhdGVTdWIobGVmdCwgcmlnaHQpIDog
bV9vdXQuc3BlY3VsYXRlQWRkKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3Vs
YXRpb24ocmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0g
ICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7Ci0gICAgICAgICAg
ICBpZiAoIWFic3RyYWN0VmFsdWUobV9ub2RlLT5jaGlsZDEoKSkuY291bGRCZVR5cGUoU3BlY0lu
dDUyKQotICAgICAgICAgICAgICAgICYmICFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkp
LmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpIHsKLSAgICAgICAgICAgICAgICBJbnQ1MktpbmQga2lu
ZDsKLSAgICAgICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9k
ZS0+Y2hpbGQxKCksIGtpbmQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0lu
dDUyKG1fbm9kZS0+Y2hpbGQyKCksIGtpbmQpOwotICAgICAgICAgICAgICAgIHNldEludDUyKGlz
U3ViID8gbV9vdXQuc3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmFkZChsZWZ0LCByaWdodCksIGtp
bmQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBMVmFsdWUgbGVmdCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBD
aGVja1ZhbHVlKiByZXN1bHQgPQotICAgICAgICAgICAgICAgIGlzU3ViID8gbV9vdXQuc3BlY3Vs
YXRlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LnNwZWN1bGF0ZUFkZChsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBDMSA9IGxvd0RvdWJsZShtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBDMiA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MigpKTsKLQotICAgICAgICAgICAgc2V0RG91YmxlKGlzU3ViID8gbV9vdXQuZG91YmxlU3ViKEMx
LCBDMikgOiBtX291dC5kb3VibGVBZGQoQzEsIEMyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgaWYgKCFp
c1N1YikgewotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZW1pdEJpbmFyeVNuaXBwZXQ8SklUU3ViR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1
ZVN1Yik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUFyaXRoQ2x6MzIoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIG9wZXJhbmQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQuY3RsejMyKG9wZXJhbmQp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQXJpdGhNdWwoKQotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMy
VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0KLSAgICAgICAg
ICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkKLSAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX291dC5tdWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgQ2hlY2tWYWx1ZSogc3BlY3VsYXRpb24gPSBtX291dC5z
cGVjdWxhdGVNdWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRp
b24oc3BlY3VsYXRpb24sIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3JpZ2luKTsK
LSAgICAgICAgICAgICAgICByZXN1bHQgPSBzcGVjdWxhdGlvbjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhNb2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoTXVsIHNsb3cgY2FzZSIpKTsKLSAgICAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoTXVsIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihy
ZXN1bHQpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihsZWZ0
LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVa
ZXJvLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
SW50NTJSZXBVc2U6IHsKLSAgICAgICAgICAgIEludDUyS2luZCBraW5kOwotICAgICAgICAgICAg
TFZhbHVlIGxlZnQgPSBsb3dXaGljaGV2ZXJJbnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsK
LSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQyKCksIG9w
cG9zaXRlKGtpbmQpKTsKLQotICAgICAgICAgICAgQ2hlY2tWYWx1ZSogcmVzdWx0ID0gbV9vdXQu
c3BlY3VsYXRlTXVsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIGJsZXNzU3BlY3VsYXRpb24o
cmVzdWx0LCBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0KLSAgICAg
ICAgICAgIGlmIChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkg
ewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE11bCBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQocmVzdWx0KSwgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNl
LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50NjRaZXJv
KSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCBu
dWxscHRyLCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50NjRaZXJvKSk7Ci0gICAgICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzZXRJbnQ1MihyZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewot
ICAgICAgICAgICAgc2V0RG91YmxlKAotICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU11bChs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIFVudHlwZWRV
c2U6IHsKLSAgICAgICAgICAgIGVtaXRCaW5hcnlTbmlwcGV0PEpJVE11bEdlbmVyYXRvcj4ob3Bl
cmF0aW9uVmFsdWVNdWwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIGNvbXBpbGVBcml0aERpdigpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Ymlu
YXJ5VXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExW
YWx1ZSBudW1lcmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAg
IExWYWx1ZSBkZW5vbWluYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAg
ICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB6ZXJvTnVtZXJhdG9yID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aERpdiB6ZXJvIG51bWVyYXRvciIpKTsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBudW1lcmF0b3JDb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkFyaXRoRGl2IG51bWVyYXRvciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmlzWmVybzMyKG51bWVy
YXRvciksCi0gICAgICAgICAgICAgICAgICAgIHJhcmVseSh6ZXJvTnVtZXJhdG9yKSwgdXN1YWxs
eShudW1lcmF0b3JDb250aW51YXRpb24pKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh6ZXJvTnVtZXJhdG9yLCBudW1lcmF0b3JD
b250aW51YXRpb24pOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgICAgICBOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4oZGVub21p
bmF0b3IsIG1fb3V0LmludDMyWmVybykpOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChu
dW1lcmF0b3JDb250aW51YXRpb24pOwotCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bnVtZXJhdG9yQ29udGludWF0aW9uLCBpbm5lckxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5h
cml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bnNhZmVEZW5vbWlu
YXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgdW5zYWZlIGRlbm9taW5hdG9y
IikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiQXJpdGhEaXYgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAg
ICAgTFZhbHVlIGFkanVzdGVkRGVub21pbmF0b3IgPSBtX291dC5hZGQoZGVub21pbmF0b3IsIG1f
b3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmFib3ZlKGFkanVzdGVkRGVub21pbmF0b3IsIG1fb3V0LmludDMyT25l
KSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkodW5z
YWZlRGVub21pbmF0b3IpKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQzMigtMjE0NzQ4
MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwg
bnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1YWwobnVtZXJh
dG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5kaXYobnVtZXJh
dG9yLCBkZW5vbWluYXRvcik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAg
ICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChtX291dC5tdWwocmVzdWx0LCBkZW5vbWluYXRvciksIG51bWVyYXRvcikp
OwotICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBzZXRJbnQzMihtX291dC5jaGlsbERpdihudW1lcmF0b3IsIGRlbm9t
aW5hdG9yKSk7Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNldERvdWJsZShtX291
dC5kb3VibGVEaXYoCi0gICAgICAgICAgICAgICAgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkp
LCBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBlbWl0Qmlu
YXJ5U25pcHBldDxKSVREaXZHZW5lcmF0b3IsIE5lZWRTY3JhdGNoRlBSPihvcGVyYXRpb25WYWx1
ZURpdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVBcml0aE1vZCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNl
S2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBu
dW1lcmF0b3IgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1
ZSBkZW5vbWluYXRvciA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgICAg
ICBMVmFsdWUgcmVtYWluZGVyOwotICAgICAgICAgICAgaWYgKHNob3VsZENoZWNrT3ZlcmZsb3co
bV9ub2RlLT5hcml0aE1vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB1bnNh
ZmVEZW5vbWluYXRvciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgdW5zYWZlIGRl
bm9taW5hdG9yIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhNb2QgY29udGludWF0aW9uIikpOwotCi0gICAg
ICAgICAgICAgICAgTFZhbHVlIGFkanVzdGVkRGVub21pbmF0b3IgPSBtX291dC5hZGQoZGVub21p
bmF0b3IsIG1fb3V0LmludDMyT25lKTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKGFkanVzdGVkRGVub21pbmF0b3IsIG1fb3V0
LmludDMyT25lKSwKLSAgICAgICAgICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkodW5zYWZlRGVub21pbmF0b3IpKTsKLQotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5zYWZlRGVub21pbmF0b3IsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIG5lZzJUb1RoZTMxID0gbV9vdXQuY29uc3RJbnQz
MigtMjE0NzQ4MzY0Ny0xKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvMzIoZGVub21pbmF0b3IpKTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuZXF1
YWwobnVtZXJhdG9yLCBuZWcyVG9UaGUzMSkpOwotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5t
b2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0g
cmVzdWx0OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmVtYWluZGVyID0g
bV9vdXQuY2hpbGxNb2QobnVtZXJhdG9yLCBkZW5vbWluYXRvcik7Ci0KLSAgICAgICAgICAgIGlm
IChzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5lZ2F0aXZlTnVtZXJhdG9yID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJBcml0aE1vZCBuZWdhdGl2ZSBudW1lcmF0b3IiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbnVtZXJhdG9yQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJBcml0aE1vZCBudW1lcmF0b3IgY29udGludWF0aW9uIikpOwotCi0gICAgICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sZXNzVGhhbihudW1lcmF0
b3IsIG1fb3V0LmludDMyWmVybyksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShuZWdhdGl2
ZU51bWVyYXRvciksIHVuc3VyZShudW1lcmF0b3JDb250aW51YXRpb24pKTsKLQotICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGlubmVyTGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuZWdhdGl2
ZU51bWVyYXRvciwgbnVtZXJhdG9yQ29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvMzIocmVtYWlu
ZGVyKSk7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKG51bWVyYXRvckNvbnRpbnVhdGlv
bik7Ci0KLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhudW1lcmF0b3JDb250aW51YXRp
b24sIGlubmVyTGFzdE5leHQpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZXRJbnQz
MihyZW1haW5kZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewotICAgICAgICAgICAgc2V0RG91YmxlKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU1vZChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEo
KSksIGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aE1pbk9yTWF4KCkK
LSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzZXRJbnQzMigKLSAg
ICAgICAgICAgICAgICBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+
b3AoKSA9PSBBcml0aE1pbgotICAgICAgICAgICAgICAgICAgICAgICAgPyBtX291dC5sZXNzVGhh
bihsZWZ0LCByaWdodCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogbV9vdXQubGVzc1RoYW4o
cmlnaHQsIGxlZnQpLAotICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIERvdWJs
ZVJlcFVzZTogewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dEb3VibGUobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdExlc3NU
aGFuID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE1pbi9Bcml0aE1heCBub3QgbGVzcyB0
aGFuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aE1pbi9Bcml0aE1heCBjb250aW51YXRpb24iKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGxlZnQp
KTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX25vZGUtPm9w
KCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAgICAgICAgPyBtX291dC5kb3VibGVMZXNzVGhh
bihsZWZ0LCByaWdodCkKLSAgICAgICAgICAgICAgICAgICAgOiBtX291dC5kb3VibGVHcmVhdGVy
VGhhbihsZWZ0LCByaWdodCksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShub3RMZXNzVGhhbikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdExlc3NUaGFuLCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LnNlbGVjdCgK
LSAgICAgICAgICAgICAgICBtX25vZGUtPm9wKCkgPT0gQXJpdGhNaW4KLSAgICAgICAgICAgICAg
ICAgICAgPyBtX291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpCi0gICAg
ICAgICAgICAgICAgICAgIDogbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0
KSwKLSAgICAgICAgICAgICAgICByaWdodCwgbV9vdXQuY29uc3REb3VibGUoUE5hTikpKSk7Ci0g
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAg
ICAgc2V0RG91YmxlKG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCByZXN1bHRzKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVBcml0aEFicygpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgICAgICBMVmFs
dWUgbWFzayA9IG1fb3V0LmFTaHIodmFsdWUsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5iaXRYb3IobWFzaywgbV9vdXQuYWRkKG1hc2ss
IHZhbHVlKSk7Ci0KLSAgICAgICAgICAgIGlmIChzaG91bGRDaGVja092ZXJmbG93KG1fbm9kZS0+
YXJpdGhNb2RlKCkpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1
ZSgpLCAwLCBtX291dC5lcXVhbChyZXN1bHQsIG1fb3V0LmNvbnN0SW50MzIoMSA8PCAzMSkpKTsK
LQotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAg
ICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVBYnMobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHZvaWQgY29tcGlsZUFyaXRoU2luKCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU2luKGxvd0Rv
dWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aENvcygp
IHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUNvcyhsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkp
KTsgfQotCi0gICAgdm9pZCBjb21waWxlQXJpdGhQb3coKQotICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IGludmVzdGlnYXRlIGxsdm0ucG93aSB0byBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgcGVyZm9y
bWFuY2UgY2hhcmFjdGVyaXN0aWNzLgotICAgICAgICAvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8g
aGF2ZSB0aGUgaW5saW5lIGxvb3AgaW4gREZHIHRvby4KLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQyKCkudXNlS2luZCgpID09IEludDMyVXNlKQotICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0
LmRvdWJsZVBvd2kobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMigpKSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50
ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoUG93IHRlc3QgaW50ZWdlciBleHBvbmVudCBpcyBzbWFsbC4iKSk7Ci0gICAgICAgICAgICBM
QmFzaWNCbG9jayBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiQXJpdGhQb3cgcG93KGRvdWJsZSwgKGludClkb3VibGUpLiIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGRvdWJsZUV4cG9uZW50UG93QmxvY2tFbnRyeSA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJpdGhQb3cgcG93KGRvdWJsZSwgZG91YmxlKS4iKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBuYW5FeGNlcHRpb25FeHBvbmVudElzSW5maW5pdHkgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkFyaXRoUG93IE5hTiBFeGNlcHRpb24sIGNoZWNrIGV4cG9uZW50IGlzIGluZmluaXR5
LiIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4Y2VwdGlvbkJhc2VJc09uZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiwgY2hlY2sgYmFzZSBp
cyBvbmUuIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgcG93QmxvY2sgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkFyaXRoUG93IHJlZ3VsYXIgcG93IikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFy
aXRoUG93IE5hTiBFeGNlcHRpb24sIHJlc3VsdCBpcyBOYU4uIikpOwotICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyRXhwb25lbnQgPSBt
X291dC5kb3VibGVUb0ludChleHBvbmVudCk7Ci0gICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4
cG9uZW50Q29udmVydGVkVG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyRXhwb25l
bnQpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50SXNJbnRlZ2VyID0gbV9vdXQuZG91Ymxl
RXF1YWwoZXhwb25lbnQsIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChleHBvbmVudElzSW50ZWdlciwgdW5zdXJlKGludGVnZXJFeHBv
bmVudElzU21hbGxCbG9jayksIHVuc3VyZShkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpKTsK
LQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRl
Z2VyRXhwb25lbnRJc1NtYWxsQmxvY2ssIGludGVnZXJFeHBvbmVudFBvd0Jsb2NrKTsKLSAgICAg
ICAgICAgIExWYWx1ZSBpbnRlZ2VyRXhwb25lbnRCZWxvdzEwMDAgPSBtX291dC5iZWxvdyhpbnRl
Z2VyRXhwb25lbnQsIG1fb3V0LmNvbnN0SW50MzIoMTAwMCkpOwotICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGludGVnZXJFeHBvbmVudEJlbG93MTAwMCwgdXN1YWxseShpbnRlZ2VyRXhwb25lbnRQ
b3dCbG9jayksIHJhcmVseShkb3VibGVFeHBvbmVudFBvd0Jsb2NrRW50cnkpKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50UG93QmxvY2ssIGRvdWJsZUV4cG9u
ZW50UG93QmxvY2tFbnRyeSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb3dEb3VibGVJ
bnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZG91YmxlUG93aShiYXNlLCBpbnRlZ2VyRXhw
b25lbnQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgLy8gSWYgeSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oZG91YmxlRXhwb25lbnRQb3dCbG9ja0VudHJ5LCBuYW5FeGNlcHRpb25FeHBv
bmVudElzSW5maW5pdHkpOwotICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50SXNOYU47Ci0gICAg
ICAgICAgICBpZiAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMigpKSAmIFNwZWNEb3VibGVOYU4p
Ci0gICAgICAgICAgICAgICAgZXhwb25lbnRJc05hTiA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQoZXhwb25lbnQsIGV4cG9uZW50KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBleHBvbmVudElzTmFOID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKGV4cG9uZW50SXNOYU4sIHJhcmVseShuYW5FeGNlcHRpb25SZXN1bHRJc05h
TiksIHVzdWFsbHkobmFuRXhjZXB0aW9uRXhwb25lbnRJc0luZmluaXR5KSk7Ci0KLSAgICAgICAg
ICAgIC8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzICtpbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBO
YU4uCi0gICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAtaW5maW5pdHksIHRo
ZSByZXN1bHQgaXMgTmFOLgotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhjZXB0aW9u
RXhwb25lbnRJc0luZmluaXR5LCBuYW5FeGNlcHRpb25CYXNlSXNPbmUpOwotICAgICAgICAgICAg
TFZhbHVlIGFic29sdXRlRXhwb25lbnQgPSBtX291dC5kb3VibGVBYnMoZXhwb25lbnQpOwotICAg
ICAgICAgICAgTFZhbHVlIGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5ID0gbV9vdXQuZG91Ymxl
RXF1YWwoYWJzb2x1dGVFeHBvbmVudCwgbV9vdXQuY29uc3REb3VibGUoc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goYWJz
b2x1dGVFeHBvbmVudElzSW5maW5pdHksIHJhcmVseShuYW5FeGNlcHRpb25CYXNlSXNPbmUpLCB1
c3VhbGx5KHBvd0Jsb2NrKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2Vw
dGlvbkJhc2VJc09uZSwgcG93QmxvY2spOwotICAgICAgICAgICAgTFZhbHVlIGFic29sdXRlQmFz
ZSA9IG1fb3V0LmRvdWJsZUFicyhiYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUJh
c2VJc09uZSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlQmFzZSwgbV9vdXQuY29uc3REb3Vi
bGUoMSkpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGFic29sdXRlQmFzZUlzT25lLCB1bnN1
cmUobmFuRXhjZXB0aW9uUmVzdWx0SXNOYU4pLCB1bnN1cmUocG93QmxvY2spKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ocG93QmxvY2ssIG5hbkV4Y2VwdGlvblJlc3VsdElzTmFOKTsK
LSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5kb3VibGVQb3coYmFzZSwgZXhwb25lbnQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obmFuRXhjZXB0aW9uUmVz
dWx0SXNOYU4sIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwdXJl
TmFuID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKLSAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhp
KG1fb3V0LmRvdWJsZVR5cGUsIHBvd0RvdWJsZUludFJlc3VsdCwgcG93UmVzdWx0LCBwdXJlTmFu
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFJhbmRvbSgpCi0g
ICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotCi0gICAgICAgIC8vIElubGlu
ZWQgV2Vha1JhbmRvbTo6YWR2YW5jZSgpLgotICAgICAgICAvLyB1aW50NjRfdCB4ID0gbV9sb3c7
Ci0gICAgICAgIHZvaWQqIGxvd0FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihn
bG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6OndlYWtSYW5kb21PZmZzZXQoKSArIFdlYWtS
YW5kb206Omxvd09mZnNldCgpOwotICAgICAgICBMVmFsdWUgbG93ID0gbV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKGxvd0FkZHJlc3MpKTsKLSAgICAgICAgLy8gdWludDY0X3QgeSA9IG1faGln
aDsKLSAgICAgICAgdm9pZCogaGlnaEFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihnbG9iYWxPYmplY3QpICsgSlNHbG9iYWxPYmplY3Q6OndlYWtSYW5kb21PZmZzZXQoKSArIFdl
YWtSYW5kb206OmhpZ2hPZmZzZXQoKTsKLSAgICAgICAgTFZhbHVlIGhpZ2ggPSBtX291dC5sb2Fk
NjQobV9vdXQuYWJzb2x1dGUoaGlnaEFkZHJlc3MpKTsKLSAgICAgICAgLy8gbV9sb3cgPSB5Owot
ICAgICAgICBtX291dC5zdG9yZTY0KGhpZ2gsIG1fb3V0LmFic29sdXRlKGxvd0FkZHJlc3MpKTsK
LQotICAgICAgICAvLyB4IF49IHggPDwgMjM7Ci0gICAgICAgIExWYWx1ZSBwaGFzZTEgPSBtX291
dC5iaXRYb3IobV9vdXQuc2hsKGxvdywgbV9vdXQuY29uc3RJbnQ2NCgyMykpLCBsb3cpOwotCi0g
ICAgICAgIC8vIHggXj0geCA+PiAxNzsKLSAgICAgICAgTFZhbHVlIHBoYXNlMiA9IG1fb3V0LmJp
dFhvcihtX291dC5sU2hyKHBoYXNlMSwgbV9vdXQuY29uc3RJbnQ2NCgxNykpLCBwaGFzZTEpOwot
Ci0gICAgICAgIC8vIHggXj0geSBeICh5ID4+IDI2KTsKLSAgICAgICAgTFZhbHVlIHBoYXNlMyA9
IG1fb3V0LmJpdFhvcihtX291dC5iaXRYb3IoaGlnaCwgbV9vdXQubFNocihoaWdoLCBtX291dC5j
b25zdEludDY0KDI2KSkpLCBwaGFzZTIpOwotCi0gICAgICAgIC8vIG1faGlnaCA9IHg7Ci0gICAg
ICAgIG1fb3V0LnN0b3JlNjQocGhhc2UzLCBtX291dC5hYnNvbHV0ZShoaWdoQWRkcmVzcykpOwot
Ci0gICAgICAgIC8vIHJldHVybiB4ICsgeTsKLSAgICAgICAgTFZhbHVlIHJhbmRvbTY0ID0gbV9v
dXQuYWRkKHBoYXNlMywgaGlnaCk7Ci0KLSAgICAgICAgLy8gRXh0cmFjdCByYW5kb20gNTNiaXQu
IFswLCA1M10gYml0IGlzIHNhZmUgaW50ZWdlciBudW1iZXIgcmFuZ2VzIGluIGRvdWJsZSByZXBy
ZXNlbnRhdGlvbi4KLSAgICAgICAgTFZhbHVlIHJhbmRvbTUzID0gbV9vdXQuYml0QW5kKHJhbmRv
bTY0LCBtX291dC5jb25zdEludDY0KCgxVUxMIDw8IDUzKSAtIDEpKTsKLQotICAgICAgICBMVmFs
dWUgZG91YmxlNTNJbnRlZ2VyID0gbV9vdXQuaW50VG9Eb3VibGUocmFuZG9tNTMpOwotCi0gICAg
ICAgIC8vIENvbnZlcnQgYCg1M2JpdCBkb3VibGUgaW50ZWdlciB2YWx1ZSkgLyAoMSA8PCA1Mylg
IHRvIGAoNTNiaXQgZG91YmxlIGludGVnZXIgdmFsdWUpICogKDEuMCAvICgxIDw8IDUzKSlgLgot
ICAgICAgICAvLyBJbiBsYXR0ZXIgY2FzZSwgYDEuMCAvICgxIDw8IDUzKWAgd2lsbCBiZWNvbWUg
YSBkb3VibGUgdmFsdWUgcmVwcmVzZW50ZWQgYXMgKG1hbnRpc3NhID0gMCAmIGV4cCA9IDk3MCwg
aXQgbWVhbnMgMWUtKDIqKjU0KSkuCi0gICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgc2NhbGUg
PSAxLjAgLyAoMVVMTCA8PCA1Myk7Ci0KLSAgICAgICAgLy8gTXVsdGlwbHlpbmcgMWUtKDIqKjU0
KSB3aXRoIHRoZSBkb3VibGUgaW50ZWdlciBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcgb2YgdGhl
IG1hbnRpc3NhIHBhcnQgb2YgdGhlIGRvdWJsZSBpbnRlZ2VyLgotICAgICAgICAvLyBJdCBqdXN0
IHJlZHVjZXMgdGhlIGV4cCBwYXJ0IG9mIHRoZSBnaXZlbiA1M2JpdCBkb3VibGUgaW50ZWdlci4K
LSAgICAgICAgLy8gKEV4Y2VwdCBmb3IgMC4wLiBUaGlzIGlzIHNwZWNpYWxseSBoYW5kbGVkIGFu
ZCBpbiB0aGlzIGNhc2UsIGV4cCBqdXN0IGJlY29tZXMgMC4pCi0gICAgICAgIC8vIE5vdyB3ZSBn
ZXQgNTNiaXQgcHJlY2lzaW9uIHJhbmRvbSBkb3VibGUgdmFsdWUgaW4gWzAsIDEpLgotICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuZG91YmxlTXVsKGRvdWJsZTUzSW50ZWdlciwgbV9vdXQu
Y29uc3REb3VibGUoc2NhbGUpKTsKLQotICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFJvdW5kKCkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHJlYWxQYXJ0SXNNb3JlVGhhbkhhbGYgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRo
Um91bmQgc2hvdWxkIHJvdW5kIGRvd24iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhSb3VuZCBjb250aW51YXRpb24iKSk7
Ci0KLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBMVmFsdWUgaW50ZWdlclZhbHVlID0gbV9vdXQuZG91YmxlQ2VpbCh2YWx1ZSk7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGludGVnZXJWYWx1ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihp
bnRlZ2VyVmFsdWUpOwotCi0gICAgICAgIExWYWx1ZSByZWFsUGFydCA9IG1fb3V0LmRvdWJsZVN1
YihpbnRlZ2VyVmFsdWUsIHZhbHVlKTsKLQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZChyZWFsUGFydCwgbV9vdXQuY29uc3REb3VibGUoMC41
KSksIHVuc3VyZShyZWFsUGFydElzTW9yZVRoYW5IYWxmKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikp
OwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8ocmVhbFBh
cnRJc01vcmVUaGFuSGFsZiwgY29udGludWF0aW9uKTsKLSAgICAgICAgTFZhbHVlIGludGVnZXJW
YWx1ZVJvdW5kZWREb3duID0gbV9vdXQuZG91YmxlU3ViKGludGVnZXJWYWx1ZSwgbV9vdXQuY29u
c3REb3VibGUoMSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRlZ2VyVmFsdWVSb3VuZGVk
RG93blJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbnRlZ2VyVmFsdWVSb3VuZGVkRG93bik7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBo
aShtX291dC5kb3VibGVUeXBlLCBpbnRlZ2VyVmFsdWVSZXN1bHQsIGludGVnZXJWYWx1ZVJvdW5k
ZWREb3duUmVzdWx0KTsKLQotICAgICAgICBpZiAocHJvZHVjZXNJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhSb3VuZGluZ01vZGUoKSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBj
b252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHQsIHNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG1fbm9k
ZS0+YXJpdGhSb3VuZGluZ01vZGUoKSkpOwotICAgICAgICAgICAgc2V0SW50MzIoaW50ZWdlclZh
bHVlKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKSB7IHNldERvdWJsZShtX291dC5kb3Vi
bGVTcXJ0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9Ci0KLSAgICB2b2lkIGNvbXBp
bGVBcml0aExvZygpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUxvZyhsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSkpKTsgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFyaXRoRlJvdW5kKCkKLSAg
ICB7Ci0gICAgICAgIHNldERvdWJsZShtX291dC5mcm91bmQobG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUFyaXRoTmVnYXRlKCkKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAg
ICAgY2FzZSBJbnQzMlVzZTogewotICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQ7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobV9ub2RlLT5hcml0aE1v
ZGUoKSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhtX25vZGUtPmFyaXRoTW9k
ZSgpKSkgewotICAgICAgICAgICAgICAgIC8vICIwIC0geCIgaXMgdGhlIGNhbm9uaWNhbCB3YXkg
b2Ygc2F5aW5nICIteCIgaW4gYm90aCBCMyBhbmQgTExWTS4gVGhpcyBnZXRzCi0gICAgICAgICAg
ICAgICAgLy8gbG93ZXJlZCB0byB0aGUgcmlnaHQgdGhpbmcuCi0gICAgICAgICAgICAgICAgQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBtX291dC5zcGVjdWxhdGVTdWIobV9vdXQuaW50MzJaZXJvLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihjaGVjaywgT3ZlcmZsb3csIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNo
ZWNrOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3Zl
cmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQudGVzdElzWmVybzMyKHZhbHVlLCBtX291dC5jb25z
dEludDMyKDB4N2ZmZmZmZmYpKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubmVn
KHZhbHVlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZTogewotICAgICAgICAgICAgaWYgKCFhYnN0cmFjdFZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpLmNvdWxkQmVUeXBlKFNwZWNJbnQ1MikpIHsKLSAgICAgICAgICAgICAgICBJbnQ1
MktpbmQga2luZDsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dXaGljaGV2ZXJJ
bnQ1MihtX25vZGUtPmNoaWxkMSgpLCBraW5kKTsKLSAgICAgICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQubmVnKHZhbHVlKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE1vZGUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0
KSk7Ci0gICAgICAgICAgICAgICAgc2V0SW50NTIocmVzdWx0LCBraW5kKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBDaGVj
a1ZhbHVlKiByZXN1bHQgPSBtX291dC5zcGVjdWxhdGVTdWIobV9vdXQuaW50NjRaZXJvLCB2YWx1
ZSk7Ci0gICAgICAgICAgICBibGVzc1NwZWN1bGF0aW9uKHJlc3VsdCwgSW50NTJPdmVyZmxvdywg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX29yaWdpbik7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoTmVn
YXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwotICAgICAg
ICAgICAgc2V0SW50NTIocmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAgIHNl
dERvdWJsZShtX291dC5kb3VibGVOZWcobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVCaXRBbmQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0QmluYXJ5Qml0T3BTbmlwcGV0PEpJ
VEJpdEFuZEdlbmVyYXRvcj4ob3BlcmF0aW9uVmFsdWVCaXRBbmQpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBjb21waWxlQml0T3IoKQotICAgIHsKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0QmluYXJ5Qml0
T3BTbmlwcGV0PEpJVEJpdE9yR2VuZXJhdG9yPihvcGVyYXRpb25WYWx1ZUJpdE9yKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMihtX291dC5iaXRPcihs
b3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQml0WG9yKCkKLSAgICB7Ci0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1p
dEJpbmFyeUJpdE9wU25pcHBldDxKSVRCaXRYb3JHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0
WG9yKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRYb3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdFJTaGlmdCgpCi0g
ICAgewotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsK
LSAgICAgICAgICAgIGVtaXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
OjpTaWduZWRTaGlmdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
c2V0SW50MzIobV9vdXQuYVNocigKLSAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQx
KCkpLAotICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
LCBtX291dC5jb25zdEludDMyKDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
Qml0TFNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChV
bnR5cGVkVXNlKSkgewotICAgICAgICAgICAgZW1pdEJpbmFyeUJpdE9wU25pcHBldDxKSVRMZWZ0
U2hpZnRHZW5lcmF0b3I+KG9wZXJhdGlvblZhbHVlQml0TFNoaWZ0KTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBzZXRJbnQzMihtX291dC5zaGwoCi0gICAgICAgICAg
ICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUJpdFVSU2hpZnQoKQotICAgIHsKLSAgICAgICAgaWYg
KG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBlbWl0
UmlnaHRTaGlmdFNuaXBwZXQoSklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6VW5zaWduZWRTaGlmdCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2V0SW50MzIobV9vdXQu
bFNocigKLSAgICAgICAgICAgIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX291dC5jb25zdElu
dDMyKDMxKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVUludDMyVG9OdW1iZXIo
KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0KLSAgICAgICAgaWYgKGRvZXNPdmVyZmxvdyhtX25vZGUtPmFyaXRoTW9kZSgpKSkgewot
ICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnVuc2lnbmVkVG9Eb3VibGUodmFsdWUpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgc2V0SW50MzIodmFsdWUpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBFeGl0S2luZCBleGl0S2lu
ZDsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCi0gICAgICAg
ICAgICBleGl0S2luZCA9IEJhZENvbnN0YW50Q2FjaGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGV4aXRLaW5kID0gQmFkQ2FjaGU7Ci0KLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIENlbGxVc2U6Ci0gICAgICAgIGNhc2UgS25v
d25DZWxsVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNoZWNrU3RydWN0dXJlKAotICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJ
RCksIGpzVmFsdWVWYWx1ZShjZWxsKSwKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgbV9ub2Rl
LT5zdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgICAgICAgICBbJl0gKFN0cnVjdHVyZSogc3RydWN0
dXJlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrU3RydWN0dXJlSUQoc3RydWN0
dXJlKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgQ2VsbE9yT3RoZXJVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIENlbGxPck90aGVyVXNlIGNlbGwgY2FzZSIpKTsKLSAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJDaGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBub3QgY2VsbCBjYXNlIikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJD
aGVja1N0cnVjdHVyZSBDZWxsT3JPdGhlclVzZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5
cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENh
c2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwotICAgICAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0g
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1
cmVJRCksIGpzVmFsdWVWYWx1ZSh2YWx1ZSksCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIG1f
bm9kZS0+c3RydWN0dXJlU2V0KCksCi0gICAgICAgICAgICAgICAgWyZdIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha1N0cnVjdHVyZUlEKHN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZh
bHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0NlbGwgfCBTcGVjT3RoZXIsIGlzTm90T3RoZXIo
dmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNoZWNrQ2VsbCgp
Ci0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBCYWRDZWxsLCBqc1Zh
bHVlVmFsdWUoY2VsbCksIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLAotICAgICAgICAgICAgbV9v
dXQubm90RXF1YWwoY2VsbCwgd2Vha1BvaW50ZXIobV9ub2RlLT5jZWxsT3BlcmFuZCgpLT5jZWxs
KCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNoZWNrQmFkQ2VsbCgpCi0gICAg
ewotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2VsbCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxl
Q2hlY2tOb3RFbXB0eSgpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoVERaRmFpbHVyZSwgbm9W
YWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hlY2tJZGVudCgpCi0gICAgewotICAg
ICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ub2RlLT51aWRPcGVyYW5kKCk7Ci0gICAg
ICAgIGlmICh1aWQtPmlzU3ltYm9sKCkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBzeW1ib2wgPSBs
b3dTeW1ib2wobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIoc3ltYm9sLCBtX2hlYXBzLlN5bWJvbF9wcml2YXRlTmFtZSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkSWRlbnQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
bm90RXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZ0lkZW50KG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2Fk
UHRyKHN0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGUoQmFkSWRlbnQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubm90RXF1YWwoc3RyaW5nSW1w
bCwgbV9vdXQuY29uc3RJbnRQdHIodWlkKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9p
ZCBjb21waWxlR2V0RXhlY3V0YWJsZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2VsbCA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0ZUZ1bmN0aW9uKG1fbm9k
ZS0+Y2hpbGQxKCksIGNlbGwpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIoY2Vs
bCwgbV9oZWFwcy5KU0Z1bmN0aW9uX2V4ZWN1dGFibGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb21waWxlQXJyYXlpZnlUb1N0cnVjdHVyZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9
ICEhbV9ub2RlLT5jaGlsZDIoKSA/IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpIDogMDsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHVuZXhwZWN0ZWRTdHJ1Y3R1cmUgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkFycmF5aWZ5VG9TdHJ1Y3R1cmUgdW5leHBlY3RlZCBzdHJ1Y3R1cmUi
KSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiQXJyYXlpZnlUb1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoY2VsbCwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtTdHJ1Y3R1cmVJRChtX25vZGUt
PnN0cnVjdHVyZSgpKSksCi0gICAgICAgICAgICByYXJlbHkodW5leHBlY3RlZFN0cnVjdHVyZSks
IHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHVuZXhwZWN0ZWRTdHJ1Y3R1cmUsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBpZiAocHJvcGVydHkpIHsKLSAgICAgICAgICAgIHN3aXRj
aCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgotICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICAgICAgICAgIFVuY291bnRhYmxlLCBub1ZhbHVlKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFib3ZlT3JFcXVhbChwcm9wZXJ0eSwgbV9vdXQuY29uc3RJbnQzMihNSU5fU1BB
UlNFX0FSUkFZX0lOREVYKSkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52
b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUludDMyKSwgbV9jYWxsRnJh
bWUsIGNlbGwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKLSAgICAgICAgICAgIHZtQ2FsbChtX291dC52b2lkVHlwZSwgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbkVuc3VyZURvdWJsZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAgICAgdm1DYWxs
KG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRW5zdXJlQ29udGlndW91
cyksIG1fY2FsbEZyYW1lLCBjZWxsKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2U6Ci0gICAgICAgICAgICB2bUNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgY2VsbCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgQmFkSW5kZXhpbmdUeXBlLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCi0gICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmVJRCwgd2Vha1N0cnVjdHVyZUlEKG1fbm9kZS0+
c3RydWN0dXJlKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRTdHJ1Y3R1cmUoKQotICAgIHsKLSAgICAgICAg
bV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNp
dGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7Ci0g
ICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5l
eHQ7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICBB
U1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IG5ld1N0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7Ci0gICAgICAgIEFTU0VSVChv
bGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8o
KS50eXBlKCkpOwotCi0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIoCi0gICAgICAgICAgICB3ZWFrU3RydWN0dXJl
SUQobmV3U3RydWN0dXJlKSwKLSAgICAgICAgICAgIGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlJZCgpCi0gICAgewot
ICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgQ2VsbFVzZTogewotICAgICAgICAgICAgc2V0SlNWYWx1ZShnZXRCeUlkKGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgLy8gVGhpcyBp
cyBwcmV0dHkgd2VpcmQsIHNpbmNlIHdlIGR1cGxpY2F0ZSB0aGUgc2xvdyBwYXRoIGJvdGggaGVy
ZSBhbmQgaW4gdGhlCi0gICAgICAgICAgICAvLyBjb2RlIGdlbmVyYXRlZCBieSB0aGUgSUMuIFdl
IHNob3VsZCBpbnZlc3RpZ2F0ZSBtYWtpbmcgdGhpcyBsZXNzIGJhZC4KLSAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc4MzAKLSAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJHZXRCeUlkIHVudHlwZWQgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5SWQgdW50eXBl
ZCBub3QgY2VsbCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeUlkIHVudHlwZWQgY29udGludWF0aW9uIikp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAg
ICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGNl
bGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdENlbGxD
YXNlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNo
b3IoZ2V0QnlJZCh2YWx1ZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQg
PSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMpLAotICAgICAgICAgICAgICAgIG1f
Y2FsbEZyYW1lLCB2YWx1ZSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihtX2dy
YXBoLmlkZW50aWZpZXJzKClbbV9ub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKSkpOwotICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBjZWxsUmVzdWx0LCBub3RDZWxsUmVzdWx0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVB1dEJ5SWQoKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1f
bm9kZTsKLSAgICAgICAgCi0gICAgICAgIC8vIFNlZSBhYm92ZTsgQ2VsbFVzZSBpcyBlYXNpZXIg
c28gd2UgZG8gb25seSB0aGF0IGZvciBub3cuCi0gICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShub2Rl
LT5jaGlsZDIoKSk7Ci0gICAgICAgIGF1dG8gdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW25v
ZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0KLSAgICAgICAgQjM6OlBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7Ci0gICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3RlcihiYXNlKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29t
ZVJlZ2lzdGVyKHZhbHVlKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNl
dDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotCi0gICAgICAgIC8vIEZJWE1FOiBJZiB0aGlz
IGlzIGEgUHV0QnlJZEZsdXNoLCB3ZSBtaWdodCB3YW50IHRvIGxhdGUtY2xvYmJlciB2b2xhdGls
ZSByZWdpc3RlcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTI4NDgKLQotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRs
ZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhj
ZXB0aW9ucyhwYXRjaHBvaW50KTsKLQotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0
ZTsKLSAgICAgICAgRUNNQU1vZGUgZWNtYU1vZGUgPSBtX2dyYXBoLmV4ZWN1dGFibGVGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+ZWNtYU1vZGUoKTsKLSAgICAgICAgCi0gICAgICAgIHBhdGNo
cG9pbnQtPnNldEdlbmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0g
ICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAg
ICAgICAgICAgc3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0KLSAgICAgICAgICAgICAgICBCb3g8Q0NhbGxIZWxwZXJz
OjpKdW1wTGlzdD4gZXhjZXB0aW9ucyA9Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkhh
bmRsZS0+c2NoZWR1bGVFeGl0Q3JlYXRpb24ocGFyYW1zKS0+anVtcHMoaml0KTsKLQotICAgICAg
ICAgICAgICAgIC8vIEpTIHNldHRlciBjYWxsIElDcyBnZW5lcmF0ZWQgYnkgdGhlIFB1dEJ5SWQg
SUMgd2lsbCBuZWVkIHRoaXMuCi0gICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hl
ZHVsZUV4aXRDcmVhdGlvbkZvclVud2luZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAg
ICAgICAgICAgICAgYXV0byBnZW5lcmF0b3IgPSBCb3g8SklUUHV0QnlJZEdlbmVyYXRvcj46OmNy
ZWF0ZSgKLSAgICAgICAgICAgICAgICAgICAgaml0LmNvZGVCbG9jaygpLCBub2RlLT5vcmlnaW4u
c2VtYW50aWMsIGNhbGxTaXRlSW5kZXgsCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtcy51bmF2
YWlsYWJsZVJlZ2lzdGVycygpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBHUFJJbmZvOjpwYXRj
aHBvaW50U2NyYXRjaFJlZ2lzdGVyLCBlY21hTW9kZSwKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+b3AoKSA9PSBQdXRCeUlkRGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKLQotICAgICAg
ICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQpOwotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAg
ICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxs
SGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRj
aFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wKCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dQYXRoQ2Fs
bCA9IGNhbGxPcGVyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgZ2VuZXJhdG9y
LT5zbG93UGF0aEZ1bmN0aW9uKCksIEludmFsaWRHUFJSZWcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbmVyYXRvci0+c3R1YkluZm8o
KSksIHBhcmFtc1sxXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNb
MF0uZ3ByKCksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxsKCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5yZXBvcnRTbG93UGF0aENhbGwoc2xvd1Bh
dGhCZWdpbiwgc2xvd1BhdGhDYWxsKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFk
ZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3It
PmZpbmFsaXplKGxpbmtCdWZmZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVHZXRCdXR0ZXJmbHkoKQotICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZShs
b2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwotICAg
IH0KLQotICAgIHZvaWQgY29tcGlsZUdldEJ1dHRlcmZseVJlYWRPbmx5KCkKLSAgICB7Ci0gICAg
ICAgIHNldFN0b3JhZ2UobG9hZEJ1dHRlcmZseVJlYWRPbmx5KGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29uc3RhbnRTdG9yYWdlUG9p
bnRlcigpCi0gICAgewotICAgICAgICBzZXRTdG9yYWdlKG1fb3V0LmNvbnN0SW50UHRyKG1fbm9k
ZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7Ci0gICAgICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZSBTdHJpbmcgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlIFN0cmluZyBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVz
dWx0VmFsdWUgPSBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0
UmVzdWx0VmFsdWUpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgbV9vdXQubm90TnVsbChmYXN0UmVzdWx0VmFsdWUpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbiksIHJhcmVseShzbG93UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnRQdHIs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlUm9wZSksIG1fY2FsbEZyYW1lLCBjZWxs
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNldFN0b3JhZ2UobV9vdXQubG9h
ZFB0cihtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2RhdGEpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZShsb2FkVmVjdG9yV2l0aEJhcnJpZXIoY2VsbCkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja0FycmF5KCkKLSAgICB7Ci0gICAg
ICAgIEVkZ2UgZWRnZSA9IG1fbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIExWYWx1ZSBjZWxsID0g
bG93Q2VsbChlZGdlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgp
LmFscmVhZHlDaGVja2VkKG1fZ3JhcGgsIG1fbm9kZSwgYWJzdHJhY3RWYWx1ZShlZGdlKSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICBCYWRJbmRleGluZ1R5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKLSAgICAgICAgICAg
IG1fb3V0LmxvZ2ljYWxOb3QoaXNBcnJheVR5cGUoY2VsbCwgbV9ub2RlLT5hcnJheU1vZGUoKSkp
KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZVB0ciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
ICAgIAotCi0gICAgICAgIExCYXNpY0Jsb2NrIHNpbXBsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0IHdhc3RlbGVzcyB0eXBlZCBhcnJheSIpKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgd2FzdGVmdWxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldCB3YXN0ZWZ1bCB0eXBlZCBhcnJheSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgbW9kZSA9IG1fb3V0LmxvYWQzMihiYXNlUHRyLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X21vZGUpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RF
cXVhbChtb2RlLCBtX291dC5jb25zdEludDMyKFdhc3RlZnVsVHlwZWRBcnJheSkpLAotICAgICAg
ICAgICAgdW5zdXJlKHNpbXBsZUNhc2UpLCB1bnN1cmUod2FzdGVmdWxDYXNlKSk7Ci0KLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzaW1wbGVDYXNlLCB3YXN0
ZWZ1bENhc2UpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZU91dCA9IG1fb3V0LmFu
Y2hvcihtX291dC5jb25zdEludFB0cigwKSk7Ci0KLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHdhc3RlZnVsQ2FzZSwgY29udGludWF0
aW9uKTsKLQotICAgICAgICBMVmFsdWUgdmVjdG9yUHRyID0gbG9hZFZlY3RvclJlYWRPbmx5KGJh
c2VQdHIpOwotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5UHRyID0gbG9hZEJ1dHRlcmZseVJlYWRP
bmx5KGJhc2VQdHIpOwotICAgICAgICBMVmFsdWUgYXJyYXlCdWZmZXJQdHIgPSBtX291dC5sb2Fk
UHRyKGJ1dHRlcmZseVB0ciwgbV9oZWFwcy5CdXR0ZXJmbHlfYXJyYXlCdWZmZXIpOwotICAgICAg
ICBMVmFsdWUgZGF0YVB0ciA9IG1fb3V0LmxvYWRQdHIoYXJyYXlCdWZmZXJQdHIsIG1faGVhcHMu
QXJyYXlCdWZmZXJfZGF0YSk7Ci0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgd2FzdGVmdWxPdXQg
PSBtX291dC5hbmNob3IobV9vdXQuc3ViKHZlY3RvclB0ciwgZGF0YVB0cikpOwotCi0gICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50MzIo
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgc2ltcGxlT3V0LCB3YXN0ZWZ1bE91dCkpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdh
dGl2ZShsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgTFZhbHVlIHN0cmlu
ZyA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAg
ICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19vdmVycmlkZXMpKSk7Ci0gICAgICAgICAgICBzZXRJbnQzMihtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX2xl
bmd0aCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
YXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZSgKLSAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgbV9vdXQubm90WmVybzMyKG1fb3V0LmxvYWQ4WmVyb0V4dDMy
KGFyZ3VtZW50cywgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcnJvZGVUaGluZ3MpKSk7Ci0g
ICAgICAgICAgICBzZXRJbnQzMihtX291dC5sb2FkMzJOb25OZWdhdGl2ZShhcmd1bWVudHMsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzX3RvdGFsTGVuZ3RoKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
aWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTb21lVHlwZWRBcnJheVZpZXcoKSkgewotICAgICAg
ICAgICAgICAgIHNldEludDMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25O
ZWdhdGl2ZShsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJW
aWV3X2xlbmd0aCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBh
cnJheSB0eXBlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlQ2hlY2tJbkJvdW5kcygpCi0gICAgewotICAgICAgICBzcGVjdWxh
dGUoCi0gICAgICAgICAgICBPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLAotICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMigpKSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bCgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1
b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNo
aWxkMygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYg
aGVhcCA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/Ci0gICAg
ICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRl
eGVkQ29udGlndW91c1Byb3BlcnRpZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
X25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5sb2FkNjQoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBt
X25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGlzSG9sZSA9IG1fb3V0
LmlzWmVybzY0KHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkuaXNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbV9ub2RlLCBtX25vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzSG9sZSwgbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZy
b21Ib2xlLCBub1ZhbHVlKCksIDAsIGlzSG9sZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgaW50L2NvbnRpZ3VvdXMgZmFzdCBjYXNlIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGludC9jb250aWd1b3VzIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwg
aW50L2NvbnRpZ3VvdXMgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAg
ICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSksCi0gICAgICAgICAgICAgICAgcmFyZWx5
KHNsb3dDYXNlKSwgdXN1YWxseShmYXN0Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RDYXNlLCBzbG93Q2Fz
ZSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291dC5sb2FkNjQo
YmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBtX25vZGUtPmNoaWxkMigpKSk7Ci0gICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1
bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9v
dXQuaXNaZXJvNjQoZmFzdFJlc3VsdFZhbHVlKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShj
b250aW51YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2
NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQXJyYXlJbnQpLCBtX2NhbGxGcmFt
ZSwgYmFzZSwgaW5kZXgpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAg
IExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5k
ZXhlZERvdWJsZVByb3BlcnRpZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX25v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5sb2FkRG91YmxlKAotICAgICAgICAgICAgICAgICAgICBiYXNlSW5kZXgo
aGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNTYW5lQ2hhaW4o
KSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVzdWx0LCByZXN1bHQpKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEJ5VmFsIGRvdWJsZSBpbiBib3VuZHMiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBi
b3hQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBkb3VibGUgYm94aW5nIikp
OwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIkdldEJ5VmFsIGRvdWJsZSBzbG93IGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIGRvdWJsZSBj
b250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAg
IGluZGV4LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZs
eV9wdWJsaWNMZW5ndGgpKSwKLSAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KGluQm91bmRzKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIGJveFBhdGgpOwotICAgICAgICAgICAg
TFZhbHVlIGRvdWJsZVZhbHVlID0gbV9vdXQubG9hZERvdWJsZSgKLSAgICAgICAgICAgICAgICBi
YXNlSW5kZXgoaGVhcCwgc3RvcmFnZSwgaW5kZXgsIG1fbm9kZS0+Y2hpbGQyKCkpKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVh
bE9yVW5vcmRlcmVkKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAgICAg
cmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShib3hQYXRoKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJveFBhdGgsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoYm94RG91YmxlKGRvdWJsZVZh
bHVlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25HZXRCeVZhbEFycmF5SW50KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OlVu
ZGVjaWRlZDogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgp
LCBtX25vZGUsIG1fb3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChWYWx1ZVVuZGVmaW5lZCkpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBB
cnJheTo6RGlyZWN0QXJndW1lbnRzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRl
KAotICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwK
LSAgICAgICAgICAgICAgICBtX291dC5ub3ROdWxsKG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKSkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKAot
ICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAg
ICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBt
X2hlYXBzLkRpcmVjdEFyZ3VtZW50c19sZW5ndGgpKSk7Ci0KLSAgICAgICAgICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsK
LSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czogewotICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51bGxwdHIsCi0gICAg
ICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICBpbmRl
eCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9o
ZWFwcy5TY29wZWRBcmd1bWVudHNfdG90YWxMZW5ndGgpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRB
cmd1bWVudHNfdGFibGUpOwotICAgICAgICAgICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQu
bG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbWVkQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0QnlWYWwgU2NvcGVkQXJndW1lbnRzIG5hbWVkIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBvdmVyZmxvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkdldEJ5VmFsIFNjb3BlZEFyZ3VtZW50cyBvdmVyZmxvdyBjYXNlIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTY29wZWRBcmd1bWVudHMgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGlu
ZGV4LCBuYW1lZExlbmd0aCksIHVuc3VyZShvdmVyZmxvd0Nhc2UpLCB1bnN1cmUobmFtZWRDYXNl
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8obmFtZWRDYXNlLCBvdmVyZmxvd0Nhc2UpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMVmFsdWUgc2NvcGUgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVk
QXJndW1lbnRzX3Njb3BlKTsKLSAgICAgICAgICAgIExWYWx1ZSBhcmd1bWVudHMgPSBtX291dC5s
b2FkUHRyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2FyZ3VtZW50cyk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFz
ZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuc2NvcGVkQXJndW1lbnRzVGFibGVBcmd1
bWVudHMsIGFyZ3VtZW50cywgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAg
TFZhbHVlIHNjb3BlT2Zmc2V0ID0gbV9vdXQubG9hZDMyKGFkZHJlc3MpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHNjb3Bl
T2Zmc2V0LCBtX291dC5jb25zdEludDMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAg
ICAgICAgICAgICAgIG1faGVhcHMuSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXMsIHNjb3Bl
LCBtX291dC56ZXJvRXh0UHRyKHNjb3BlT2Zmc2V0KSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQoYWRkcmVzcykpOwot
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhvdmVyZmxvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfb3ZlcmZsb3dTdG9yYWdlLCBiYXNlLAot
ICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQuc3ViKGluZGV4LCBuYW1lZExl
bmd0aCkpKTsKLSAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1ZhbHVlID0gbV9vdXQubG9hZDY0
KGFkZHJlc3MpOwotICAgICAgICAgICAgc3BlY3VsYXRlKEV4b3RpY09iamVjdE1vZGUsIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQob3ZlcmZsb3dWYWx1ZSkpOwotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iob3ZlcmZsb3dW
YWx1ZSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIG5hbWVkUmVzdWx0
LCBvdmVyZmxvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25HZXRCeVZhbCksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkp
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJBdCgp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDogewotICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2Rl
LT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5
cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmIChpc1R5cGVkVmlldyh0eXBlKSkgewotICAgICAgICAgICAgICAgIFR5
cGVkUG9pbnRlciBwb2ludGVyID0gVHlwZWRQb2ludGVyKAotICAgICAgICAgICAgICAgICAgICBt
X2hlYXBzLnR5cGVkQXJyYXlQcm9wZXJ0aWVzLAotICAgICAgICAgICAgICAgICAgICBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuc2hsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0Lnplcm9F
eHRQdHIoaW5kZXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
UHRyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJl
c3VsdDsKLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewot
ICAgICAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBpc1NpZ25lZCh0eXBlKSA/IG1fb3V0LmxvYWQ4U2lnbkV4dDMyKHBvaW50ZXIpIDogIG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGlzU2lnbmVkKHR5cGUpID8gbV9vdXQubG9hZDE2U2lnbkV4dDMyKHBvaW50ZXIp
IDogIG1fb3V0LmxvYWQxNlplcm9FeHQzMihwb2ludGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkMzIocG9pbnRlcik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXpl
Iik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4ocmVzdWx0LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNw
ZWN1bGF0ZU1hY2hpbmVJbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3RyaWN0
SW50NTIobV9vdXQuemVyb0V4dChyZXN1bHQsIG1fb3V0LmludDY0KSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC51bnNpZ25lZFRvRG91
YmxlKHJlc3VsdCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBUeXBlRmxv
YXQzMjoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZmxvYXRUb0RvdWJsZSht
X291dC5sb2FkRmxvYXQocG9pbnRlcikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX291dC5sb2FkRG91YmxlKHBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5cGVkIGFycmF5IHR5cGUiKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSB9Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCi0gICAgewotICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsaW1pdDsK
LSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFy
Z3MoKSkKLSAgICAgICAgICAgIGxpbWl0ID0gbV9vdXQuY29uc3RJbnQzMihpbmxpbmVDYWxsRnJh
bWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRDb3VudFJlZ2lzdGVyOwotICAgICAgICAgICAgaWYgKCFp
bmxpbmVDYWxsRnJhbWUpCi0gICAgICAgICAgICAgICAgYXJndW1lbnRDb3VudFJlZ2lzdGVyID0g
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291bnRSZWdpc3RlciA9IGlubGluZUNhbGxGcmFt
ZS0+YXJndW1lbnRDb3VudFJlZ2lzdGVyOwotICAgICAgICAgICAgbGltaXQgPSBtX291dC5zdWIo
bV9vdXQubG9hZDMyKHBheWxvYWRGb3IoYXJndW1lbnRDb3VudFJlZ2lzdGVyKSksIG1fb3V0Lmlu
dDMyT25lKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKEV4b3RpY09i
amVjdE1vZGUsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsaW1pdCkp
OwotICAgICAgICAKLSAgICAgICAgVHlwZWRQb2ludGVyIGJhc2U7Ci0gICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50
cy5zaXplKCkgPD0gMSkgewotICAgICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBoYXZlIGFscmVh
ZHkgZXhpdGVkIGR1ZSB0byB0aGUgYm91bmRzIGNoZWNrLCBhYm92ZS4gSnVzdCB0ZWxsIHRoZQot
ICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVyIHRoYXQgYW55dGhpbmcgZG9taW5hdGVkIGJ5IHRo
aXMgaW5zdHJ1Y3Rpb24gaXMgbm90IHJlYWNoYWJsZSwgc28KLSAgICAgICAgICAgICAgICAvLyB0
aGF0IHdlIGRvbid0IHdhc3RlIHRpbWUgZ2VuZXJhdGluZyBzdWNoIGNvZGUuIFRoaXMgd2lsbCBh
bHNvIHBsYW50IHNvbWUKLSAgICAgICAgICAgICAgICAvLyBraW5kIG9mIGNyYXNoaW5nIGluc3Ry
dWN0aW9uIHNvIHRoYXQgaWYgYnkgc29tZSBmbHVrZSB0aGUgYm91bmRzIGNoZWNrIGRpZG4ndAot
ICAgICAgICAgICAgICAgIC8vIHdvcmssIHdlJ2xsIGNyYXNoIGluIGFuIGVhc3ktdG8tc2VlIHdh
eS4KLSAgICAgICAgICAgICAgICBkaWRBbHJlYWR5VGVybWluYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYmFzZSA9IGFkZHJlc3NGb3Io
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHNbMV0udmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGJhc2UgPSBhZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBwb2ludGVyID0gbV9vdXQu
YmFzZUluZGV4KAotICAgICAgICAgICAgYmFzZS52YWx1ZSgpLCBtX291dC56ZXJvRXh0KGluZGV4
LCBtX291dC5pbnRQdHIpLCBTY2FsZUVpZ2h0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5s
b2FkNjQoVHlwZWRQb2ludGVyKG1faGVhcHMudmFyaWFibGVzLmF0QW55SW5kZXgoKSwgcG9pbnRl
cikpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlUHV0QnlWYWwoKQotICAgIHsKLSAg
ICAgICAgRWRnZSBjaGlsZDEgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7Ci0gICAg
ICAgIEVkZ2UgY2hpbGQyID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOwotICAgICAg
ICBFZGdlIGNoaWxkMyA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKLSAgICAgICAg
RWRnZSBjaGlsZDQgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7Ci0gICAgICAgIEVk
Z2UgY2hpbGQ1ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpOwotICAgICAgICAKLSAg
ICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJh
dGlvbjsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpKQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1v
ZGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAgICAgICAgICAgICBvcGVy
YXRpb24gPSBvcGVyYXRpb25QdXRCeVZhbFN0cmljdDsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgdm1DYWxsKAot
ICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
KSwgbV9jYWxsRnJhbWUsCi0gICAgICAgICAgICAgICAgbG93SlNWYWx1ZShjaGlsZDEpLCBsb3dK
U1ZhbHVlKGNoaWxkMiksIGxvd0pTVmFsdWUoY2hpbGQzKSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwoY2hpbGQx
KTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIoY2hpbGQyKTsKLSAgICAgICAgTFZh
bHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKGNoaWxkNCk7Ci0gICAgICAgIAotICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgb3V0ZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG1fb3V0Lm1fYmxvY2ss
IGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoY2hpbGQzLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpCi0gICAgICAgICAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGNoaWxkMywgU3BlY0ludDMyLCBpc05vdEludDMy
KHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVHlwZWRQb2ludGVy
IGVsZW1lbnRQb2ludGVyID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICBt
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwotICAgICAgICAgICAg
ICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywKLSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCksIHByb3ZlblZhbHVlKGNoaWxkMikpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxBbGlhcykgewot
ICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBlbGVtZW50UG9pbnRlcik7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBjb250aWd1b3VzUHV0QnlWYWxPdXRPZkJvdW5kcygK
LSAgICAgICAgICAgICAgICAgICAgY29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpCi0gICAgICAg
ICAgICAgICAgICAgID8gb3BlcmF0aW9uUHV0QnlWYWxCZXlvbmRBcnJheUJvdW5kc1N0cmljdAot
ICAgICAgICAgICAgICAgICAgICA6IG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNO
b25TdHJpY3QsCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0b3JhZ2UsIGluZGV4LCB2YWx1
ZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBlbGVtZW50UG9pbnRlcik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoY2hp
bGQzKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygK
LSAgICAgICAgICAgICAgICAgICAgZG91YmxlVmFsdWUodmFsdWUpLCBjaGlsZDMsIFNwZWNEb3Vi
bGVSZWFsLAotICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkKHZhbHVlLCB2YWx1ZSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFR5
cGVkUG9pbnRlciBlbGVtZW50UG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAg
ICAgICAgICAgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllcywgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAgICAgICAgICAgIHByb3ZlblZhbHVlKGNoaWxk
MikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkg
PT0gUHV0QnlWYWxBbGlhcykgewotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZURvdWJs
ZSh2YWx1ZSwgZWxlbWVudFBvaW50ZXIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29udGln
dW91c1B1dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaygp
LT5pc1N0cmljdE1vZGUoKQotICAgICAgICAgICAgICAgICAgICA/IG9wZXJhdGlvblB1dERvdWJs
ZUJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QKLSAgICAgICAgICAgICAgICAgICAgOiBvcGVy
YXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzTm9uU3RyaWN0LAotICAgICAgICAg
ICAgICAgICAgICBiYXNlLCBzdG9yYWdlLCBpbmRleCwgdmFsdWUsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUs
IGVsZW1lbnRQb2ludGVyKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgb3V0ZXJMYXN0TmV4dCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlzVHlwZWRWaWV3KHR5
cGUpKSB7Ci0gICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIHBvaW50ZXIgPSBUeXBlZFBvaW50
ZXIoCi0gICAgICAgICAgICAgICAgICAgIG1faGVhcHMudHlwZWRBcnJheVByb3BlcnRpZXMsCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LmFkZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0
b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291dC5zaGwoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihsb2dFbGVtZW50U2l6ZSh0
eXBlKSkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgT3V0cHV0OjpTdG9y
ZVR5cGUgc3RvcmVUeXBlOwotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZVRvU3RvcmU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExWYWx1ZSBpbnRWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChjaGlsZDMudXNlS2luZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50NTJS
ZXBVc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChjaGlsZDMudXNlS2luZCgpID09IEludDMyVXNlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0gbG93SW50MzIoY2hpbGQzKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRWYWx1
ZSA9IG1fb3V0LmNhc3RUb0ludDMyKGxvd1N0cmljdEludDUyKGNoaWxkMykpOwotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNDbGFtcGVkKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09IDEpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGF0TGVhc3RaZXJvID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBpbnQgY2xhbXAg
YXRMZWFzdFplcm8iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJQdXRCeVZhbCBpbnQgY2xhbXAg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gaW50VmFsdWVzOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9y
KG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4oaW50
VmFsdWUsIG1fb3V0LmludDMyWmVybyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoYXRMZWFzdFplcm8pKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGF0TGVhc3RaZXJvLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZ3JlYXRlclRoYW4oaW50VmFsdWUsIG1fb3V0LmNv
bnN0SW50MzIoMjU1KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoMjU1KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUp
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludFZhbHVlID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1
ZXMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFVzZTogewotICAgICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIGRvdWJsZVZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsYW1wZWQo
dHlwZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudFNpemUo
dHlwZSkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgYXRMZWFzdFplcm8gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlB1dEJ5VmFsIGRvdWJsZSBjbGFtcCBhdExlYXN0WmVybyIpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayB3aXRoaW5SYW5nZSA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIHdpdGhpblJhbmdlIikpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiUHV0QnlWYWwgZG91YmxlIGNsYW1wIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2ssIDM+IGludFZhbHVlczsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC5pbnQzMlplcm8pKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQoZG91YmxlVmFs
dWUsIG1fb3V0LmRvdWJsZVplcm8pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGF0TGVhc3RaZXJvKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhhdExlYXN0WmVybywgd2l0aGluUmFuZ2UpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlcy5hcHBlbmQobV9vdXQuYW5jaG9yKG1f
b3V0LmNvbnN0SW50MzIoMjU1KSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlR3Jl
YXRlclRoYW4oZG91YmxlVmFsdWUsIG1fb3V0LmNvbnN0RG91YmxlKDI1NSkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKHdpdGhp
blJhbmdlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8od2l0aGluUmFuZ2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3Io
bV9vdXQuZG91YmxlVG9JbnQoZG91YmxlVmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludFZhbHVlID0g
bV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1ZXMpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50VmFsdWUgPSBkb3VibGVU
b0ludDMyKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9TdG9yZSA9IGludFZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGNhc2UgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3Rv
cmUzMkFzODsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUgPSBPdXRwdXQ6
OlN0b3JlMzJBczE2OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91
dHB1dDo6U3RvcmUzMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNpemUiKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAhaXNJbnQodHlwZSkgKi8gewotICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKLSAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVHlwZUZs
b2F0MzI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVRvU3RvcmUgPSBtX291dC5kb3Vi
bGVUb0Zsb2F0KHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlVHlwZSA9IE91
dHB1dDo6U3RvcmVGbG9hdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICBjYXNlIFR5cGVGbG9hdDY0OgotICAgICAgICAgICAgICAgICAgICAgICAg
dmFsdWVUb1N0b3JlID0gdmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yZVR5cGUg
PSBPdXRwdXQ6OlN0b3JlRG91YmxlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5cGVkIGFycmF5IHR5cGUiKTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkgfHwgbV9ub2Rl
LT5vcCgpID09IFB1dEJ5VmFsQWxpYXMpCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3Jl
KHZhbHVlVG9TdG9yZSwgcG9pbnRlciwgc3RvcmVUeXBlKTsKLSAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNJbkJvdW5kcyA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgdHlwZWQgYXJyYXkgaW4gYm91bmRzIGNhc2UiKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiUHV0QnlWYWwgdHlwZWQgYXJyYXkgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGluZGV4LCBsb3dJbnQzMihjaGls
ZDUpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUoaXNJbkJvdW5kcykpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0luQm91bmRzLCBjb250
aW51YXRpb24pOwotICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZSh2YWx1ZVRvU3RvcmUs
IHBvaW50ZXIsIHN0b3JlVHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5SWQoKQotICAgIHsKLSAgICAgICAgTFZhbHVl
IGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgYWNjZXNz
b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBhdXRvIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHZt
Q2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAotICAgICAgICAgICAgbV9vdXQub3Bl
cmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeUlkID8gb3BlcmF0aW9uUHV0R2V0dGVy
QnlJZCA6IG9wZXJhdGlvblB1dFNldHRlckJ5SWQpLAotICAgICAgICAgICAgbV9jYWxsRnJhbWUs
IGJhc2UsIG1fb3V0LmNvbnN0SW50UHRyKHVpZCksIG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5h
Y2Nlc3NvckF0dHJpYnV0ZXMoKSksIGFjY2Vzc29yKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBp
bGVQdXRHZXR0ZXJTZXR0ZXJCeUlkKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGdldHRlciA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBzZXR0ZXIgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICBhdXRvIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmll
cnMoKVttX25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV07Ci0gICAgICAgIHZtQ2FsbCgKLSAgICAg
ICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyKSwKLSAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBtX291dC5jb25zdEludFB0
cih1aWQpLCBtX291dC5jb25zdEludDMyKG1fbm9kZS0+YWNjZXNzb3JBdHRyaWJ1dGVzKCkpLCBn
ZXR0ZXIsIHNldHRlcik7Ci0KLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5
VmFsKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIHN1YnNjcmlwdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBhY2Nlc3NvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgIHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLAotICAgICAg
ICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+b3AoKSA9PSBQdXRHZXR0ZXJCeVZhbCA/IG9w
ZXJhdGlvblB1dEdldHRlckJ5VmFsIDogb3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwpLAotICAgICAg
ICAgICAgbV9jYWxsRnJhbWUsIGJhc2UsIHN1YnNjcmlwdCwgbV9vdXQuY29uc3RJbnQzMihtX25v
ZGUtPmFjY2Vzc29yQXR0cmlidXRlcygpKSwgYWNjZXNzb3IpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVBcnJheVB1c2goKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
LSAgICAgICAgICAgIExWYWx1ZSB2YWx1ZTsKLSAgICAgICAgICAgIE91dHB1dDo6U3RvcmVUeXBl
IHN0b3JlVHlwZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAg
ICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDIoKSwgU3Bl
Y0ludDMyLCBpc05vdEludDMyKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIHN0b3JlVHlwZSA9IE91dHB1dDo6U3RvcmU2NDsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAgICAgIGRvdWJs
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDIoKSwgU3BlY0RvdWJsZVJlYWwsCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQodmFsdWUsIHZhbHVl
KSk7Ci0gICAgICAgICAgICAgICAgc3RvcmVUeXBlID0gT3V0cHV0OjpTdG9yZURvdWJsZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVh
cCYgaGVhcCA9IG1faGVhcHMuZm9yQXJyYXlUeXBlKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KTsKLQotICAgICAgICAgICAgTFZhbHVlIHByZXZMZW5ndGggPSBtX291dC5sb2FkMzIoc3RvcmFn
ZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgZmFzdFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFycmF5
UHVzaCBmYXN0IHBhdGgiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQdXNoIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQ
dXNoIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAg
ICAgICAgcHJldkxlbmd0aCwgbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3ZlY3Rvckxlbmd0aCkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3Vy
ZShmYXN0UGF0aCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICBt
X291dC5zdG9yZSgKLSAgICAgICAgICAgICAgICB2YWx1ZSwgbV9vdXQuYmFzZUluZGV4KGhlYXAs
IHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIocHJldkxlbmd0aCkpLCBzdG9yZVR5cGUpOwotICAg
ICAgICAgICAgTFZhbHVlIG5ld0xlbmd0aCA9IG1fb3V0LmFkZChwcmV2TGVuZ3RoLCBtX291dC5p
bnQzMk9uZSk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKG5ld0xlbmd0aCwgc3RvcmFnZSwg
bV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihib3hJbnQzMihuZXdM
ZW5ndGgpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICBMVmFsdWUgb3BlcmF0aW9uOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpCi0gICAgICAgICAgICAgICAgb3Bl
cmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFycmF5UHVzaCk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkFycmF5UHVzaERvdWJsZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwg
b3BlcmF0aW9uLCBtX2NhbGxGcmFtZSwgdmFsdWUsIGJhc2UpKTsKLSAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LnBoaShtX291dC5pbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZUFycmF5UG9wKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAg
ICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5mb3JBcnJheVR5cGUobV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBmYXN0Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQb3AgZmFzdCBj
YXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkFycmF5UG9wIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJyYXlQb3AgY29udGludWF0
aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgcHJldkxlbmd0aCA9IG1f
b3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDM+IHJlc3VsdHM7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKSk7Ci0gICAgICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICAgICAgbV9vdXQuaXNaZXJvMzIocHJldkxlbmd0aCksIHJhcmVs
eShjb250aW51YXRpb24pLCB1c3VhbGx5KGZhc3RDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIHNs
b3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBuZXdMZW5ndGggPSBtX291dC5zdWIocHJldkxl
bmd0aCwgbV9vdXQuaW50MzJPbmUpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihuZXdMZW5n
dGgsIHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAg
ICBUeXBlZFBvaW50ZXIgcG9pbnRlciA9IG1fb3V0LmJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBt
X291dC56ZXJvRXh0UHRyKG5ld0xlbmd0aCkpOwotICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpEb3VibGUpIHsKLSAgICAgICAgICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gbV9vdXQubG9hZDY0KHBvaW50ZXIpOwotICAgICAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQobV9vdXQuaW50NjRaZXJvLCBwb2ludGVyKTsKLSAgICAgICAgICAgICAgICByZXN1
bHRzLmFwcGVuZChtX291dC5hbmNob3IocmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQocmVzdWx0KSwgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmxvYWREb3VibGUocG9p
bnRlcik7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5jb25zdEludDY0KGJp
dHdpc2VfY2FzdDxpbnQ2NF90PihQTmFOKSksIHBvaW50ZXIpOwotICAgICAgICAgICAgICAgIHJl
c3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihib3hEb3VibGUocmVzdWx0KSkpOwotICAgICAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1
YWwocmVzdWx0LCByZXN1bHQpLAotICAgICAgICAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVh
dGlvbiksIHJhcmVseShzbG93Q2FzZSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICAg
ICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BcnJheVBvcEFuZFJlY292
ZXJMZW5ndGgpLCBtX2NhbGxGcmFtZSwgYmFzZSkpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgYXJyYXkgdHlwZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0ZUFjdGl2YXRpb24oKQotICAgIHsKLSAg
ICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
U3ltYm9sVGFibGUqIHRhYmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCk7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0gICAgICAg
IEpTVmFsdWUgaW5pdGlhbGl6YXRpb25WYWx1ZSA9IG1fbm9kZS0+aW5pdGlhbGl6YXRpb25WYWx1
ZUZvckFjdGl2YXRpb24oKTsKLSAgICAgICAgQVNTRVJUKGluaXRpYWxpemF0aW9uVmFsdWUuaXNV
bmRlZmluZWQoKSB8fCBpbml0aWFsaXphdGlvblZhbHVlID09IGpzVERaVmFsdWUoKSk7Ci0gICAg
ICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpIHsKLSAgICAg
ICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0
LmludDY0LAotICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVB
Y3RpdmF0aW9uRGlyZWN0KSwgbV9jYWxsRnJhbWUsIHdlYWtQb2ludGVyKHN0cnVjdHVyZSksCi0g
ICAgICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxlKSwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKLSAgICAgICAgICAgIHNl
dEpTVmFsdWUoY2FsbFJlc3VsdCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDcmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9uIGNv
bnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSBmYXN0T2JqZWN0ID0gYWxsb2NhdGVPYmplY3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQ+
KAotICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OmFsbG9jYXRpb25TaXplKHRhYmxl
KSwgc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAg
ICAgICAvLyBXZSBkb24ndCBuZWVkIG1lbW9yeSBiYXJyaWVycyBzaW5jZSB3ZSBqdXN0IGZhc3Qt
Y3JlYXRlZCB0aGUgYWN0aXZhdGlvbiwgc28gdGhlCi0gICAgICAgIC8vIGFjdGl2YXRpb24gbXVz
dCBiZSB5b3VuZy4KLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoc2NvcGUsIGZhc3RPYmplY3QsIG1f
aGVhcHMuSlNTY29wZV9uZXh0KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIo
dGFibGUpLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU3ltYm9sVGFibGVPYmplY3Rfc3ltYm9sVGFi
bGUpOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhYmxlLT5z
Y29wZVNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFs
dWUpKSwKLSAgICAgICAgICAgICAgICBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTRW52aXJvbm1lbnRS
ZWNvcmRfdmFyaWFibGVzW2ldKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0KTsKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0g
bGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBs
b2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAg
ICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25W
YWx1ZSkpKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzY29wZSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
bm9kZS0+b3AoKSA9PSBOZXdGdW5jdGlvbiB8fCBtX25vZGUtPm9wKCkgPT0gTmV3QXJyb3dGdW5j
dGlvbiB8fCBtX25vZGUtPm9wKCkgPT0gTmV3R2VuZXJhdG9yRnVuY3Rpb24pOwotICAgICAgICBi
b29sIGlzR2VuZXJhdG9yRnVuY3Rpb24gPSBtX25vZGUtPm9wKCkgPT0gTmV3R2VuZXJhdG9yRnVu
Y3Rpb247Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gbV9ub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpOwotICAgICAg
ICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpIHsK
LSAgICAgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0KLSAgICAgICAgICAgICAgICBpc0dlbmVy
YXRvckZ1bmN0aW9uID8gdm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgc2NvcGUsIHdlYWtQb2ludGVy
KGV4ZWN1dGFibGUpKSA6Ci0gICAgICAgICAgICAgICAgdm1DYWxsKG1fb3V0LmludDY0LCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgc2NvcGUsIHdl
YWtQb2ludGVyKGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbFJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0KLSAgICAgICAgICAgIGlzR2VuZXJhdG9yRnVuY3Rpb24gPyBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmdlbmVyYXRv
ckZ1bmN0aW9uU3RydWN0dXJlKCkgOgotICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5mdW5jdGlvblN0cnVjdHVyZSgpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
Ik5ld0Z1bmN0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdGdW5jdGlvbiBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5l
d0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgZmFzdE9i
amVjdCA9Ci0gICAgICAgICAgICBpc0dlbmVyYXRvckZ1bmN0aW9uID8gYWxsb2NhdGVPYmplY3Q8
SlNHZW5lcmF0b3JGdW5jdGlvbj4oc3RydWN0dXJlLCBtX291dC5pbnRQdHJaZXJvLCBzbG93UGF0
aCkgOgotICAgICAgICAgICAgYWxsb2NhdGVPYmplY3Q8SlNGdW5jdGlvbj4oc3RydWN0dXJlLCBt
X291dC5pbnRQdHJaZXJvLCBzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICAKLSAgICAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCBtZW1vcnkgYmFycmllcnMgc2luY2Ugd2UganVzdCBmYXN0LWNyZWF0
ZWQgdGhlIGZ1bmN0aW9uLCBzbyBpdAotICAgICAgICAvLyBtdXN0IGJlIHlvdW5nLgotICAgICAg
ICBtX291dC5zdG9yZVB0cihzY29wZSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Nj
b3BlKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIod2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIGZh
c3RPYmplY3QsIG1faGVhcHMuSlNGdW5jdGlvbl9leGVjdXRhYmxlKTsKLSAgICAgICAgbV9vdXQu
c3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwgbV9oZWFwcy5KU0Z1bmN0aW9u
X3JhcmVEYXRhKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotCi0gICAgICAgIFZlY3RvcjxMVmFsdWU+IHNsb3dQYXRoQXJndW1lbnRzOwotICAg
ICAgICBzbG93UGF0aEFyZ3VtZW50cy5hcHBlbmQoc2NvcGUpOwotICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNHZW5lcmF0b3JGdW5jdGlvbikgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxs
b2NhdGlvbldhdGNocG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRhYmxlKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0
ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAotICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNb
MF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpKTsKLSAgICAgICAg
ICAgIH0sCi0gICAgICAgICAgICBzbG93UGF0aEFyZ3VtZW50cyk7Ci0gICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb21waWxlQ3JlYXRlRGlyZWN0QXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBBIG1vcmUgZWZmZWN0aXZlIHdheSBvZiBkZWFsaW5nIHdpdGggdGhlIGFyZ3VtZW50IGNv
dW50IGFuZCBjYWxsZWUgaXMgdG8gaGF2ZQotICAgICAgICAvLyB0aGVtIGJlIGV4cGxpY2l0IGFy
Z3VtZW50cyB0byB0aGlzIG5vZGUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDIyMDcKLSAgICAgICAgCi0gICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0KLSAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKS0+ZGlyZWN0QXJndW1lbnRzU3RydWN0dXJlKCk7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5udW1QYXJhbWV0ZXJzKCkgLSAxOwotICAgICAgICAK
LSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNy
ZWF0ZURpcmVjdEFyZ3VtZW50cyBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ3JlYXRlRGlyZWN0QXJndW1lbnRz
IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAg
ICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoKTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBmYXN0T2JqZWN0OwotICAgICAgICBpZiAobGVuZ3RoLmlzS25v
d24pIHsKLSAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZU9iamVjdDxEaXJlY3RBcmd1
bWVudHM+KAotICAgICAgICAgICAgICAgIERpcmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUo
c3RkOjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSkpLCBzdHJ1Y3R1cmUsCi0gICAgICAg
ICAgICAgICAgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgTFZhbHVlIHNpemUgPSBtX291dC5hZGQoCi0gICAgICAgICAgICAgICAgbV9v
dXQuc2hsKGxlbmd0aC52YWx1ZSwgbV9vdXQuY29uc3RJbnQzMigzKSksCi0gICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAg
ICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIo
bWluQ2FwYWNpdHkpKSwKLSAgICAgICAgICAgICAgICBzaXplLCBtX291dC5jb25zdEludDMyKERp
cmVjdEFyZ3VtZW50czo6YWxsb2NhdGlvblNpemUobWluQ2FwYWNpdHkpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGZhc3RPYmplY3QgPSBhbGxvY2F0ZVZhcmlhYmxlU2l6ZWRPYmplY3Q8
RGlyZWN0QXJndW1lbnRzPigKLSAgICAgICAgICAgICAgICBzaXplLCBzdHJ1Y3R1cmUsIG1fb3V0
LmludFB0clplcm8sIHNsb3dQYXRoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9v
dXQuc3RvcmUzMihsZW5ndGgudmFsdWUsIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX2xlbmd0aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihtaW5D
YXBhY2l0eSksIGZhc3RPYmplY3QsIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX21pbkNhcGFjaXR5
KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgZmFzdE9iamVjdCwg
bV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfb3ZlcnJpZGVzKTsKLSAgICAgICAgCi0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgY2FsbFJlc3Vs
dCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9u
PiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOwotICAgICAgICAgICAg
fSwgbGVuZ3RoLnZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKLQotICAgICAgICBtX291dC5zdG9yZVB0cihnZXRDdXJyZW50
Q2FsbGVlKCksIHJlc3VsdCwgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfY2FsbGVlKTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChsZW5ndGguaXNLbm93bikgewotICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIHN0YXJ0ID0gQXNzZW1ibHlIZWxwZXJzOjphcmd1bWVudHNTdGFydChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rk
OjptYXgobGVuZ3RoLmtub3duLCBtaW5DYXBhY2l0eSk7ICsraSkgewotICAgICAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChhZGRyZXNz
Rm9yKHN0YXJ0ICsgaSkpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2VbaV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgTFZhbHVlIHN0YWNrQmFzZSA9IGdldEFyZ3VtZW50c1N0YXJ0KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFyZ3VtZW50cyBsb29wIGJvZHkiKSk7Ci0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBlbmQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZURpcmVjdEFy
Z3VtZW50cyBsb29wIGVuZCIpKTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3JpZ2lu
YWxMZW5ndGg7Ci0gICAgICAgICAgICBpZiAobWluQ2FwYWNpdHkpIHsKLSAgICAgICAgICAgICAg
ICBMVmFsdWUgY2FwYWNpdHkgPSBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LmFib3ZlT3JFcXVhbChsZW5ndGgudmFsdWUsIG1fb3V0LmNvbnN0SW50MzIobWluQ2FwYWNp
dHkpKSwKLSAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLnZhbHVlLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSk7Ci0gICAgICAgICAgICAgICAgTFZh
bHVlIG9yaWdpbmFsTGVuZ3RoVmFsdWUgPSBtX291dC56ZXJvRXh0UHRyKGNhcGFjaXR5KTsKLSAg
ICAgICAgICAgICAgICBvcmlnaW5hbExlbmd0aCA9IG1fb3V0LmFuY2hvcihvcmlnaW5hbExlbmd0
aFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGxvb3ApOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgb3JpZ2luYWxMZW5ndGhWYWx1ZSA9IG1f
b3V0Lnplcm9FeHRQdHIobGVuZ3RoLnZhbHVlKTsKLSAgICAgICAgICAgICAgICBvcmlnaW5hbExl
bmd0aCA9IG1fb3V0LmFuY2hvcihvcmlnaW5hbExlbmd0aFZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNOdWxsKG9yaWdpbmFsTGVuZ3RoVmFsdWUpLCB1bnN1cmUo
ZW5kKSwgdW5zdXJlKGxvb3ApKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb29wLCBlbmQpOwotICAgICAgICAgICAg
TFZhbHVlIHByZXZpb3VzSW5kZXggPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBvcmlnaW5hbExl
bmd0aCk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRl
eCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAg
ICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnZhcmlhYmxlcywg
c3RhY2tCYXNlLCBpbmRleCkpLAotICAgICAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCByZXN1bHQsIGluZGV4KSk7Ci0gICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBuZXh0SW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOwotICAgICAg
ICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShwcmV2aW91c0luZGV4LCBuZXh0SW5kZXgpOwot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChpbmRleCksIHVuc3VyZShlbmQp
LCB1bnN1cmUobG9vcCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRU
byhlbmQsIGxhc3ROZXh0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1
ZShyZXN1bHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1
bWVudHMoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHNjb3BlID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAg
ICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cyksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgd2Vha1BvaW50ZXIoCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5zY29wZWRBcmd1bWVudHNTdHJ1Y3R1cmUoKSksCi0gICAgICAgICAgICBnZXRBcmd1bWVu
dHNTdGFydCgpLCBnZXRBcmd1bWVudHNMZW5ndGgoKS52YWx1ZSwgZ2V0Q3VycmVudENhbGxlZSgp
LCBzY29wZSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cygpCi0gICAgewotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVDbG9uZWRBcmd1bWVudHMpLCBtX2NhbGxGcmFt
ZSwKLSAgICAgICAgICAgIHdlYWtQb2ludGVyKAotICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+b3V0T2ZCYW5kQXJndW1lbnRz
U3RydWN0dXJlKCkpLAotICAgICAgICAgICAgZ2V0QXJndW1lbnRzU3RhcnQoKSwgZ2V0QXJndW1l
bnRzTGVuZ3RoKCkudmFsdWUsIGdldEN1cnJlbnRDYWxsZWUoKSk7Ci0gICAgICAgIAotICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ29weVJlc3Qo
KQotICAgIHsgICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgZG9Db3B5UmVzdCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQ29weVJlc3QgQyBjYWxsIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZpbGxSZXN0UGFyYW1l
dGVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBMVmFsdWUgYXJyYXlMZW5ndGggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICBtX291dC5lcXVhbChhcnJheUxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMigwKSksCi0gICAg
ICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGRvQ29weVJlc3QpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGRv
Q29weVJlc3QsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIC8vIEFyZ3VtZW50czogMDpleGVjLCAx
OkpTQ2VsbCogYXJyYXksIDI6YXJndW1lbnRzIHN0YXJ0LCAzOm51bWJlciBvZiBhcmd1bWVudHMg
dG8gc2tpcCwgNDphcnJheSBsZW5ndGgKLSAgICAgICAgTFZhbHVlIG51bWJlck9mQXJndW1lbnRz
VG9Ta2lwID0gbV9vdXQuY29uc3RJbnQzMihtX25vZGUtPm51bWJlck9mQXJndW1lbnRzVG9Ta2lw
KCkpOwotICAgICAgICB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSxtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uQ29weVJlc3QpLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwKLSAgICAgICAgICAgIGdldEFyZ3VtZW50c1N0YXJ0KCksIG51bWJlck9mQXJn
dW1lbnRzVG9Ta2lwLCBhcnJheUxlbmd0aCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRSZXN0TGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG5vblplcm9MZW5ndGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldFJl
c3RMZW5ndGggbm9uIHplcm8iKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0UmVzdExlbmd0aCBjb250aW51YXRpb24iKSk7Ci0g
ICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayB6ZXJvTGVuZ3RoUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0SW50MzIoMCkpOwotCi0gICAgICAgIExWYWx1ZSBudW1iZXJPZkFy
Z3VtZW50c1RvU2tpcCA9IG1fb3V0LmNvbnN0SW50MzIobV9ub2RlLT5udW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCgpKTsKLSAgICAgICAgTFZhbHVlIGFyZ3VtZW50c0xlbmd0aCA9IGdldEFyZ3VtZW50
c0xlbmd0aCgpLnZhbHVlOwotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYWJvdmUoYXJndW1l
bnRzTGVuZ3RoLCBudW1iZXJPZkFyZ3VtZW50c1RvU2tpcCksCi0gICAgICAgICAgICB1bnN1cmUo
bm9uWmVyb0xlbmd0aCksIHVuc3VyZShjb250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obm9uWmVyb0xlbmd0aCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uWmVyb0xlbmd0aFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5zdWIoYXJndW1lbnRzTGVuZ3RoLCBudW1iZXJPZkFyZ3VtZW50
c1RvU2tpcCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQucGhpKG1fb3V0LmludDMyLCB6ZXJvTGVuZ3RoUmVzdWx0LCBub25aZXJv
TGVuZ3RoUmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU5ld09iamVjdCgp
Ci0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKGFsbG9jYXRlT2JqZWN0KG1fbm9kZS0+c3RydWN0
dXJlKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTmV3QXJyYXkoKQotICAgIHsK
LSAgICAgICAgLy8gRmlyc3Qgc3BlY3VsYXRlIGFwcHJvcHJpYXRlbHkgb24gYWxsIG9mIHRoZSBj
aGlsZHJlbi4gRG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgdXAgaGVyZQotICAgICAgICAvLyBiZWNh
dXNlIHNvbWUgb2YgdGhlIHNsb3cgcGF0aHMgbWF5IG90aGVyd2lzZSBmb3JnZXQgdG8gZG8gaXQu
IEl0J3Mgc29ydCBvZiBhcmd1YWJsZQotICAgICAgICAvLyB0aGF0IGRvaW5nIHRoZSBzcGVjdWxh
dGlvbnMgdXAgaGVyZSBtaWdodCBiZSB1bnByb2ZpdGFibGUgZm9yIFJBIC0gc28gd2UgY2FuIGNv
bnNpZGVyCi0gICAgICAgIC8vIHNpbmtpbmcgdGhpcyB0byBiZWxvdyB0aGUgYWxsb2NhdGlvbiBm
YXN0IHBhdGggaWYgd2UgZmluZCB0aGF0IHRoaXMgaGFzIGEgbG90IG9mCi0gICAgICAgIC8vIHJl
Z2lzdGVyIHByZXNzdXJlLgotICAgICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7
IG9wZXJhbmRJbmRleCA8IG1fbm9kZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpCi0g
ICAgICAgICAgICBzcGVjdWxhdGUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJ
bmRleCkpOwotICAgICAgICAKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9y
SW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKLSAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpOwotCi0gICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1l
KCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtX25vZGUtPm51bUNoaWxkcmVuKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEFycmF5VmFsdWVzIGFycmF5VmFsdWVzID0gYWxsb2Nh
dGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG9wZXJhbmRJbmRleCA9IDA7IG9wZXJhbmRJbmRleCA8IG1fbm9k
ZS0+bnVtQ2hpbGRyZW4oKTsgKytvcGVyYW5kSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBFZGdl
IGVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgb3BlcmFuZEluZGV4KTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+aW5kZXhpbmdUeXBl
KCkpIHsKLSAgICAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19UWVBFUzoKLSAg
ICAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgaW5kZXhpbmcgdHlw
ZSIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAg
ICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGxv
d0RvdWJsZShlZGdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5VmFsdWVzLmJ1dHRl
cmZseSwgbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllc1tvcGVyYW5kSW5kZXhdKTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGNhc2UgQUxMX0lOVDMyX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgIGNh
c2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKGVkZ2UsIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbiksCi0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZh
bHVlcy5idXR0ZXJmbHksCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmZvckluZGV4
aW5nVHlwZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKS0+YXQob3BlcmFuZEluZGV4KSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQ29ycnVwdCBpbmRleGluZyB0eXBlIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShhcnJheVZhbHVlcy5hcnJheSk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghbV9ub2RlLT5udW1DaGlsZHJlbigp
KSB7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291
dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0VtcHR5QXJyYXkpLCBtX2NhbGxG
cmFtZSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBz
Y3JhdGNoU2l6ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiBtX25vZGUtPm51bUNoaWxkcmVu
KCk7Ci0gICAgICAgIEFTU0VSVChzY3JhdGNoU2l6ZSk7Ci0gICAgICAgIFNjcmF0Y2hCdWZmZXIq
IHNjcmF0Y2hCdWZmZXIgPSB2bSgpLnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsK
LSAgICAgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEVuY29kZWRKU1Zh
bHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgb3BlcmFuZEluZGV4ID0gMDsgb3BlcmFuZEluZGV4IDwgbV9ub2RlLT5udW1D
aGlsZHJlbigpOyArK29wZXJhbmRJbmRleCkgewotICAgICAgICAgICAgRWRnZSBlZGdlID0gbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG9wZXJhbmRJbmRleCk7Ci0gICAgICAgICAgICBtX291
dC5zdG9yZTY0KAotICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKSwKLSAgICAgICAgICAgICAgICBtX291dC5hYnNvbHV0ZShidWZmZXIgKyBv
cGVyYW5kSW5kZXgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzY3JhdGNoU2l6ZSksIG1fb3V0LmFi
c29sdXRlKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheSksIG1fY2FsbEZyYW1lLAotICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSwgbV9vdXQuY29uc3RJbnRQdHIoYnVmZmVy
KSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1fbm9kZS0+bnVtQ2hpbGRyZW4oKSkp
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIobV9vdXQuaW50UHRyWmVybywgbV9v
dXQuYWJzb2x1dGUoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpKTsKLSAgICAgICAg
Ci0gICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21w
aWxlTmV3QXJyYXlCdWZmZXIoKQotICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
KTsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKLSAgICAgICAgICAgIG1fbm9k
ZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFnbG9iYWxPYmplY3Qt
PmlzSGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhp
bmdUeXBlKCkpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+
bnVtQ29uc3RhbnRzKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEFycmF5VmFsdWVzIGFy
cmF5VmFsdWVzID0gYWxsb2NhdGVKU0FycmF5KHN0cnVjdHVyZSwgbnVtRWxlbWVudHMpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKU1ZhbHVlKiBkYXRhID0gY29kZUJsb2NrKCktPmNvbnN0
YW50QnVmZmVyKG1fbm9kZS0+c3RhcnRDb25zdGFudCgpKTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fbm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraW5kZXgp
IHsKLSAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOwotICAgICAgICAgICAgICAgIGlmICho
YXNEb3VibGUobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpCi0gICAgICAgICAgICAgICAgICAgIHZh
bHVlID0gYml0d2lzZV9jYXN0PGludDY0X3Q+KGRhdGFbaW5kZXhdLmFzTnVtYmVyKCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBKU1ZhbHVlOjpl
bmNvZGUoZGF0YVtpbmRleF0pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
b3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQodmFsdWUp
LAotICAgICAgICAgICAgICAgICAgICBhcnJheVZhbHVlcy5idXR0ZXJmbHksCi0gICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMuZm9ySW5kZXhpbmdUeXBlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkp
LT5hdChpbmRleCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKGFycmF5VmFsdWVzLmFycmF5KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCi0gICAgICAgICAgICBt
X291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyKSwgbV9j
YWxsRnJhbWUsCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291
dC5jb25zdEludFB0cihtX25vZGUtPnN0YXJ0Q29uc3RhbnQoKSksCi0gICAgICAgICAgICBtX291
dC5jb25zdEludFB0cihtX25vZGUtPm51bUNvbnN0YW50cygpKSkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGNvbXBpbGVOZXdBcnJheVdpdGhTaXplKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBw
dWJsaWNMZW5ndGggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9j
YXRpb24oCi0gICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgCi0g
ICAgICAgIGlmICghZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFy
cmF5U3RvcmFnZShtX25vZGUtPmluZGV4aW5nVHlwZSgpKSkgewotICAgICAgICAgICAgQVNTRVJU
KAotICAgICAgICAgICAgICAgIGhhc1VuZGVjaWRlZChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KQotICAgICAgICAgICAgICAgIHx8IGhhc0ludDMyKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICAgICAgfHwgaGFzQ29udGlndW91cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7Ci0KLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGZhc3QgY2FzZSIpKTsKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhcmdlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRo
U2l6ZSBsYXJnZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld0FycmF5V2l0aFNpemUgZmFpbCBjYXNlIikpOwotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5l
d0FycmF5V2l0aFNpemUgc2xvdyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOZXdBcnJheVdpdGhTaXplIGNvbnRp
bnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChwdWJsaWNMZW5ndGgsIG1fb3V0LmNvbnN0
SW50MzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNUSU9OX0xFTkdUSCkpLAotICAgICAgICAg
ICAgICAgIHJhcmVseShsYXJnZUNhc2UpLCB1c3VhbGx5KGZhc3RDYXNlKSk7Ci0KLSAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdENhc2UsIGxhcmdl
Q2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGRvbid0IHJvdW5kIHVwIHRv
IEJBU0VfVkVDVE9SX0xFTiBmb3IgbmV3IEFycmF5KGJsYWgpLgotICAgICAgICAgICAgTFZhbHVl
IHZlY3Rvckxlbmd0aCA9IHB1YmxpY0xlbmd0aDsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TFZhbHVlIHBheWxvYWRTaXplID0KLSAgICAgICAgICAgICAgICBtX291dC5zaGwobV9vdXQuemVy
b0V4dCh2ZWN0b3JMZW5ndGgsIG1fb3V0LmludFB0ciksIG1fb3V0LmNvbnN0SW50UHRyKDMpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseVNpemUgPSBtX291dC5h
ZGQoCi0gICAgICAgICAgICAgICAgcGF5bG9hZFNpemUsIG1fb3V0LmNvbnN0SW50UHRyKHNpemVv
ZihJbmRleGluZ0hlYWRlcikpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGVu
ZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKGJ1dHRlcmZseVNpemUs
IGZhaWxDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseSA9
IG1fb3V0LnN1YihlbmRPZlN0b3JhZ2UsIHBheWxvYWRTaXplKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTQXJyYXk+KHN0cnVjdHVy
ZSwgYnV0dGVyZmx5LCBmYWlsQ2FzZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LnN0b3JlMzIocHVibGljTGVuZ3RoLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHZlY3Rvckxlbmd0aCwgYnV0dGVy
Zmx5LCBtX2hlYXBzLkJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoaGFzRG91YmxlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5pdExvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5l
d0FycmF5V2l0aFNpemUgZG91YmxlIGluaXQgbG9vcCIpKTsKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbml0RG9uZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3QXJyYXlXaXRoU2l6
ZSBkb3VibGUgaW5pdCBkb25lIikpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIG9yaWdpbmFsSW5kZXggPSBtX291dC5hbmNob3IodmVjdG9yTGVuZ3Ro
KTsKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5hbFBvaW50ZXIgPSBtX291
dC5hbmNob3IoYnV0dGVyZmx5KTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAg
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMih2ZWN0b3JMZW5ndGgpLCB1bnN1cmUoaW5p
dExvb3ApLCB1bnN1cmUoaW5pdERvbmUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBpbml0TGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbml0TG9vcCwg
aW5pdERvbmUpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IG1fb3V0LnBoaShtX291
dC5pbnQzMiwgb3JpZ2luYWxJbmRleCk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHBvaW50ZXIg
PSBtX291dC5waGkobV9vdXQuaW50UHRyLCBvcmlnaW5hbFBvaW50ZXIpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50NjQoYml0d2lzZV9jYXN0PGludDY0X3Q+KFBOYU4pKSwKLSAgICAgICAg
ICAgICAgICAgICAgVHlwZWRQb2ludGVyKG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXMu
YXRBbnlJbmRleCgpLCBwb2ludGVyKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgTFZhbHVlIG5leHRJbmRleCA9IG1fb3V0LnN1YihpbmRleCwgbV9vdXQuaW50MzJPbmUpOwot
ICAgICAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXgsIG1fb3V0LmFuY2hv
cihuZXh0SW5kZXgpKTsKLSAgICAgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHBv
aW50ZXIsIG1fb3V0LmFuY2hvcihtX291dC5hZGQocG9pbnRlciwgbV9vdXQuaW50UHRyRWlnaHQp
KSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5ub3RaZXJvMzIobmV4dEluZGV4KSwgdW5zdXJlKGluaXRMb29wKSwgdW5zdXJlKGluaXRE
b25lKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW5pdERvbmUsIGluaXRMYXN0TmV4dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Iob2JqZWN0
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obGFyZ2VDYXNlLCBmYWlsQ2FzZSk7Ci0gICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZVN0cnVjdHVyZSA9IG1fb3V0LmFuY2hvcihtX291dC5j
b25zdEludFB0cigKLSAgICAgICAgICAgICAgICBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJl
Rm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhBcnJheVN0b3JhZ2UpKSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGZhaWxTdHJ1Y3R1cmUgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQ
dHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKHNsb3dDYXNlKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlVmFsdWUgPSBtX291dC5waGkoCi0gICAg
ICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBsYXJnZVN0cnVjdHVyZSwgZmFpbFN0cnVjdHVyZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAg
ICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMl0u
ZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgc3RydWN0
dXJlVmFsdWUsIHB1YmxpY0xlbmd0aCk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdHJ1Y3R1
cmVWYWx1ZSA9IG1fb3V0LnNlbGVjdCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbChw
dWJsaWNMZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIoTUlOX0FSUkFZX1NUT1JBR0VfQ09OU1RSVUNU
SU9OX0xFTkdUSCkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCi0gICAgICAgICAg
ICAgICAgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0Fs
bG9jYXRpb24oQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSksCi0gICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihzdHJ1Y3R1cmUpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwobV9vdXQuaW50
NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKSwgbV9jYWxsRnJh
bWUsIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNv
bXBpbGVOZXdUeXBlZEFycmF5KCkKLSAgICB7Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUg
PSBtX25vZGUtPnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yyk7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
KSB7Ci0gICAgICAgIGNhc2UgSW50MzJVc2U6IHsKLSAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT50eXBlZEFycmF5U3RydWN0dXJlKHR5cGUpOwotCi0gICAg
ICAgICAgICBMVmFsdWUgc2l6ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBzbWFsbEVub3VnaENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIk5ld1R5cGVkQXJyYXkgc21hbGwgZW5vdWdoIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFz
aWNCbG9jayBub25aZXJvQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTmV3VHlwZWRBcnJh
eSBub24temVybyBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk5ld1R5cGVkQXJyYXkgc2xvdyBjYXNlIikpOwotICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJO
ZXdUeXBlZEFycmF5IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlKHNpemUsIG1fb3V0LmNvbnN0SW50MzIoSlNB
cnJheUJ1ZmZlclZpZXc6OmZhc3RTaXplTGltaXQpKSwKLSAgICAgICAgICAgICAgICByYXJlbHko
c2xvd0Nhc2UpLCB1c3VhbGx5KHNtYWxsRW5vdWdoQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNtYWxsRW5vdWdoQ2FzZSwgbm9uWmVy
b0Nhc2UpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90WmVybzMyKHNpemUp
LCB1c3VhbGx5KG5vblplcm9DYXNlKSwgcmFyZWx5KHNsb3dDYXNlKSk7Ci0KLSAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vblplcm9DYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIExW
YWx1ZSBieXRlU2l6ZSA9Ci0gICAgICAgICAgICAgICAgbV9vdXQuc2hsKG1fb3V0Lnplcm9FeHRQ
dHIoc2l6ZSksIG1fb3V0LmNvbnN0SW50MzIobG9nRWxlbWVudFNpemUodHlwZSkpKTsKLSAgICAg
ICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDgpIHsKLSAgICAgICAgICAgICAgICBieXRl
U2l6ZSA9IG1fb3V0LmJpdEFuZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYWRkKGJ5dGVT
aXplLCBtX291dC5jb25zdEludFB0cig3KSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKH5zdGF0aWNfY2FzdDxpbnRwdHJfdD4oNykpKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdl
KGJ5dGVTaXplLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFs
dWUgPQotICAgICAgICAgICAgICAgIGFsbG9jYXRlT2JqZWN0PEpTQXJyYXlCdWZmZXJWaWV3Pihz
dHJ1Y3R1cmUsIG1fb3V0LmludFB0clplcm8sIHNsb3dDYXNlKTsKLQotICAgICAgICAgICAgbV9v
dXQuc3RvcmVQdHIoc3RvcmFnZSwgZmFzdFJlc3VsdFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZm
ZXJWaWV3X3ZlY3Rvcik7Ci0gICAgICAgICAgICBtX291dC5zdG9yZTMyKHNpemUsIGZhc3RSZXN1
bHRWYWx1ZSwgbV9oZWFwcy5KU0FycmF5QnVmZmVyVmlld19sZW5ndGgpOwotICAgICAgICAgICAg
bV9vdXQuc3RvcmUzMihtX291dC5jb25zdEludDMyKEZhc3RUeXBlZEFycmF5KSwgZmFzdFJlc3Vs
dFZhbHVlLCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpOwotCi0gICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7
Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBMVmFs
dWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAo
Y29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRo
OjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxs
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3VHlwZWRBcnJh
eVdpdGhTaXplRm9yVHlwZSh0eXBlKSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSks
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAg
ICAgICAgICBzaXplKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnRQdHIs
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgTFZhbHVlIGFyZ3Vt
ZW50ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5pbnRQdHIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25OZXdUeXBlZEFycmF5V2l0aE9uZUFyZ3VtZW50Rm9yVHlwZSh0eXBl
KSksCi0gICAgICAgICAgICAgICAgbV9jYWxsRnJhbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dC0+dHlwZWRBcnJheVN0cnVjdHVyZSh0eXBlKSksIGFyZ3VtZW50KTsKLQotICAgICAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCi0gICAgewotICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cykpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9
IG1fbm9kZS0+dHJhbnNpdGlvbigpOwotICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIG9sZFN0b3JhZ2UgPSBsb3dTdG9yYWdl
KG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgc2V0U3RvcmFnZSgKLSAgICAg
ICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0
LCBvbGRTdG9yYWdlLCB0cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb1N0cmluZ09yQ2FsbFN0cmluZ0NvbnN0cnVj
dG9yKCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkp
IHsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBj
ZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZ09iamVjdEZvckNlbGwobV9ub2RlLT5jaGlsZDEoKSwgY2VsbCk7Ci0gICAgICAgICAgICBt
X2ludGVycHJldGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMSgpLCBTcGVjU3RyaW5nT2JqZWN0KTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkUHRyKGNlbGws
IG1faGVhcHMuSlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFsdWUpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RyaW5nT3JTdHJp
bmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQz
MihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5vdFN0cmluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9T
dHJpbmcgU3RyaW5nT3JTdHJpbmdPYmplY3Qgbm90IHN0cmluZyBjYXNlIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0
cmluZyBTdHJpbmdPclN0cmluZ09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihj
ZWxsKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5l
cXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+
aWQoKSkpLAotICAgICAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90
U3RyaW5nKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8obm90U3RyaW5nLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAg
c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQobV9ub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlSUQpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgdW5ib3hlZFJlc3VsdCA9IG1f
b3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMu
SlNXcmFwcGVyT2JqZWN0X2ludGVybmFsVmFsdWUpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgc2ltcGxlUmVzdWx0LCB1bmJveGVkUmVzdWx0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNTdHJpbmcgfCBTcGVjU3RyaW5nT2JqZWN0KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ2VsbFVzZToKLSAgICAgICAgY2FzZSBV
bnR5cGVkVXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWU7Ci0gICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKLSAgICAgICAgICAgICAgICB2
YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGwgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlRvU3RyaW5nIENlbGxVc2UvVW50eXBlZFVzZSBpcyBjZWxsIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1N0cmlu
ZyBDZWxsVXNlL1VudHlwZWRVc2Ugbm90IHN0cmluZyIpKTsKLSAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9TdHJpbmcgQ2VsbFVz
ZS9VbnR5cGVkVXNlIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TFZhbHVlIGlzQ2VsbFByZWRpY2F0ZTsKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgICAgIGlzQ2VsbFByZWRpY2F0ZSA9
IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGlz
Q2VsbFByZWRpY2F0ZSA9IHRoaXMtPmlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNo
aWxkMSgpKSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsUHJlZGljYXRlLCB1bnN1
cmUoaXNDZWxsKSwgdW5zdXJlKG5vdFN0cmluZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbCwgbm90U3RyaW5n
KTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNpbXBsZVJlc3VsdCA9IG1fb3V0LmFuY2hv
cih2YWx1ZSk7Ci0gICAgICAgICAgICBMVmFsdWUgaXNTdHJpbmdQcmVkaWNhdGU7Ci0gICAgICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpICYgU3BlY1N0cmluZykgewot
ICAgICAgICAgICAgICAgIGlzU3RyaW5nUHJlZGljYXRlID0gaXNTdHJpbmcodmFsdWUsIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgaXNTdHJpbmdQcmVkaWNhdGUgPSBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmdQcmVkaWNhdGUsIHVuc3VyZShjb250aW51YXRpb24pLCB1
bnN1cmUobm90U3RyaW5nKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdFN0cmluZywgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIExWYWx1ZSBvcGVyYXRp
b247Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkKLSAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBtX291dC5vcGVyYXRpb24obV9ub2RlLT5v
cCgpID09IFRvU3RyaW5nID8gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwgOiBvcGVyYXRpb25DYWxs
U3RyaW5nQ29uc3RydWN0b3JPbkNlbGwpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbiA9IG1fb3V0Lm9wZXJhdGlvbihtX25vZGUtPm9wKCkgPT0gVG9TdHJpbmcg
PyBvcGVyYXRpb25Ub1N0cmluZyA6IG9wZXJhdGlvbkNhbGxTdHJpbmdDb25zdHJ1Y3Rvcik7Ci0g
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRSZXN1bHQgPSBtX291dC5hbmNob3Io
dm1DYWxsKG1fb3V0LmludDY0LCBvcGVyYXRpb24sIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwotICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCBzaW1wbGVSZXN1bHQsIGNvbnZlcnRl
ZFJlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29tcGlsZVRvUHJpbWl0aXZlKCkKLSAgICB7Ci0gICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJUb1ByaW1p
dGl2ZSBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzT2JqZWN0Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiVG9QcmltaXRpdmUgb2JqZWN0IGNhc2UiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVG9Qcmlt
aXRpdmUgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9v
dXQuYW5jaG9yKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlz
Q2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxD
YXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc09iamVjdENhc2UpOwot
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IodmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuYnJhbmNoKAotICAgICAgICAgICAgaXNPYmplY3QodmFsdWUsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgdW5zdXJlKGlzT2JqZWN0Q2FzZSksIHVuc3VyZShj
b250aW51YXRpb24pKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzT2JqZWN0
Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uVG9QcmltaXRpdmUpLCBtX2NhbGxGcmFtZSwgdmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5p
bnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVNYWtlUm9wZSgp
Ci0gICAgewotICAgICAgICBMVmFsdWUga2lkc1szXTsKLSAgICAgICAgdW5zaWduZWQgbnVtS2lk
czsKLSAgICAgICAga2lkc1swXSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IGtpZHNbMV0gPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBpZiAobV9ub2Rl
LT5jaGlsZDMoKSkgewotICAgICAgICAgICAga2lkc1syXSA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDMoKSk7Ci0gICAgICAgICAgICBudW1LaWRzID0gMzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGtpZHNbMl0gPSAwOwotICAgICAgICAgICAgbnVtS2lkcyA9IDI7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJNYWtlUm9wZSBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWFrZVJvcGUgY29udGludWF0aW9uIikp
OwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnRO
ZXdCbG9ja3NCZWZvcmUoc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgTWFya2VkQWxsb2Nh
dG9yJiBhbGxvY2F0b3IgPQotICAgICAgICAgICAgdm0oKS5oZWFwLmFsbG9jYXRvckZvck9iamVj
dFdpdGhEZXN0cnVjdG9yKHNpemVvZihKU1JvcGVTdHJpbmcpKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dFB0cigmYWxsb2NhdG9yKSwKLSAgICAgICAgICAgIHZtKCkuc3RyaW5nU3RydWN0dXJlLmdldCgp
LAotICAgICAgICAgICAgc2xvd1BhdGgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIobV9vdXQuaW50UHRyWmVybywgcmVzdWx0LCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUtpZHM7ICsraSkKLSAgICAgICAgICAg
IG1fb3V0LnN0b3JlUHRyKGtpZHNbaV0sIHJlc3VsdCwgbV9oZWFwcy5KU1JvcGVTdHJpbmdfZmli
ZXJzW2ldKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtS2lkczsgaSA8IEpTUm9wZVN0
cmluZzo6c19tYXhJbnRlcm5hbFJvcGVMZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG1fb3V0LnN0
b3JlUHRyKG1fb3V0LmludFB0clplcm8sIHJlc3VsdCwgbV9oZWFwcy5KU1JvcGVTdHJpbmdfZmli
ZXJzW2ldKTsKLSAgICAgICAgTFZhbHVlIGZsYWdzID0gbV9vdXQubG9hZDMyKGtpZHNbMF0sIG1f
aGVhcHMuSlNTdHJpbmdfZmxhZ3MpOwotICAgICAgICBMVmFsdWUgbGVuZ3RoID0gbV9vdXQubG9h
ZDMyKGtpZHNbMF0sIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG51bUtpZHM7ICsraSkgewotICAgICAgICAgICAgZmxhZ3MgPSBtX291
dC5iaXRBbmQoZmxhZ3MsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBtX2hlYXBzLkpTU3RyaW5nX2Zs
YWdzKSk7Ci0gICAgICAgICAgICBDaGVja1ZhbHVlKiBsZW5ndGhDaGVjayA9IG1fb3V0LnNwZWN1
bGF0ZUFkZCgKLSAgICAgICAgICAgICAgICBsZW5ndGgsIG1fb3V0LmxvYWQzMihraWRzW2ldLCBt
X2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpOwotICAgICAgICAgICAgYmxlc3NTcGVjdWxhdGlvbihs
ZW5ndGhDaGVjaywgVW5jb3VudGFibGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vcmlnaW4pOwot
ICAgICAgICAgICAgbGVuZ3RoID0gbGVuZ3RoQ2hlY2s7Ci0gICAgICAgIH0KLSAgICAgICAgbV9v
dXQuc3RvcmUzMigKLSAgICAgICAgICAgIG1fb3V0LmJpdEFuZChtX291dC5jb25zdEludDMyKEpT
U3RyaW5nOjpJczhCaXQpLCBmbGFncyksCi0gICAgICAgICAgICByZXN1bHQsIG1faGVhcHMuSlNT
dHJpbmdfZmxhZ3MpOwotICAgICAgICBtX291dC5zdG9yZTMyKGxlbmd0aCwgcmVzdWx0LCBtX2hl
YXBzLkpTU3RyaW5nX2xlbmd0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHJlc3VsdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlOwotICAgICAgICBz
d2l0Y2ggKG51bUtpZHMpIHsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2xvd1Jlc3Vs
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJvcGUyLCBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSk7Ci0gICAgICAgICAgICAgICAgfSwga2lk
c1swXSwga2lkc1sxXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAzOgotICAg
ICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAg
IFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTWFrZVJv
cGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzNdLmRpcmVjdEdQUigpKTsKLSAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFd
LCBraWRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBudW1iZXIgb2YgY2hpbGRyZW4i
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKG1f
b3V0LmludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgZmFz
dFBhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBmYXN0IHBhdGgi
KSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBTdHJpbmcgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldEJ5VmFsIFN0cmluZyBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2Fk
MzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLkpTU3RyaW5nX2xlbmd0aCkpLAotICAgICAgICAg
ICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShmYXN0UGF0aCkpOwotICAgICAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIHNs
b3dQYXRoKTsKLSAgICAgICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0
LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZh
bCBTdHJpbmcgOC1iaXQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgaXMxNkJpdCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3RyaW5nIDE2LWJpdCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBiaXRzQ29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXRCeVZhbCBTdHJpbmcgYml0bmVzcyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGJpZ0NoYXJhY3RlciA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0QnlWYWwgU3Ry
aW5nIGJpZyBjaGFyYWN0ZXIiKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQudGVzdElzWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0
LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwKLSAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkp
LAotICAgICAgICAgICAgdW5zdXJlKGlzMTZCaXQpLCB1bnN1cmUoaXM4Qml0KSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXM4Qml0LCBpczE2Qml0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBjaGFyOEJpdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAg
ICAgICAgICBtX2hlYXBzLmNoYXJhY3RlcnM4LCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGlu
ZGV4KSwKLSAgICAgICAgICAgICAgICBwcm92ZW5WYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpKTsK
LSAgICAgICAgbV9vdXQuanVtcChiaXRzQ29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhpczE2Qml0LCBiaWdDaGFyYWN0ZXIpOwotCi0gICAgICAgIExW
YWx1ZSBjaGFyMTZCaXRWYWx1ZSA9IG1fb3V0LmxvYWQxNlplcm9FeHQzMigKLSAgICAgICAgICAg
IG1fb3V0LmJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICBtX2hlYXBzLmNoYXJhY3RlcnMxNiwg
c3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAgICAgICAgICAgICAgcHJvdmVu
VmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2hhcjE2
Qml0ID0gbV9vdXQuYW5jaG9yKGNoYXIxNkJpdFZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKGNoYXIxNkJpdFZhbHVlLCBtX291dC5j
b25zdEludDMyKDB4MTAwKSksCi0gICAgICAgICAgICByYXJlbHkoYmlnQ2hhcmFjdGVyKSwgdXN1
YWxseShiaXRzQ29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYmlnQ2hhcmFjdGVyLCBiaXRzQ29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAg
ICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDQ+IHJlc3VsdHM7Ci0gICAgICAgIHJlc3VsdHMu
YXBwZW5kKG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyksCi0gICAgICAgICAg
ICBtX2NhbGxGcmFtZSwgY2hhcjE2Qml0VmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhiaXRzQ29u
dGludWF0aW9uLCBzbG93UGF0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNoYXJh
Y3RlciA9IG1fb3V0LnBoaShtX291dC5pbnQzMiwgY2hhcjhCaXQsIGNoYXIxNkJpdCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHNtYWxsU3RyaW5ncyA9IG1fb3V0LmNvbnN0SW50UHRy
KHZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWRQdHIobV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgbV9oZWFwcy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdz
LCBzbWFsbFN0cmluZ3MsIG1fb3V0Lnplcm9FeHRQdHIoY2hhcmFjdGVyKSkpKSk7Ci0gICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgIHNwZWN1
bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuaW50UHRyWmVybykpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChnbG9iYWxPYmplY3QtPnN0cmluZ1Byb3Rv
dHlwZUNoYWluSXNTYW5lKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3Vs
ZCBiZSBjYXB0dXJlZCB1c2luZyBhIFNwZWN1bGF0aW9uIG1vZGUgdGhhdCBtZWFucwotICAgICAg
ICAgICAgICAgIC8vICJvdXQtb2YtYm91bmRzIGxvYWRzIHJldHVybiBhIHRyaXZpYWwgdmFsdWUi
LCBzb21ldGhpbmcgbGlrZQotICAgICAgICAgICAgICAgIC8vIFNhbmVDaGFpbk91dE9mQm91bmRz
LgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KGdsb2JhbE9iamVjdC0+c3RyaW5nUHJvdG90eXBlKCktPnN0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgICAgICBt
X2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90
eXBlKCktPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBuZWdhdGl2ZUluZGV4ID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJHZXRCeVZhbCBTdHJpbmcgbmVnYXRpdmUgaW5kZXgiKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkp
KTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1f
b3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5pbnQzMlplcm8pLAotICAgICAgICAgICAgICAgICAg
ICByYXJlbHkobmVnYXRpdmVJbmRleCksIHVzdWFsbHkoY29udGludWF0aW9uKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5lZ2F0aXZlSW5k
ZXgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJ
bnQpLCBtX2NhbGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKG1fb3V0LmludDY0LCByZXN1bHRzKSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgaXM4Qml0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdHJpbmdDaGFyQ29kZUF0IDgtYml0
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzMTZCaXQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlN0cmluZ0NoYXJDb2RlQXQgMTYtYml0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nQ2hhckNvZGVB
dCBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hp
bGQzKCkpOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVW5jb3Vu
dGFibGUsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAg
ICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYmFzZSwgbV9oZWFw
cy5KU1N0cmluZ19sZW5ndGgpKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIo
Ci0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5n
SW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAgICAgICAgICB1bnN1cmUoaXMxNkJpdCksIHVu
c3VyZShpczhCaXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzOEJpdCwgaXMxNkJpdCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgY2hhcjhCaXQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBt
X291dC5sb2FkOFplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9o
ZWFwcy5jaGFyYWN0ZXJzOCwgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCksCi0gICAg
ICAgICAgICAgICAgcHJvdmVuVmFsdWUobV9ub2RlLT5jaGlsZDIoKSkpKSk7Ci0gICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhpczE2Qml0LCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIGNoYXIxNkJpdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0Lmxv
YWQxNlplcm9FeHQzMihtX291dC5iYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5j
aGFyYWN0ZXJzMTYsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpLAotICAgICAgICAg
ICAgICAgIHByb3ZlblZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpKSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAgIHNldEludDMyKG1fb3V0LnBo
aShtX291dC5pbnQzMiwgY2hhcjhCaXQsIGNoYXIxNkJpdCkpOwotICAgIH0KLQotICAgIHZvaWQg
Y29tcGlsZVN0cmluZ0Zyb21DaGFyQ29kZSgpCi0gICAgewotICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG1fbm9kZS0+Y2hpbGQxKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hpbGRFZGdlLnVz
ZUtpbmQoKSA9PSBVbnR5cGVkVXNlKSB7Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1D
YWxsKAotICAgICAgICAgICAgICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0
aW9uU3RyaW5nRnJvbUNoYXJDb2RlVW50eXBlZCksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAg
ICAgIGxvd0pTVmFsdWUoY2hpbGRFZGdlKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSk7Ci0KLSAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIoY2hpbGRFZGdlKTsKLSAgICAgICAgCi0gICAg
ICAgIExCYXNpY0Jsb2NrIHNtYWxsSW50Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3Ry
aW5nRnJvbUNoYXJDb2RlIHNtYWxsIGludCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBz
bG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RyaW5nRnJvbUNoYXJDb2RlIHNsb3cg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTdHJpbmdGcm9tQ2hhckNvZGUgY29udGludWF0aW9uIikpOwotCi0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCh2YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMigweGZmKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KHNtYWxsSW50Q2FzZSkpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuYXBwZW5kVG8oc21hbGxJbnRDYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgTFZhbHVlIHNt
YWxsU3RyaW5ncyA9IG1fb3V0LmNvbnN0SW50UHRyKHZtKCkuc21hbGxTdHJpbmdzLnNpbmdsZUNo
YXJhY3RlclN0cmluZ3MoKSk7Ci0gICAgICAgIExWYWx1ZSBmYXN0UmVzdWx0VmFsdWUgPSBtX291
dC5sb2FkUHRyKAotICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMuc2luZ2xlQ2hh
cmFjdGVyU3RyaW5ncywgc21hbGxTdHJpbmdzLCBtX291dC56ZXJvRXh0UHRyKHZhbHVlKSkpOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1
bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUg
c2xvd1Jlc3VsdFZhbHVlID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50UHRyLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uU3RyaW5nRnJvbUNoYXJDb2RlKSwgbV9jYWxsRnJhbWUsIHZh
bHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihz
bG93UmVzdWx0VmFsdWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0KLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlPZmZzZXQoKQotICAgIHsKLSAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIGRhdGEgPSBtX25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
KCk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKGxvYWRQcm9wZXJ0eSgKLSAgICAgICAg
ICAgIGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDEoKSksIGRhdGEuaWRlbnRpZmllck51bWJlciwg
ZGF0YS5vZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0R2V0dGVyKCkK
LSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpLCBtX2hlYXBzLkdldHRlclNldHRlcl9nZXR0ZXIpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlR2V0U2V0dGVyKCkKLSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUobV9v
dXQubG9hZFB0cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkdldHRlclNldHRl
cl9zZXR0ZXIpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTXVsdGlHZXRCeU9mZnNl
dCgpCi0gICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIAotICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG1fbm9k
ZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKLQotICAgICAgICBpZiAoZGF0YS5jYXNlcy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCBjcmVhdGluZyBhIFBoaSBm
dW5jdGlvbiB3aXRoIHplcm8gaW5wdXRzLiBMTFZNIGRvZXNuJ3QgbGlrZSB0aGF0LgotICAgICAg
ICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPExCYXNpY0Jsb2NrLCAyPiBibG9ja3MoZGF0YS5j
YXNlcy5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLmNhc2VzLnNpemUo
KTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TXVsdGlHZXRCeU9mZnNldCBjYXNlICIsIGkpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZXhpdCA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTXVsdGlHZXRCeU9mZnNldCBmYWlsIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk11bHRp
R2V0QnlPZmZzZXQgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFN3
aXRjaENhc2UsIDI+IGNhc2VzOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgYmFzZVNldDsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOwotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gZ2V0Q2FzZS5zZXQoKS5zaXplKCk7IGotLTspIHsKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdldENhc2Uuc2V0KClbal07Ci0g
ICAgICAgICAgICAgICAgYmFzZVNldC5hZGQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICBj
YXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSh3ZWFrU3RydWN0dXJlSUQoc3RydWN0dXJlKSwgYmxvY2tz
W2ldLCBXZWlnaHQoMSkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtX291
dC5zd2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hl
YXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIGNhc2VzLCBleGl0LCBXZWlnaHQoMCkpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsKLSAg
ICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0czsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS5jYXNlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIE11bHRpR2V0QnlPZmZzZXRDYXNlIGdldENhc2UgPSBkYXRhLmNhc2VzW2ldOwotICAgICAg
ICAgICAgR2V0QnlPZmZzZXRNZXRob2QgbWV0aG9kID0gZ2V0Q2FzZS5tZXRob2QoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmxvY2tzW2ldLCBpICsgMSA8IGRh
dGEuY2FzZXMuc2l6ZSgpID8gYmxvY2tzW2kgKyAxXSA6IGV4aXQpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0
Y2ggKG1ldGhvZC5raW5kKCkpIHsKLSAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXRNZXRob2Q6
OkludmFsaWQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgR2V0QnlPZmZzZXRNZXRob2Q6OkNvbnN0YW50OgotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1ldGhvZC5jb25zdGFudCgpLT52YWx1
ZSgpKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0TWV0aG9kOjpMb2FkOgotICAgICAgICAgICAgY2FzZSBHZXRC
eU9mZnNldE1ldGhvZDo6TG9hZEZyb21Qcm90b3R5cGU6IHsKLSAgICAgICAgICAgICAgICBMVmFs
dWUgcHJvcGVydHlCYXNlOwotICAgICAgICAgICAgICAgIGlmIChtZXRob2Qua2luZCgpID09IEdl
dEJ5T2Zmc2V0TWV0aG9kOjpMb2FkKQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUJhc2Ug
PSBiYXNlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dHlCYXNlID0gd2Vha1BvaW50ZXIobWV0aG9kLnByb3RvdHlwZSgpLT52YWx1ZSgpLmFzQ2VsbCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIWlzSW5saW5lT2Zmc2V0KG1ldGhvZC5vZmZzZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5QmFzZSA9IGxvYWRCdXR0ZXJmbHlSZWFkT25s
eShwcm9wZXJ0eUJhc2UpOwotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGxvYWRQcm9wZXJ0eSgK
LSAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlCYXNlLCBkYXRhLmlkZW50aWZpZXJOdW1iZXIs
IG1ldGhvZC5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9y
KHJlc3VsdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhleGl0LCBjb250aW51YXRpb24p
OwotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc1N1YnNldE9mKGJhc2VTZXQpKQotICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZENhY2hlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291
dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRCeU9m
ZnNldCgpCi0gICAgewotICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSYgZGF0YSA9IG1fbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIHN0b3JlUHJvcGVydHkoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQzKCkpLAotICAgICAgICAgICAgbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMSgpKSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCBkYXRhLm9m
ZnNldCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZU11bHRpUHV0QnlPZmZzZXQoKQot
ICAgIHsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAg
ICAgICAKLSAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBtX25vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8TEJhc2ljQmxvY2ss
IDI+IGJsb2NrcyhkYXRhLnZhcmlhbnRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEudmFyaWFudHMuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgYmxvY2tzW2ldID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5T2Zmc2V0IGNhc2UgIiwgaSkpOwotICAg
ICAgICBMQmFzaWNCbG9jayBleGl0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNdWx0aVB1dEJ5
T2Zmc2V0IGZhaWwiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTXVsdGlQdXRCeU9mZnNldCBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgIAotICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMj4gY2FzZXM7Ci0gICAgICAgIFN0cnVj
dHVyZVNldCBiYXNlU2V0OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRh
dGEudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLnNpemUoKTsgai0tOykgewotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKVtqXTsKLSAgICAgICAgICAgICAgICBi
YXNlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0
Y2hDYXNlKHdlYWtTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUpLCBibG9ja3NbaV0sIFdlaWdodCgxKSkp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0
aW9uKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwgY2FzZXMsIGV4aXQsIFdlaWdodCgwKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwotICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gZGF0YS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBkYXRhLnZhcmlhbnRzLnNpemUo
KSA/IGJsb2Nrc1tpICsgMV0gOiBleGl0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUHV0
QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07Ci0KLSAgICAgICAgICAgIGNo
ZWNrSW5mZXJyZWRUeXBlKG1fbm9kZS0+Y2hpbGQyKCksIHZhbHVlLCB2YXJpYW50LnJlcXVpcmVk
VHlwZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2U7Ci0gICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsK
LSAgICAgICAgICAgICAgICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSBiYXNlOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSA9IGxvYWRCdXR0ZXJmbHlXaXRoQmFycmllcihi
YXNlKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5tX3Bs
YW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgICAgICBjb2RlQmxvY2so
KSwgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCi0gICAgICAgICAg
ICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLCB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzdG9yYWdl
ID0gc3RvcmFnZUZvclRyYW5zaXRpb24oCi0gICAgICAgICAgICAgICAgICAgIGJhc2UsIHZhcmlh
bnQub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlRm9y
VHJhbnNpdGlvbigpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKLQotICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+aW5kZXhpbmdUeXBl
KCkgPT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+dHlwZUlu
Zm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT50eXBlSW5m
bygpLmlubGluZVR5cGVGbGFncygpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5v
bGRTdHJ1Y3R1cmVGb3JUcmFuc2l0aW9uKCktPnR5cGVJbmZvKCkudHlwZSgpID09IHZhcmlhbnQu
bmV3U3RydWN0dXJlKCktPnR5cGVJbmZvKCkudHlwZSgpKTsKLSAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTMyKAotICAgICAgICAgICAgICAgICAgICB3ZWFrU3RydWN0dXJlSUQodmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKSksIGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RvcmVQcm9wZXJ0eSh2YWx1ZSwg
c3RvcmFnZSwgZGF0YS5pZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAgaWYgKCFt
X2ludGVycHJldGVyLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihiYXNlU2V0KSkKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0R2xvYmFsVmFyaWFibGUoKQot
ICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUobV9u
b2RlLT52YXJpYWJsZVBvaW50ZXIoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
UHV0R2xvYmFsVmFyaWFibGUoKQotICAgIHsKLSAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAg
ICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmFic29sdXRlKG1fbm9k
ZS0+dmFyaWFibGVQb2ludGVyKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlTm90
aWZ5V3JpdGUoKQotICAgIHsKLSAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT53
YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludmFs
aWRhdGVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxpZGF0
ZWQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOFplcm9FeHQzMihtX291dC5hYnNvbHV0ZShz
ZXQtPmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAg
ICAgbV9vdXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50MzIoSXNJbnZhbGlkYXRlZCkpLAot
ICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNOb3RJbnZhbGlkYXRl
ZCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpc05vdEludmFsaWRhdGVkLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTm90aWZ5
V3JpdGUsIEludmFsaWRHUFJSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzZXQpKTsK
LSAgICAgICAgICAgIH0pOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0Q2FsbGVlKCkKLSAgICB7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKEpTU3RhY2s6OkNhbGxlZSkpKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0QXJndW1lbnRDb3VudCgpCi0gICAgewotICAg
ICAgICBzZXRJbnQzMihtX291dC5sb2FkMzIocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENv
dW50KSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRTY29wZSgpCi0gICAgewot
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSwgbV9oZWFwcy5KU0Z1bmN0aW9uX3Njb3BlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29t
cGlsZVNraXBTY29wZSgpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWRQdHIo
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9oZWFwcy5KU1Njb3BlX25leHQpKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0Q2xvc3VyZVZhcigpCi0gICAgewotICAgICAgICBz
ZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgICAgIGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9oZWFwcy5KU0Vudmly
b25tZW50UmVjb3JkX3ZhcmlhYmxlc1ttX25vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0KCldKSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVB1dENsb3N1cmVWYXIoKQotICAgIHsKLSAg
ICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSksCi0gICAgICAgICAgICBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLAotICAgICAgICAg
ICAgbV9oZWFwcy5KU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1ttX25vZGUtPnNjb3BlT2Zm
c2V0KCkub2Zmc2V0KCldKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlR2V0RnJvbUFy
Z3VtZW50cygpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKAotICAgICAgICAgICAgbV9vdXQu
bG9hZDY0KAotICAgICAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCi0gICAg
ICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZVttX25vZGUtPmNhcHR1
cmVkQXJndW1lbnRzT2Zmc2V0KCkub2Zmc2V0KCldKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVB1dFRvQXJndW1lbnRzKCkKLSAgICB7Ci0gICAgICAgIG1fb3V0LnN0b3JlNjQoCi0g
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpLAotICAgICAgICAgICAgbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1l
bnRzX3N0b3JhZ2VbbV9ub2RlLT5jYXB0dXJlZEFyZ3VtZW50c09mZnNldCgpLm9mZnNldCgpXSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcSgpCi0gICAgewotICAgICAg
ICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpCi0gICAgICAgICAgICB8fCBt
X25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQ1MlJlcFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9k
ZS0+aXNCaW5hcnlVc2VLaW5kKERvdWJsZVJlcFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5h
cnlVc2VLaW5kKEJvb2xlYW5Vc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNl
S2luZChTeW1ib2xVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChT
dHJpbmdJZGVudFVzZSkKLSAgICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0
cmluZ1VzZSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+
aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSwgT2JqZWN0T3JPdGhlclVzZSkpIHsKLSAgICAgICAg
ICAgIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdChtX25vZGUtPmNoaWxkMigpLCBtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdE9yT3RoZXJVc2UsIE9i
amVjdFVzZSkpIHsKLSAgICAgICAgICAgIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCht
X25vZGUtPmNoaWxkMSgpLCBtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5k
KFVudHlwZWRVc2UpKSB7Ci0gICAgICAgICAgICBub25TcGVjdWxhdGl2ZUNvbXBhcmUoCi0gICAg
ICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtX291dC5lcXVhbChsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlRXEpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE90aGVyVXNlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJwcmV0ZXIubmVl
ZHNUeXBlQ2hlY2sobV9ub2RlLT5jaGlsZDEoKSwgU3BlY090aGVyKSk7Ci0gICAgICAgICAgICBz
ZXRCb29sZWFuKGVxdWFsTnVsbE9yVW5kZWZpbmVkKG1fbm9kZS0+Y2hpbGQyKCksIEFsbENlbGxz
QXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPdGhlclVzZSkgewotICAgICAgICAgICAgQVNTRVJUKCFt
X2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKG1fbm9kZS0+Y2hpbGQyKCksIFNwZWNPdGhlcikp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNo
aWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXEoKQotICAgIHsKLSAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkgewotICAgICAgICAgICAgc2V0
Qm9vbGVhbigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChsb3dJbnQzMihtX25vZGUtPmNo
aWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VL
aW5kKEludDUyUmVwVXNlKSkgewotICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAg
ICAgICBMVmFsdWUgbGVmdCA9IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtp
bmQpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIo
KSwga2luZCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKGxlZnQsIHJpZ2h0
KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChEb3VibGVSZXBVc2UpKSB7Ci0gICAgICAgICAgICBz
ZXRCb29sZWFuKAotICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZUVxdWFsKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlz
QmluYXJ5VXNlS2luZChTdHJpbmdJZGVudFVzZSkpIHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4o
Ci0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobG93U3RyaW5nSWRlbnQobV9ub2RlLT5jaGls
ZDEoKSksIGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQo
U3RyaW5nVXNlKSkgewotICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93Q2VsbChtX25vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90VHJpdmlhbGx5RXF1YWxDYXNl
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlU3RyaWN0RXEvU3RyaW5nIG5vdCB0cml2
aWFsbHkgZXF1YWwgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0cmljdEVxL1N0cmluZyBjb250aW51
YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhtX25vZGUtPmNoaWxkMSgp
LCBsZWZ0KTsKLQotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwobGVmdCwgcmlnaHQpLCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSkpOwotCi0gICAgICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG5vdFRyaXZpYWxseUVxdWFsQ2FzZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKG1fbm9kZS0+Y2hp
bGQyKCksIHJpZ2h0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzdHJpbmdzRXF1YWwobGVmdCwgcmlnaHQpKTsKLSAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoT2JqZWN0VXNlLCBVbnR5cGVkVXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVh
bigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbG93
Tm9uTnVsbE9iamVjdChtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBl
ZFVzZSwgT2JqZWN0VXNlKSkgewotICAgICAgICAgICAgc2V0Qm9vbGVhbigKLSAgICAgICAgICAg
ICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbG93Tm9uTnVsbE9iamVjdCht
X25vZGUtPmNoaWxkMigpKSwKLSAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKE9iamVjdFVzZSkpIHsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4oCi0gICAgICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAg
ICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAg
ICAgIGxvd05vbk51bGxPYmplY3QobV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKEJvb2xlYW5Vc2UpKSB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKAotICAgICAgICAg
ICAgICAgIG1fb3V0LmVxdWFsKGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIGxvd0Jvb2xl
YW4obV9ub2RlLT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChTeW1ib2xVc2UpKSB7Ci0gICAg
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSByaWdodCA9IGxvd1N5bWJvbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAg
ICAgICAgIExWYWx1ZSBsZWZ0U3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIobGVmdCwgbV9oZWFw
cy5TeW1ib2xfcHJpdmF0ZU5hbWUpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0U3RyaW5nSW1w
bCA9IG1fb3V0LmxvYWRQdHIocmlnaHQsIG1faGVhcHMuU3ltYm9sX3ByaXZhdGVOYW1lKTsKLSAg
ICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwobGVmdFN0cmluZ0ltcGwsIHJpZ2h0U3Ry
aW5nSW1wbCkpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoTWlzY1VzZSwgVW50eXBlZFVzZSkKLSAg
ICAgICAgICAgIHx8IG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRVc2UsIE1pc2NVc2Up
KSB7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQu
ZXF1YWwobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFN0cmluZ0lkZW50VXNl
LCBOb3RTdHJpbmdWYXJVc2UpCi0gICAgICAgICAgICB8fCBtX25vZGUtPmlzQmluYXJ5VXNlS2lu
ZChOb3RTdHJpbmdWYXJVc2UsIFN0cmluZ0lkZW50VXNlKSkgewotICAgICAgICAgICAgRWRnZSBs
ZWZ0RWRnZSA9IG1fbm9kZS0+Y2hpbGRGb3IoU3RyaW5nSWRlbnRVc2UpOwotICAgICAgICAgICAg
RWRnZSByaWdodEVkZ2UgPSBtX25vZGUtPmNoaWxkRm9yKE5vdFN0cmluZ1ZhclVzZSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93U3RyaW5nSWRlbnQobGVmdEVk
Z2UpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0VmFsdWUgPSBsb3dKU1ZhbHVlKHJpZ2h0RWRn
ZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZVN0
cmljdEVxIFN0cmluZ0lkZW50IHRvIE5vdFN0cmluZ1ZhciBpcyBjZWxsIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIgaXMgc3RyaW5nIGNh
c2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNvbXBhcmVTdHJpY3RFcSBTdHJpbmdJZGVudCB0byBOb3RTdHJpbmdWYXIg
Y29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAg
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNDZWxsKHJpZ2h0VmFsdWUs
IHByb3ZlblR5cGUocmlnaHRFZGdlKSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGlzQ2VsbENh
c2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdD
YXNlKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFN0cmluZ1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAot
ICAgICAgICAgICAgICAgIGlzU3RyaW5nKHJpZ2h0VmFsdWUsIHByb3ZlblR5cGUocmlnaHRFZGdl
KSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShjb250aW51
YXRpb24pKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJp
bmdDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbV9vdXQu
bG9hZFB0cihyaWdodFZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZVN0cmluZ0lkZW50KHJpZ2h0RWRnZSwgcmlnaHRWYWx1ZSwgcmlnaHQpOwotICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNTdHJpbmdSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuZXF1YWwobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5i
b29sZWFuLCBub3RDZWxsUmVzdWx0LCBub3RTdHJpbmdSZXN1bHQsIGlzU3RyaW5nUmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcUNvbnN0YW50KCkKLSAgICB7Ci0gICAgICAgIEpT
VmFsdWUgY29uc3RhbnQgPSBtX25vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUoKTsKLQotICAgICAg
ICBzZXRCb29sZWFuKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudCkpKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZUNvbXBhcmVMZXNzKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0gICAgICAg
ICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubGVzc1RoYW4obGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5kb3VibGVMZXNzVGhhbihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICB9
LAotICAgICAgICAgICAgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGNvbXBpbGVDb21wYXJlTGVzc0VxKCkKLSAgICB7Ci0gICAgICAgIGNvbXBhcmUoCi0gICAg
ICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQubGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICBbJl0gKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTGVzc1RoYW5PckVxdWFsKGxlZnQsIHJpZ2h0
KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvcGVyYXRpb25Db21wYXJlTGVzc0VxKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlQ29tcGFyZUdyZWF0ZXIoKQotICAgIHsKLSAg
ICAgICAgY29tcGFyZSgKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ncmVhdGVyVGhhbihsZWZ0LCByaWdo
dCk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmRvdWJsZUdyZWF0ZXJUaGFu
KGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBvcGVyYXRpb25Db21w
YXJlR3JlYXRlcik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUNvbXBhcmVHcmVhdGVy
RXEoKQotICAgIHsKLSAgICAgICAgY29tcGFyZSgKLSAgICAgICAgICAgIFsmXSAoTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ncmVhdGVy
VGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsm
XSAoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgewotICAgICAgICAgICAgICAgIHJldHVybiBt
X291dC5kb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAg
fSwKLSAgICAgICAgICAgIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEpOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KCkKLSAgICB7Ci0gICAgICAgIHNldEJvb2xlYW4o
bV9vdXQubG9naWNhbE5vdChib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0KCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSBtX25vZGU7Ci0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3MgPSBub2RlLT5udW1DaGlsZHJl
bigpIC0gMTsKLQotICAgICAgICBMVmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSA9IEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBudW1BcmdzOwotICAgICAgICB1bnNpZ25lZCBh
bGlnbmVkRnJhbWVTaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50
UmVnaXN0ZXJzKCksIGZyYW1lU2l6ZSk7Ci0KLSAgICAgICAgLy8gSlMtPkpTIGNhbGxpbmcgY29u
dmVudGlvbiByZXF1aXJlcyB0aGF0IHRoZSBjYWxsZXIgYWxsb3dzIHRoaXMgbXVjaCBzcGFjZSBv
biB0b3Agb2Ygc3RhY2sgdG8KLSAgICAgICAgLy8gZ2V0IHRyYXNoZWQgYnkgdGhlIGNhbGxlZSwg
ZXZlbiBpZiBub3QgYWxsIG9mIHRoYXQgc3BhY2UgaXMgdXNlZCB0byBwYXNzIGFyZ3VtZW50cy4g
V2UgdGVsbAotICAgICAgICAvLyBCMyB0aGlzIGV4cGxpY2l0bHkgZm9yIHR3byByZWFzb25zOgot
ICAgICAgICAvLwotICAgICAgICAvLyAtIFdlIHdpbGwgb25seSBwYXNzIGZyYW1lU2l6ZSB3b3J0
aCBvZiBzdHVmZi4KLSAgICAgICAgLy8gLSBUaGUgdHJhc2hlZCBzdGFjayBndWFyYW50ZWUgaXMg
bG9naWNhbGx5IHNlcGFyYXRlIGZyb20gdGhlIGFjdCBvZiBwYXNzaW5nIGFyZ3VtZW50cywgc28g
d2UKLSAgICAgICAgLy8gICBzaG91bGRuJ3QgcmVseSBvbiBBaXIgdG8gaW5mZXIgdGhlIHRyYXNo
ZWQgc3RhY2sgcHJvcGVydHkgYmFzZWQgb24gdGhlIGFyZ3VtZW50cyBpdCBlbmRzCi0gICAgICAg
IC8vICAgdXAgc2VlaW5nLgotICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShh
bGlnbmVkRnJhbWVTaXplKTsKLQotICAgICAgICAvLyBDb2xsZWN0IHRoZSBhcmd1bWVudHMsIHNp
bmNlIHRoaXMgY2FuIGdlbmVyYXRlIGNvZGUgYW5kIHdlIHdhbnQgdG8gZ2VuZXJhdGUgaXQgYmVm
b3JlIHdlIGVtaXQKLSAgICAgICAgLy8gdGhlIGNhbGwuCi0gICAgICAgIFZlY3RvcjxDb25zdHJh
aW5lZFZhbHVlPiBhcmd1bWVudHM7Ci0KLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGNh
bGxlZSBnb2VzIGludG8gR1BSMCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGUgc2xvdyBwYXRoIHRo
dW5rcyBleHBlY3QgdGhlCi0gICAgICAgIC8vIGNhbGxlZSB0byBiZS4KLSAgICAgICAgYXJndW1l
bnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnJlZ1QwKSkpOwotCi0gICAgICAgIGF1dG8gYWRkQXJndW1lbnQgPSBbJl0gKExWYWx1ZSB2
YWx1ZSwgVmlydHVhbFJlZ2lzdGVyIHJlZywgaW50IG9mZnNldCkgewotICAgICAgICAgICAgaW50
cHRyX3Qgb2Zmc2V0RnJvbVNQID0KLSAgICAgICAgICAgICAgICAocmVnLm9mZnNldCgpIC0gSlNT
dGFjazo6Q2FsbGVyRnJhbWVBbmRQQ1NpemUpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIG9m
ZnNldDsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoQ29uc3RyYWluZWRWYWx1ZSh2YWx1
ZSwgVmFsdWVSZXA6OnN0YWNrQXJndW1lbnQob2Zmc2V0RnJvbVNQKSkpOwotICAgICAgICB9Owot
Ci0gICAgICAgIGFkZEFyZ3VtZW50KGpzQ2FsbGVlLCBWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6
Q2FsbGVlKSwgMCk7Ci0gICAgICAgIGFkZEFyZ3VtZW50KG1fb3V0LmNvbnN0SW50MzIobnVtQXJn
cyksIFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSwgUGF5bG9hZE9mZnNl
dCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpCi0gICAg
ICAgICAgICBhZGRBcmd1bWVudChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSArIGkpKSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSksIDApOwotCi0gICAgICAgIFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAg
ICAgICBwYXRjaHBvaW50LT5hcHBlbmRWZWN0b3IoYXJndW1lbnRzKTsKLQotICAgICAgICBSZWZQ
dHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0KLSAgICAgICAg
ICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsKLSAgICAgICAg
Ci0gICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJl
Z2lzdGVycygpKTsKLSAgICAgICAgcGF0Y2hwb2ludC0+Y2xvYmJlckxhdGUoUmVnaXN0ZXJTZXQ6
OnZvbGF0aWxlUmVnaXN0ZXJzRm9ySlNDYWxsKCkpOwotICAgICAgICBwYXRjaHBvaW50LT5yZXN1
bHRDb25zdHJhaW50ID0gVmFsdWVSZXA6OnJlZyhHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0K
LSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZD
YWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMm
IGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAg
ICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7
Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gc3RhdGUtPmpp
dENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotCi0gICAg
ICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbkZvclVud2lu
ZChwYXJhbXMsIGNhbGxTaXRlSW5kZXgpOwotCi0gICAgICAgICAgICAgICAgaml0LnN0b3JlMzIo
Ci0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRl
SW5kZXguYml0cygpKSwKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7Ci0KLSAgICAgICAgICAg
ICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGppdC5jb2RlQmxvY2soKS0+YWRkQ2Fs
bExpbmtJbmZvKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6Tm90RXF1YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAg
ICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotCi0gICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGZhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwotCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGpp
dC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZv
OjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIHNsb3dDYWxsID0g
aml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAg
ICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoCi0gICAgICAgICAgICAgICAgICAg
IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0ID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3QgOiBDYWxs
TGlua0luZm86OkNhbGwsCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAgICAgICAgICAgaml0LmFkZFB0cigKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLXBhcmFtcy5wcm9jKCku
ZnJhbWVTaXplKCkpLAotICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgICAg
ICAgICBqaXQuYWRkTGlua1Rhc2soCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGxpbmtDYWxsID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LnZtKCkuZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoc2xvd0NhbGwsIEZ1bmN0aW9uUHRyKGxp
bmtDYWxsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKHNsb3dDYWxsKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YodGFyZ2V0VG9DaGVjayksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
ZmFzdENhbGwpKTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLQot
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZVRhaWxDYWxsKCkKLSAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAg
IHVuc2lnbmVkIG51bUFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKLQotICAgICAgICBM
VmFsdWUganNDYWxsZWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAKLSAgICAgICAgLy8gV2Ugd2FudCBCMyB0byBnaXZlIHVzIGFsbCBvZiB0aGUg
YXJndW1lbnRzIHVzaW5nIHdoYXRldmVyIG1lY2hhbmlzbSBpdCB0aGlua3MgaXMKLSAgICAgICAg
Ly8gY29udmVuaWVudC4gVGhlIGdlbmVyYXRvciB0aGVuIHNodWZmbGVzIHRob3NlIGFyZ3VtZW50
cyBpbnRvIG91ciBvd24gY2FsbCBmcmFtZSwKLSAgICAgICAgLy8gZGVzdHJveWluZyBvdXIgZnJh
bWUgaW4gdGhlIHByb2Nlc3MuCi0KLSAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGhhdmUg
dG8gZG8gYW55dGhpbmcgc3BlY2lhbCBmb3IgZXhjZXB0aW9ucy4gQSB0YWlsIGNhbGwgaXMgb25s
eSBhCi0gICAgICAgIC8vIHRhaWwgY2FsbCBpZiBpdCBpcyBub3QgaW5zaWRlIGEgdHJ5IGJsb2Nr
LgotCi0gICAgICAgIFZlY3RvcjxDb25zdHJhaW5lZFZhbHVlPiBhcmd1bWVudHM7Ci0KLSAgICAg
ICAgYXJndW1lbnRzLmFwcGVuZChDb25zdHJhaW5lZFZhbHVlKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6
cmVnKEdQUkluZm86OnJlZ1QwKSkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1BcmdzOyArK2kpIHsKLSAgICAgICAgICAgIC8vIE5vdGU6IHdlIGNvdWxkIGxldCB0aGUg
c2h1ZmZsZXIgZG8gYm94aW5nIGZvciB1cywgYnV0IGl0J3Mgbm90IHN1cGVyIGNsZWFyIHRoYXQg
dGhpcwotICAgICAgICAgICAgLy8gd291bGQgYmUgYmV0dGVyLiBBbHNvLCBpZiB3ZSB3YW50ZWQg
dG8gZG8gdGhhdCwgdGhlbiB3ZSdkIGhhdmUgdG8gdGVhY2ggdGhlIHNodWZmbGVyCi0gICAgICAg
ICAgICAvLyB0aGF0IDMyLWJpdCB2YWx1ZXMgY291bGQgbGFuZCBhdCA0LWJ5dGUgYWxpZ25tZW50
IGJ1dCBub3QgOC1ieXRlIGFsaWdubWVudC4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29u
c3RyYWluZWRWYWx1ZSBjb25zdHJhaW5lZFZhbHVlKAotICAgICAgICAgICAgICAgIGxvd0pTVmFs
dWUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxICsgaSkpLAotICAgICAgICAgICAgICAgIFZh
bHVlUmVwOjpXYXJtQW55KTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3RyYWlu
ZWRWYWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRW
ZWN0b3IoYXJndW1lbnRzKTsKLQotICAgICAgICAvLyBQcmV2ZW50IGFueSBvZiB0aGUgYXJndW1l
bnRzIGZyb20gdXNpbmcgdGhlIHNjcmF0Y2ggcmVnaXN0ZXIuCi0gICAgICAgIHBhdGNocG9pbnQt
PmNsb2JiZXJFYXJseShSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwotCi0g
ICAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdGVsbCB0aGUgcGF0Y2hwb2ludCB0aGF0IHdlIHdp
bGwgY2xvYmJlciByZWdpc3RlcnMsIHNpbmNlIHdlIHdvbid0IHJldHVybgotICAgICAgICAvLyBh
bnl3YXkuCi0KLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gY29kZU9yaWdpbkRlc2Ny
aXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsK
LSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
LSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0g
c3RhdGUtPmppdENvZGUtPmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4p
OwotCi0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0g
ICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gc3RhdGUtPmppdENvZGUtPmNv
bW1vbi5mcmFtZVJlZ2lzdGVyQ291bnQ7Ci0gICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2Fs
bGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoR1BSSW5mbzo6cmVnVDAsIERhdGFGb3JtYXRKUyk7
Ci0KLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQXJnczsgKytp
KQotICAgICAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLmFwcGVuZChwYXJhbXNbMSAr
IGldLnJlY292ZXJ5Rm9ySlNWYWx1ZSgpKTsKLQotICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOwotCi0gICAgICAgICAg
ICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENh
bGxMaW5rSW5mbygpOwotCi0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQ
dHIgdGFyZ2V0VG9DaGVjazsKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xv
d1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAotICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Ok5vdEVxdWFsLCBHUFJJbmZvOjpyZWdUMCwgdGFyZ2V0VG9DaGVjaywKLSAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKLQotICAgICAg
ICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7
Ci0gICAgICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwg
ZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7Ci0KLSAgICAgICAgICAgICAgICBzbG93UGF0
aC5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAgICAgLy8gWWVzLCB0aGlzIGlzIHJlYWxseSBu
ZWNlc3NhcnkuIFlvdSBjb3VsZCB0aHJvdyBhbiBleGNlcHRpb24gaW4gYSBob3N0IGNhbGwgb24g
dGhlCi0gICAgICAgICAgICAgICAgLy8gc2xvdyBwYXRoLiBUaGF0J2xsIHJvdXRlIHVzIHRvIGxv
b2t1cEV4Y2VwdGlvbkhhbmRsZXIoKSwgd2hpY2ggdW53aW5kcyBzdGFydGluZwotICAgICAgICAg
ICAgICAgIC8vIHdpdGggdGhlIGNhbGwgc2l0ZSBpbmRleCBvZiBvdXIgZnJhbWUuIEJhZCB0aGlu
Z3MgaGFwcGVuIGlmIGl0J3Mgbm90IHNldC4KLSAgICAgICAgICAgICAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJ
bmRleC5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKLQotICAgICAgICAgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSk7
Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOwotICAgICAgICAgICAgICAgIHNsb3dQYXRoU2h1
ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7Ci0KLSAgICAgICAgICAgICAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIp
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBzbG93Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwotCi0gICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1
cm5Gcm9tVGFpbENhbGwpOwotCi0gICAgICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgY29kZU9yaWdpbiwgR1BSSW5mbzo6cmVnVDApOwot
Ci0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvcikuY29k
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dDYWxsLCBG
dW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdl
dFRvQ2hlY2spLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZk5lYXJDYWxsKGZhc3RDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKLSAgICB7Ci0g
ICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7Ci0gICAgICAgIExWYWx1ZSBqc0NhbGxlZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSB0aGlzQXJnID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBqc0Fy
Z3VtZW50cyA9IG51bGxwdHI7Ci0gICAgICAgIGJvb2wgZm9yd2FyZGluZyA9IGZhbHNlOwotICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6Ci0gICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnc0lubGluZWRDYWxsZXI6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
LSAgICAgICAgICAgIGpzQXJndW1lbnRzID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgICAgIGZvcndhcmRpbmcgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9k
ZSwgImJhZCBub2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBv
aW50KEludDY0KTsKLQotICAgICAgICAvLyBBcHBlbmQgdGhlIGZvcm1zIG9mIHRoZSBhcmd1bWVu
dHMgdGhhdCB3ZSB3aWxsIHVzZSBiZWZvcmUgYW55IGNsb2JiZXJpbmcgaGFwcGVucy4KLSAgICAg
ICAgcGF0Y2hwb2ludC0+YXBwZW5kKGpzQ2FsbGVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJl
Z1QwKSk7Ci0gICAgICAgIGlmIChqc0FyZ3VtZW50cykKLSAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZFNvbWVSZWdpc3Rlcihqc0FyZ3VtZW50cyk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZFNvbWVSZWdpc3Rlcih0aGlzQXJnKTsKLQotICAgICAgICBpZiAoIWZvcndhcmRpbmcpIHsK
LSAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlbSBhZ2FpbiBmb3IgYWZ0ZXIgY2xvYmJlcmlu
Zy4gTm90ZSB0aGF0IHRoZSBjb21waWxlciBtYXkgYXNrIHVzIHRvIHVzZSBhCi0gICAgICAgICAg
ICAvLyBkaWZmZXJlbnQgcmVnaXN0ZXIgZm9yIHRoZSBsYXRlIGZvciB0aGUgcG9zdC1jbG9iYmVy
aW5nIHZlcnNpb24gb2YgdGhlIHZhbHVlLiBUaGlzIGdpdmVzCi0gICAgICAgICAgICAvLyB0aGUg
Y29tcGlsZXIgYSBjaGFuY2UgdG8gc3BpbGwgdGhlc2UgdmFsdWVzIHdpdGhvdXQgaGF2aW5nIHRv
IGJ1cm4gYW55IGNhbGxlZS1zYXZlcy4KLSAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChq
c0NhbGxlZSwgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgICAgIHBhdGNocG9pbnQt
PmFwcGVuZChqc0FyZ3VtZW50cywgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLSAgICAgICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZCh0aGlzQXJnLCBWYWx1ZVJlcDo6TGF0ZUNvbGRBbnkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IGV4Y2Vw
dGlvbkhhbmRsZSA9Ci0gICAgICAgICAgICBwcmVwYXJlUGF0Y2hwb2ludEZvckV4Y2VwdGlvbnMo
cGF0Y2hwb2ludCk7Ci0gICAgICAgIAotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVyKFJlZ2lz
dGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmNs
b2JiZXJMYXRlKFJlZ2lzdGVyU2V0Ojp2b2xhdGlsZVJlZ2lzdGVyc0ZvckpTQ2FsbCgpKTsKLSAg
ICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludCA9IFZhbHVlUmVwOjpyZWcoR1BSSW5m
bzo6cmV0dXJuVmFsdWVHUFIpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIG1pbmltdW0gYW1v
dW50IG9mIGNhbGwgYXJnIGFyZWEgc3RhY2sgc3BhY2UgdGhhdCBhbGwgSlMtPkpTIGNhbGxzIGFs
d2F5cyBoYXZlLgotICAgICAgICB1bnNpZ25lZCBtaW5pbXVtSlNDYWxsQXJlYVNpemUgPQotICAg
ICAgICAgICAgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsKLSAgICAgICAgICAgIFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKTsKLQotICAgICAgICBtX3Byb2MucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShtaW5p
bXVtSlNDYWxsQXJlYVNpemUpOwotICAgICAgICAKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpOwotICAgICAgICBTdGF0ZSog
c3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2VuZXJhdG9yKAot
ICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAgICAgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZUluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmppdENvZGUt
PmNvbW1vbi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4pOwotCi0gICAgICAgICAg
ICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAgICAgICAg
ICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcykt
Pmp1bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxl
RXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7Ci0KLSAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OnRhZ0ZvcihWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6QXJndW1lbnRDb3Vu
dCkpKTsKLQotICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gaml0
LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICAgICAgICAgICAgICBDYWxsVmFy
YXJnc0RhdGEqIGRhdGEgPSBub2RlLT5jYWxsVmFyYXJnc0RhdGEoKTsKLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFyZ0luZGV4ID0gMTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgY2FsbGVl
R1BSID0gcGFyYW1zW2FyZ0luZGV4KytdLmdwcigpOwotICAgICAgICAgICAgICAgIEFTU0VSVChj
YWxsZWVHUFIgPT0gR1BSSW5mbzo6cmVnVDApOwotICAgICAgICAgICAgICAgIEdQUlJlZyBhcmd1
bWVudHNHUFIgPSBqc0FyZ3VtZW50cyA/IHBhcmFtc1thcmdJbmRleCsrXS5ncHIoKSA6IEludmFs
aWRHUFJSZWc7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHRoaXNHUFIgPSBwYXJhbXNbYXJnSW5k
ZXgrK10uZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgY2FsbGVlTGF0ZVJl
cDsKLSAgICAgICAgICAgICAgICBCMzo6VmFsdWVSZXAgYXJndW1lbnRzTGF0ZVJlcDsKLSAgICAg
ICAgICAgICAgICBCMzo6VmFsdWVSZXAgdGhpc0xhdGVSZXA7Ci0gICAgICAgICAgICAgICAgaWYg
KCFmb3J3YXJkaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBmb3J3
YXJkaW5nIHRoZW4gd2UnbGwgbmVlZCBjYWxsZWUsIGFyZ3VtZW50cywgYW5kIHRoaXMgYWZ0ZXIg
d2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBwb3RlbnRpYWxseSBjbG9iYmVyZWQgY2Fs
bGVlR1BSLCBhcmd1bWVudHNHUFIsIGFuZCB0aGlzR1BSLiBPdXIgdGVjaG5pcXVlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGZvciB0aGlzIGlzIHRvIHN1cHBseSBhbGwgb2YgdGhvc2Ugb3BlcmFu
ZHMgYXMgbGF0ZSB1c2VzIGluIGFkZGl0aW9uIHRvCi0gICAgICAgICAgICAgICAgICAgIC8vIHNw
ZWNpZnlpbmcgdGhlbSBhcyBlYXJseSB1c2VzLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhdGUg
dXNlIHVzZXMgYSBzcGlsbAotICAgICAgICAgICAgICAgICAgICAvLyB3aGlsZSB0aGUgZWFybHkg
dXNlIHVzZXMgYSByZWdpc3RlciwgYW5kIGl0J3MgcG9zc2libGUgZm9yIHRoZSBsYXRlIGFuZCBl
YXJseQotICAgICAgICAgICAgICAgICAgICAvLyB1c2VzIHRvIHVzZSBkaWZmZXJlbnQgcmVnaXN0
ZXJzLiBXZSBkbyBrbm93IHRoYXQgdGhlIGxhdGUgdXNlcyBpbnRlcmZlcmUgd2l0aAotICAgICAg
ICAgICAgICAgICAgICAvLyBhbGwgdm9sYXRpbGUgcmVnaXN0ZXJzIGFuZCBzbyB3b24ndCB1c2Ug
dGhvc2UsIGJ1dCB0aGUgZWFybHkgdXNlcyBtYXkgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IHZvbGF0aWxlIHJlZ2lzdGVycyBhbmQgaW4gdGhlIGNhc2Ugb2YgY2FsbGVlR1BSLCBpdCdzIHBp
bm5lZCB0byByZWdUMCBzbyBpdAotICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbml0ZWx5IHdp
bGwuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB3ZSBoYXZlIHRvIGJlIHN1cGVyIGNhcmVmdWwgd2l0aCB0aGVzZS4gSXQncyBwb3NzaWJs
ZSB0aGF0IHRoZXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzZSBhIHNodWZmbGluZyBvZiB0
aGUgcmVnaXN0ZXJzIHVzZWQgZm9yIGNhbGxlZUdQUiwgYXJndW1lbnRzR1BSLCBhbmQKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhpc0dQUi4gSWYgdGhhdCBoYXBwZW5zIGFuZCB3ZSBkbyBmb3Ig
ZXhhbXBsZToKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIGNhbGxlZUxhdGVSZXAuZW1pdFJlc3RvcmUoaml0LCBjYWxsZWVHUFIpOwotICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgYXJndW1lbnRzTGF0ZVJlcC5lbWl0UmVzdG9yZShqaXQsIGNhbGxl
ZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRo
ZW4gd2UgbWlnaHQgZW5kIHVwIHdpdGggZ2FyYmFnZSBpZiBjYWxsZWVMYXRlUmVwLmdwcigpID09
IGFyZ3VtZW50c0dQUiBhbmQKLSAgICAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzTGF0ZVJl
cC5ncHIoKSA9PSBjYWxsZWVHUFIuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGRvIGEgdmFyaWV0eSBvZiB0aGluZ3MgdG8gcHJldmVudCB0aGlzIGZy
b20gaGFwcGVuaW5nLiBGb3IgZXhhbXBsZSwgd2UgdXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGFyZ3VtZW50c0xhdGVSZXAgYmVmb3JlIG5lZWRpbmcgdGhlIG90aGVyIHR3byBhbmQgYWZ0ZXIg
d2UndmUgYWxyZWFkeSBzdG9wcGVkCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzaW5nIHRoZSAq
R1BScy4gQWxzbywgd2UgcGluIGNhbGxlZUdQUiB0byByZWdUMCwgYW5kIHJlbHkgb24gdGhlIGZh
Y3QgdGhhdAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgKkxhdGVSZXBzIGNhbm5vdCB1c2Ug
dm9sYXRpbGUgcmVnaXN0ZXJzIChzbyB0aGV5IGNhbm5vdCBiZSByZWdUMCwgc28KLSAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbGVlR1BSICE9IGFyZ3VtZW50c0xhdGVSZXAuZ3ByKCkgYW5kIGNh
bGxlZUdQUiAhPSB0aGlzTGF0ZVJlcC5ncHIoKSkuCi0gICAgICAgICAgICAgICAgICAgIC8vCi0g
ICAgICAgICAgICAgICAgICAgIC8vIEFuIGFsdGVybmF0aXZlIHdvdWxkIGhhdmUgYmVlbiB0byBq
dXN0IHVzZSBlYXJseSB1c2VzIGFuZCBlYXJseS1jbG9iYmVyIGFsbAotICAgICAgICAgICAgICAg
ICAgICAvLyB2b2xhdGlsZSByZWdpc3RlcnMuIEJ1dCB0aGF0IHdvdWxkIGZvcmNlIGNhbGxlZSwg
YXJndW1lbnRzLCBhbmQgdGhpcyBpbnRvCi0gICAgICAgICAgICAgICAgICAgIC8vIGNhbGxlZS1z
YXZlIHJlZ2lzdGVycyBldmVuIGlmIHdlIGhhdmUgdG8gc3BpbGwgdGhlbS4gV2UgZG9uJ3Qgd2Fu
dCBzcGlsbGluZyB0bwotICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdXAgdGhyZWUgY2FsbGVl
LXNhdmVzLgotICAgICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBU
TDtEUjogVGhlIHdheSB3ZSB1c2UgTGF0ZVJlcHMgaGVyZSBpcyBkYW5nZXJvdXMgYW5kIGJhcmVs
eSB3b3JrcyBidXQgYWNoaWV2ZXMKLSAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBkZXNpcmFi
bGUgcGVyZm9ybWFuY2UgcHJvcGVydGllcywgc28gZG9uJ3QgbWlzdGFrZSB0aGUgY2xldmVybmVz
cyBmb3IKLSAgICAgICAgICAgICAgICAgICAgLy8gZWxlZ2FuY2UuCi0gICAgICAgICAgICAgICAg
ICAgIGNhbGxlZUxhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107Ci0gICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c0xhdGVSZXAgPSBwYXJhbXNbYXJnSW5kZXgrK107Ci0gICAgICAgICAgICAg
ICAgICAgIHRoaXNMYXRlUmVwID0gcGFyYW1zW2FyZ0luZGV4KytdOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIEdldCBzb21lIHNjcmF0Y2ggcmVnaXN0ZXJzLgotICAg
ICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Ci0gICAgICAgICAgICAgICAg
dXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7Ci0gICAg
ICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5tZXJnZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJk
d2FyZVJlZ2lzdGVycygpKTsKLSAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLm1lcmdlKFJl
Z2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgICAgICAgICAgICAgIHVzZWRS
ZWdpc3RlcnMuc2V0KGNhbGxlZUdQUik7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50c0dQ
UiAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJzLnNl
dChhcmd1bWVudHNHUFIpOwotICAgICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KHRoaXNH
UFIpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsZWVMYXRlUmVwLmlzUmVnKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGNhbGxlZUxhdGVSZXAucmVnKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChhcmd1bWVudHNMYXRlUmVwLmlzUmVnKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHVzZWRSZWdpc3RlcnMuc2V0KGFyZ3VtZW50c0xhdGVSZXAucmVnKCkpOwotICAgICAg
ICAgICAgICAgIGlmICh0aGlzTGF0ZVJlcC5pc1JlZygpKQotICAgICAgICAgICAgICAgICAgICB1
c2VkUmVnaXN0ZXJzLnNldCh0aGlzTGF0ZVJlcC5yZWcoKSk7Ci0gICAgICAgICAgICAgICAgU2Ny
YXRjaFJlZ2lzdGVyQWxsb2NhdG9yIGFsbG9jYXRvcih1c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAg
ICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUjEgPSBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BS
KCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIyID0gYWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSMyA9IGZv
cndhcmRpbmcgPyBhbGxvY2F0b3IuYWxsb2NhdGVTY3JhdGNoR1BSKCkgOiBJbnZhbGlkR1BSUmVn
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFhbGxvY2F0b3IubnVtYmVyT2ZSZXVz
ZWRSZWdpc3RlcnMoKSk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGNhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sgPSBbJl0gKHZvaWQqIGNhbGxlZSkgewotICAgICAgICAgICAgICAgICAgICBqaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoY2FsbGVlKSwgR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uQXJndW1lbnRHUFIpOwotICAgICAgICAgICAgICAgICAgICBqaXQuY2FsbChHUFJJbmZv
Ojpub25QcmVzZXJ2ZWROb25Bcmd1bWVudEdQUik7Ci0gICAgICAgICAgICAgICAgICAgIGV4Y2Vw
dGlvbnMtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKEFzc2VtYmx5SGVscGVyczo6Tm9y
bWFsRXhjZXB0aW9uQ2hlY2ssIEFzc2VtYmx5SGVscGVyczo6RmFySnVtcFdpZHRoKSk7Ci0gICAg
ICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAgICAgIGF1dG8gYWRqdXN0U3RhY2sgPSBbJl0g
KEdQUlJlZyBhbW91bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBhbW91bnQsIEND
YWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgIH07Ci0K
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbFN0YWNrSGVpZ2h0ID0gcGFyYW1zLnBy
b2MoKS5mcmFtZVNpemUoKTsKLQotICAgICAgICAgICAgICAgIGlmIChmb3J3YXJkaW5nKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG9y
aWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCBzbG93Q2FzZTsKLSAgICAgICAgICAgICAgICAgICAgZW1pdFNldHVwVmFyYXJn
c0ZyYW1lRmFzdENhc2Uoaml0LCBzY3JhdGNoR1BSMiwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIy
LCBzY3JhdGNoR1BSMywgbm9kZS0+Y2hpbGQyKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWUsIGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0LCBzbG93Q2FzZSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwotICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICBqaXQu
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsKLSAgICAgICAgICAgICAgICAgICAgY2FsbFdpdGhF
eGNlcHRpb25DaGVjayhiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvblRocm93U3RhY2tPdmVy
Zmxvd0ZvclZhcmFyZ3MpKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihERkdWYXJhcmdzVGhyb3dpbmdQYXRoRGlkTm90VGhyb3cpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZqaXQpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGFkanVzdFN0YWNrKHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihvcmlnaW5hbFN0YWNrSGVpZ2h0IC8gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHNjcmF0Y2hH
UFIxKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShhcmd1bWVudHNHUFIsIHNjcmF0Y2hHUFIxLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihk
YXRhLT5maXJzdFZhckFyZ09mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4
Y2VwdGlvbkNoZWNrKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2l6ZUZyYW1lRm9yVmFy
YXJncykpOwotCi0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCBzY3JhdGNoR1BSMSk7Ci0gICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG9yaWdpbmFsU3RhY2tIZWlnaHQgLyBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgc2NyYXRjaEdQUjIpOwotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNM
YXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgYXJndW1lbnRzR1BSKTsKLSAgICAgICAgICAgICAgICAg
ICAgZW1pdFNldFZhcmFyZ3NGcmFtZShqaXQsIHNjcmF0Y2hHUFIxLCBmYWxzZSwgc2NyYXRjaEdQ
UjIsIHNjcmF0Y2hHUFIyKTsKLSAgICAgICAgICAgICAgICAgICAgaml0LmFkZFB0cihDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMigtbWluaW11bUpTQ2FsbEFyZWFTaXplKSwgc2NyYXRjaEdQUjIs
IENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAgICAgICAgICAg
ICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKHNjcmF0Y2hHUFIyLCBhcmd1bWVudHNH
UFIsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGRhdGEtPmZpcnN0VmFyQXJnT2Zmc2V0KSwg
c2NyYXRjaEdQUjEpOwotICAgICAgICAgICAgICAgICAgICBjYWxsV2l0aEV4Y2VwdGlvbkNoZWNr
KGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGFkanVzdFN0YWNrKEdQUkluZm86
OnJldHVyblZhbHVlR1BSKTsKLQotICAgICAgICAgICAgICAgICAgICBjYWxsZWVMYXRlUmVwLmVt
aXRSZXN0b3JlKGppdCwgR1BSSW5mbzo6cmVnVDApOwotCi0gICAgICAgICAgICAgICAgICAgIC8v
IFRoaXMgbWF5IG5vdCBlbWl0IGNvZGUgaWYgdGhpc0dQUiBnb3QgYSBjYWxsZWUtc2F2ZS4gQWxz
bywgd2UncmUgZ3VhcmFudGVlZAotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoaXNHUFIg
IT0gR1BSSW5mbzo6cmVnVDAgYmVjYXVzZSByZWdUMCBpbnRlcmZlcmVzIHdpdGggaXQuCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXNMYXRlUmVwLmVtaXRSZXN0b3JlKGppdCwgdGhpc0dQUik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGppdC5z
dG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0
YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBqaXQuc3RvcmU2NCh0aGlzR1BSLCBDQ2Fs
bEhlbHBlcnM6OmNhbGxlZUFyZ3VtZW50U2xvdCgwKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKLSAgICAgICAgICAg
ICAgICBpZiAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxG
b3J3YXJkVmFyYXJncykKLSAgICAgICAgICAgICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OlRhaWxDYWxsVmFyYXJnczsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBib29sIGlzVGFpbENhbGwgPSBDYWxsTGlua0luZm86OmNh
bGxNb2RlRm9yKGNhbGxUeXBlKSA9PSBDYWxsTW9kZTo6VGFpbDsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0aCA9IGppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIEdQUkluZm86OnJlZ1QwLCB0YXJnZXRUb0NoZWNrLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoMCkpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6Q2FsbCBmYXN0Q2FsbDsKLSAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZG9uZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXNUYWlsQ2FsbCkgewotICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVD
YWxsZWVTYXZlcygpOwotICAgICAgICAgICAgICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxs
U2xvdygpOwotICAgICAgICAgICAgICAgICAgICBmYXN0Q2FsbCA9IGppdC5uZWFyVGFpbENhbGwo
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmYXN0Q2Fs
bCA9IGppdC5uZWFyQ2FsbCgpOwotICAgICAgICAgICAgICAgICAgICBkb25lID0gaml0Lmp1bXAo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c2xvd1BhdGgubGluaygmaml0KTsKLQotICAgICAgICAgICAgICAgIGlmIChpc1RhaWxDYWxsKQot
ICAgICAgICAgICAgICAgICAgICBqaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAg
ICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0lu
Zm8pLCBHUFJJbmZvOjpyZWdUMik7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxs
IHNsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGlzVGFpbENhbGwpCi0gICAgICAgICAgICAgICAgICAgIGppdC5hYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaml0LmFkZFB0cigKLSAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLW9yaWdpbmFsU3RhY2tIZWlnaHQpLAotICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNr
KAotICAgICAgICAgICAgICAgICAgICBbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsaW5rQ2FsbCA9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci52bSgpLmdldENUSVN0dWIobGlu
a0NhbGxUaHVua0dlbmVyYXRvcikuY29kZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgbGlu
a0J1ZmZlci5saW5rKHNsb3dDYWxsLCBGdW5jdGlvblB0cihsaW5rQ2FsbC5leGVjdXRhYmxlQWRk
cmVzcygpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9ucygKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChzbG93Q2FsbCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKHRhcmdldFRvQ2hlY2sp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKGZhc3RDYWxsKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7
Ci0KLSAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgotICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCi0gICAgewotICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBtX25vZGUtPmxvYWRW
YXJhcmdzRGF0YSgpOwotICAgICAgICBMVmFsdWUganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlbmd0aCA9IHZtQ2Fs
bCgKLSAgICAgICAgICAgIG1fb3V0LmludDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uU2l6
ZU9mVmFyYXJncyksIG1fY2FsbEZyYW1lLCBqc0FyZ3VtZW50cywKLSAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSk7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
VGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB3ZSB3aWxsIGNhbGwgYW4gZWZmZWN0ZnVsIGxlbmd0aCBw
cm9wZXJ0eSB0d2ljZS4gVGhpcyBpcyBzYWZlCi0gICAgICAgIC8vIGZyb20gdGhlIHN0YW5kcG9p
bnQgb2YgdGhlIFZNJ3MgaW50ZWdyaXR5LCBidXQgaXQncyBzdWJ0bHkgd3JvbmcgZnJvbSBhIHNw
ZWMgY29tcGxpYW5jZQotICAgICAgICAvLyBzdGFuZHBvaW50LiBUaGUgYmVzdCBzb2x1dGlvbiB3
b3VsZCBiZSBvbmUgd2hlcmUgd2UgY2FuIGV4aXQgKmludG8qIHRoZSBvcF9jYWxsX3ZhcmFyZ3Mg
cmlnaHQKLSAgICAgICAgLy8gcGFzdCB0aGUgc2l6aW5nLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxNDQ4Ci0gICAgICAgIAotICAgICAgICBM
VmFsdWUgbGVuZ3RoSW5jbHVkaW5nVGhpcyA9IG1fb3V0LmFkZChsZW5ndGgsIG1fb3V0LmludDMy
T25lKTsKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgVmFyYXJnc092ZXJmbG93LCBu
b1ZhbHVlKCksIG51bGxwdHIsCi0gICAgICAgICAgICBtX291dC5hYm92ZShsZW5ndGhJbmNsdWRp
bmdUaGlzLCBtX291dC5jb25zdEludDMyKGRhdGEtPmxpbWl0KSkpOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuc3RvcmUzMihsZW5ndGhJbmNsdWRpbmdUaGlzLCBwYXlsb2FkRm9yKGRhdGEtPm1h
Y2hpbmVDb3VudCkpOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgY29tcHV0YXRp
b24gaXMgcmF0aGVyIHNpbGx5LiBJZiBvcGVyYXRpb25MYW9kVmFyYXJncyBqdXN0IHRvb2sgYSBw
b2ludGVyIGluc3RlYWQKLSAgICAgICAgLy8gb2YgYSBWaXJ0dWFsUmVnaXN0ZXIsIHdlIHdvdWxk
bid0IGhhdmUgdG8gZG8gdGhpcy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTY2MAotICAgICAgICBMVmFsdWUgbWFjaGluZVN0YXJ0ID0gbV9v
dXQubFNocigKLSAgICAgICAgICAgIG1fb3V0LnN1YihhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVT
dGFydC5vZmZzZXQoKSkudmFsdWUoKSwgbV9jYWxsRnJhbWUpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnRQdHIoMykpOwotICAgICAgICAKLSAgICAgICAgdm1DYWxsKAotICAgICAgICAgICAg
bV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Mb2FkVmFyYXJncyksIG1f
Y2FsbEZyYW1lLAotICAgICAgICAgICAgbV9vdXQuY2FzdFRvSW50MzIobWFjaGluZVN0YXJ0KSwg
anNBcmd1bWVudHMsIG1fb3V0LmNvbnN0SW50MzIoZGF0YS0+b2Zmc2V0KSwKLSAgICAgICAgICAg
IGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihkYXRhLT5tYW5kYXRvcnlNaW5pbXVtKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUZvcndhcmRWYXJhcmdzKCkKLSAgICB7Ci0gICAgICAg
IExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG1fbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7Ci0gICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1
ZSBsZW5ndGggPSBnZXRBcmd1bWVudHNMZW5ndGgoaW5saW5lQ2FsbEZyYW1lKS52YWx1ZTsKLSAg
ICAgICAgTFZhbHVlIGxlbmd0aEluY2x1ZGluZ1RoaXMgPSBtX291dC5hZGQobGVuZ3RoLCBtX291
dC5jb25zdEludDMyKDEgLSBkYXRhLT5vZmZzZXQpKTsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1
bGF0ZSgKLSAgICAgICAgICAgIFZhcmFyZ3NPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxscHRyLAot
ICAgICAgICAgICAgbV9vdXQuYWJvdmUobGVuZ3RoSW5jbHVkaW5nVGhpcywgbV9vdXQuY29uc3RJ
bnQzMihkYXRhLT5saW1pdCkpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlMzIobGVu
Z3RoSW5jbHVkaW5nVGhpcywgcGF5bG9hZEZvcihkYXRhLT5tYWNoaW5lQ291bnQpKTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSBzb3VyY2VTdGFydCA9IGdldEFyZ3VtZW50c1N0YXJ0KGlubGlu
ZUNhbGxGcmFtZSk7Ci0gICAgICAgIExWYWx1ZSB0YXJnZXRTdGFydCA9IGFkZHJlc3NGb3IoZGF0
YS0+bWFjaGluZVN0YXJ0KS52YWx1ZSgpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5l
ZExvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIHVuZGVmaW5lZCBs
b29wIGJvZHkiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG1haW5Mb29wRW50cnkgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIG1haW4gbG9vcCBlbnRyeSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbWFpbkxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRW
YXJhcmdzIG1haW4gbG9vcCBib2R5IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkZvcndhcmRWYXJhcmdzIGNvbnRpbnVhdGlvbiIp
KTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZW5ndGhBc1B0ciA9IG1fb3V0Lnplcm9FeHRQ
dHIobGVuZ3RoKTsKLSAgICAgICAgTFZhbHVlIGxvb3BCb3VuZFZhbHVlID0gbV9vdXQuY29uc3RJ
bnRQdHIoZGF0YS0+bWFuZGF0b3J5TWluaW11bSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGxv
b3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsb29wQm91bmRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGxvb3BCb3VuZFZhbHVlLCBsZW5ndGhBc1B0
ciksIHVuc3VyZSh1bmRlZmluZWRMb29wKSwgdW5zdXJlKG1haW5Mb29wRW50cnkpKTsKLSAgICAg
ICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8odW5kZWZp
bmVkTG9vcCwgbWFpbkxvb3BFbnRyeSk7Ci0gICAgICAgIExWYWx1ZSBwcmV2aW91c0luZGV4ID0g
bV9vdXQucGhpKG1fb3V0LmludFB0ciwgbG9vcEJvdW5kKTsKLSAgICAgICAgTFZhbHVlIGN1cnJl
bnRJbmRleCA9IG1fb3V0LnN1YihwcmV2aW91c0luZGV4LCBtX291dC5pbnRQdHJPbmUpOwotICAg
ICAgICBtX291dC5zdG9yZTY0KAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLAotICAgICAgICAgICAgbV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMudmFyaWFibGVzLCB0YXJnZXRTdGFydCwgY3VycmVudEluZGV4KSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5leHRJbmRleCA9IG1fb3V0LmFuY2hvcihjdXJyZW50SW5kZXgpOwotICAg
ICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHByZXZpb3VzSW5kZXgsIG5leHRJbmRleCk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmFib3ZlKGN1cnJlbnRJbmRl
eCwgbGVuZ3RoQXNQdHIpLCB1bnN1cmUodW5kZWZpbmVkTG9vcCksIHVuc3VyZShtYWluTG9vcEVu
dHJ5KSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtYWluTG9vcEVudHJ5LCBt
YWluTG9vcCk7Ci0gICAgICAgIGxvb3BCb3VuZCA9IG1fb3V0LmFuY2hvcihsZW5ndGhBc1B0cik7
Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3ROdWxsKGxlbmd0aEFzUHRyKSwgdW5zdXJl
KG1haW5Mb29wKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obWFpbkxvb3AsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHByZXZpb3VzSW5k
ZXggPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBsb29wQm91bmQpOwotICAgICAgICBjdXJyZW50
SW5kZXggPSBtX291dC5zdWIocHJldmlvdXNJbmRleCwgbV9vdXQuaW50UHRyT25lKTsKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbV9vdXQubG9hZDY0KAotICAgICAgICAgICAgbV9vdXQuYmFzZUlu
ZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMudmFyaWFibGVzLCBzb3VyY2VTdGFydCwKLSAg
ICAgICAgICAgICAgICBtX291dC5hZGQoY3VycmVudEluZGV4LCBtX291dC5jb25zdEludFB0cihk
YXRhLT5vZmZzZXQpKSkpOwotICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBtX291dC5iYXNl
SW5kZXgobV9oZWFwcy52YXJpYWJsZXMsIHRhcmdldFN0YXJ0LCBjdXJyZW50SW5kZXgpKTsKLSAg
ICAgICAgbmV4dEluZGV4ID0gbV9vdXQuYW5jaG9yKGN1cnJlbnRJbmRleCk7Ci0gICAgICAgIG1f
b3V0LmFkZEluY29taW5nVG9QaGkocHJldmlvdXNJbmRleCwgbmV4dEluZGV4KTsKLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChjdXJyZW50SW5kZXgpLCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKG1haW5Mb29wKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVKdW1w
KCkKLSAgICB7Ci0gICAgICAgIG1fb3V0Lmp1bXAobG93QmxvY2sobV9ub2RlLT50YXJnZXRCbG9j
aygpKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUJyYW5jaCgpCi0gICAgewotICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBib29saWZ5KG1fbm9kZS0+Y2hpbGQxKCkp
LAotICAgICAgICAgICAgV2VpZ2h0ZWRUYXJnZXQoCi0gICAgICAgICAgICAgICAgbG93QmxvY2so
bV9ub2RlLT5icmFuY2hEYXRhKCktPnRha2VuLmJsb2NrKSwKLSAgICAgICAgICAgICAgICBtX25v
ZGUtPmJyYW5jaERhdGEoKS0+dGFrZW4uY291bnQpLAotICAgICAgICAgICAgV2VpZ2h0ZWRUYXJn
ZXQoCi0gICAgICAgICAgICAgICAgbG93QmxvY2sobV9ub2RlLT5icmFuY2hEYXRhKCktPm5vdFRh
a2VuLmJsb2NrKSwKLSAgICAgICAgICAgICAgICBtX25vZGUtPmJyYW5jaERhdGEoKS0+bm90VGFr
ZW4uY291bnQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlU3dpdGNoKCkKLSAgICB7
Ci0gICAgICAgIFN3aXRjaERhdGEqIGRhdGEgPSBtX25vZGUtPnN3aXRjaERhdGEoKTsKLSAgICAg
ICAgc3dpdGNoIChkYXRhLT5raW5kKSB7Ci0gICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7Ci0gICAg
ICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGludFZhbHVlczsKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHN3aXRjaE9uSW50cyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaEltbSBpbnQgY2FzZSIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhtX291dC5tX2Jsb2NrLCBzd2l0Y2hPbklu
dHMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEludDMyVXNlOiB7Ci0gICAgICAgICAgICAg
ICAgaW50VmFsdWVzLmFwcGVuZChtX291dC5hbmNob3IobG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKHN3aXRjaE9uSW50cyk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc0lu
dCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaEltbSBpcyBpbnQiKSk7Ci0g
ICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnQgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN3aXRjaC9Td2l0Y2hJbW0gaXMgbm90IGludCIpKTsKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpc0RvdWJsZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaElt
bSBpcyBkb3VibGUiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVl
IGJveGVkVmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGJveGVkVmFsdWUpLCB1bnN1cmUoaXNOb3RJbnQp
LCB1bnN1cmUoaXNJbnQpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbm5lckxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbnQsIGlzTm90SW50KTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnRWYWx1ZXMuYXBwZW5kKG1fb3V0
LmFuY2hvcih1bmJveEludDMyKGJveGVkVmFsdWUpKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
anVtcChzd2l0Y2hPbkludHMpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzTm90SW50LCBpc0RvdWJsZSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgICAgICAgICBpc0NlbGxPck1pc2MoYm94ZWRWYWx1ZSwgcHJv
dmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVzdWFsbHko
bG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgcmFyZWx5KGlzRG91YmxlKSk7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNEb3VibGUs
IGlubmVyTGFzdE5leHQpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVu
Ym94RG91YmxlKGJveGVkVmFsdWUpOwotICAgICAgICAgICAgICAgIExWYWx1ZSBpbnRJbkRvdWJs
ZSA9IG1fb3V0LmRvdWJsZVRvSW50KGRvdWJsZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBpbnRW
YWx1ZXMuYXBwZW5kKG1fb3V0LmFuY2hvcihpbnRJbkRvdWJsZSkpOwotICAgICAgICAgICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlRXF1YWwobV9v
dXQuaW50VG9Eb3VibGUoaW50SW5Eb3VibGUpLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAg
ICAgICAgIHVuc3VyZShzd2l0Y2hPbkludHMpLCB1bnN1cmUobG93QmxvY2soZGF0YS0+ZmFsbFRo
cm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc3dpdGNoT25JbnRzLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBidWlsZFN3aXRj
aChkYXRhLCBtX291dC5pbnQzMiwgbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbnRWYWx1ZXMpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBT
d2l0Y2hDaGFyOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RyaW5nVmFsdWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgdXNlIHNvbWV0aGluZyBvdGhlciB0
aGFuIHVuc3VyZSgpIGZvciB0aGUgYnJhbmNoIHdlaWdodAotICAgICAgICAgICAgLy8gb2YgdGhl
IGZhbGxUaHJvdWdoIGJsb2NrLiBUaGUgbWFpbiBjaGFsbGVuZ2UgaXMganVzdCB0aGF0IHdlIGhh
dmUgbXVsdGlwbGUKLSAgICAgICAgICAgIC8vIGJyYW5jaGVzIHRvIGZhbGxUaHJvdWdoIGJ1dCBh
IHNpbmdsZSBjb3VudCwgc28gd2Ugd291bGQgbmVlZCB0byBkaXZ2eSBpdCB1cAotICAgICAgICAg
ICAgLy8gYW1vbmcgdGhlIGRpZmZlcmVudCBsb3dlcmVkIGJyYW5jaGVzLgotICAgICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTA4MgotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
Ci0gICAgICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgICAgIHN0cmluZ1Zh
bHVlID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBVbnR5
cGVkVXNlOiB7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIHVuYm94ZWRWYWx1ZSA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3
aXRjaENoYXIgaXMgY2VsbCIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmlu
Z0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGlzIHN0cmlu
ZyIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIGlzTm90Q2VsbCh1bmJveGVkVmFsdWUsIHByb3ZlblR5cGUobV9u
b2RlLT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUobG93QmxvY2soZGF0
YS0+ZmFsbFRocm91Z2guYmxvY2spKSwgdW5zdXJlKGlzQ2VsbENhc2UpKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7Ci0gICAgICAgICAgICAgICAgTFZhbHVlIGNl
bGxWYWx1ZSA9IHVuYm94ZWRWYWx1ZTsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0g
ICAgICAgICAgICAgICAgICAgIGlzTm90U3RyaW5nKGNlbGxWYWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICAgICAgICAgIHVuc3VyZShsb3dCbG9jayhkYXRh
LT5mYWxsVGhyb3VnaC5ibG9jaykpLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICAgICAgc3RyaW5nVmFsdWUgPSBjZWxsVmFsdWU7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGVuZ3RoSXMxID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciBsZW5ndGggaXMgMSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIG5lZWRSZXNvbHV0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTd2l0Y2gvU3dpdGNoQ2hhciByZXNvbHV0aW9uIikpOwotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgcmVzb2x2ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIHJl
c29sdmVkIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaXM4Qml0ID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoQ2hhciA4Yml0IikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaXMxNkJpdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaENoYXIg
MTZiaXQiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hDaGFyIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShz
dHJpbmdWYWx1ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpLAotICAgICAgICAgICAgICAgICAg
ICBtX291dC5pbnQzMk9uZSksCi0gICAgICAgICAgICAgICAgdW5zdXJlKGxvd0Jsb2NrKGRhdGEt
PmZhbGxUaHJvdWdoLmJsb2NrKSksIHVuc3VyZShsZW5ndGhJczEpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZW5ndGhJ
czEsIG5lZWRSZXNvbHV0aW9uKTsKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywg
Mj4gdmFsdWVzOwotICAgICAgICAgICAgTFZhbHVlIGZhc3RWYWx1ZSA9IG1fb3V0LmxvYWRQdHIo
c3RyaW5nVmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOwotICAgICAgICAgICAgdmFsdWVz
LmFwcGVuZChtX291dC5hbmNob3IoZmFzdFZhbHVlKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuaXNOdWxsKGZhc3RWYWx1ZSksIHJhcmVseShuZWVkUmVzb2x1dGlvbiksIHVzdWFs
bHkocmVzb2x2ZWQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bmVlZFJlc29sdXRpb24sIHJlc29sdmVkKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnRQdHIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25SZXNvbHZlUm9wZSksIG1fY2FsbEZyYW1lLCBzdHJpbmdWYWx1ZSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAocmVzb2x2ZWQpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhyZXNvbHZlZCwgaXM4Qml0KTsKLSAgICAgICAgICAgIExW
YWx1ZSB2YWx1ZSA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHZhbHVlcyk7Ci0gICAgICAgICAg
ICBMVmFsdWUgY2hhcmFjdGVyRGF0YSA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuU3Ry
aW5nSW1wbF9kYXRhKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAg
ICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIo
dmFsdWUsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpLAotICAgICAg
ICAgICAgICAgIHVuc3VyZShpczhCaXQpLCB1bnN1cmUoaXMxNkJpdCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDI+IGNoYXJhY3RlcnM7Ci0gICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXQsIGlzMTZCaXQpOwotICAgICAgICAgICAgY2hh
cmFjdGVycy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNoYXJhY3Rl
ckRhdGEsIG1faGVhcHMuY2hhcmFjdGVyczhbMF0pKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGlzMTZCaXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZCht
X291dC5hbmNob3IobV9vdXQubG9hZDE2WmVyb0V4dDMyKGNoYXJhY3RlckRhdGEsIG1faGVhcHMu
Y2hhcmFjdGVyczE2WzBdKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgICAgIGJ1aWxkU3dpdGNoKGRhdGEsIG1fb3V0LmludDMyLCBt
X291dC5waGkobV9vdXQuaW50MzIsIGNoYXJhY3RlcnMpKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKLSAgICAg
ICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgU3RyaW5nSWRlbnRVc2U6IHsKLSAgICAgICAgICAgICAgICBMVmFsdWUgc3RyaW5nSW1w
bCA9IGxvd1N0cmluZ0lkZW50KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+
Y2FzZXNbaV0udmFsdWUuc3RyaW5nSW1wbCgpKTsKLSAgICAgICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgYmxvY2sgPSBsb3dCbG9jayhkYXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spOwotICAg
ICAgICAgICAgICAgICAgICBXZWlnaHQgd2VpZ2h0ID0gV2VpZ2h0KGRhdGEtPmNhc2VzW2ldLnRh
cmdldC5jb3VudCk7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNl
KHZhbHVlLCBibG9jaywgd2VpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAotICAgICAgICAg
ICAgICAgICAgICBzdHJpbmdJbXBsLCBjYXNlcywgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2gu
YmxvY2spLAotICAgICAgICAgICAgICAgICAgICBXZWlnaHQoZGF0YS0+ZmFsbFRocm91Z2guY291
bnQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cmluZ1VzZTogewotICAgICAgICAgICAgICAgIHN3
aXRjaFN0cmluZyhkYXRhLCBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGNhc2UgVW50eXBlZFVzZTogewotICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3
aXRjaC9Td2l0Y2hTdHJpbmcgVW50eXBlZCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAg
TEJhc2ljQmxvY2sgaXNTdHJpbmdCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dpdGNo
L1N3aXRjaFN0cmluZyBVbnR5cGVkIHN0cmluZyBjYXNlIikpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICAgICAgaXNDZWxs
KHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAgICAgICAgICAgICAgICAg
ICAgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKGxvd0Jsb2NrKGRhdGEtPmZhbGxUaHJvdWdo
LmJsb2NrKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2ssIGlzU3RyaW5nQmxvY2spOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkp
LAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoaXNTdHJpbmdCbG9jayksIHVuc3VyZShsb3dC
bG9jayhkYXRhLT5mYWxsVGhyb3VnaC5ibG9jaykpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Jsb2NrLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoU3RyaW5nKGRhdGEsIHZhbHVlKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFN3aXRjaENlbGw6IHsKLSAgICAgICAgICAgIExWYWx1ZSBjZWxsOwotICAg
ICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewotICAgICAgICAg
ICAgY2FzZSBDZWxsVXNlOiB7Ci0gICAgICAgICAgICAgICAgY2VsbCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
d2l0Y2gvU3dpdGNoQ2VsbCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgICAgICAgICB1bnN1cmUoY2VsbENhc2UpLCB1bnN1
cmUobG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spKSk7Ci0gICAgICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY2VsbENhc2UpOwotICAgICAgICAgICAgICAgIGNlbGwgPSB2YWx1ZTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgYnVpbGRTd2l0Y2gobV9ub2RlLT5z
d2l0Y2hEYXRhKCksIG1fb3V0LmludFB0ciwgY2VsbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0gfQotICAgICAgICAKLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBzd2l0Y2gga2luZCIpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVSZXR1cm4o
KQotICAgIHsKLSAgICAgICAgbV9vdXQucmV0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVGb3JjZU9TUkV4aXQoKQotICAgIHsKLSAg
ICAgICAgdGVybWluYXRlKEluYWRlcXVhdGVDb3ZlcmFnZSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgY29tcGlsZVRocm93KCkKLSAgICB7Ci0gICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUludmFsaWRhdGlvblBvaW50KCkKLSAgICB7
Ci0gICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgICAgICBk
YXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFp
bGFiaWxpdHlNYXAoKSwgIlxuIik7Ci0KLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIG1fb3JpZ2luLmV4aXRPSyk7Ci0gICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOwotICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciogZGVzY3JpcHRvciA9IGFwcGVuZE9TUkV4aXREZXNjcmlwdG9yKG5vVmFsdWUoKSwg
bnVsbHB0cik7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47Ci0gICAgICAg
IHBhdGNocG9pbnQtPmFwcGVuZENvbGRBbnlzKGJ1aWxkRXhpdEFyZ3VtZW50cyhkZXNjcmlwdG9y
LCBvcmlnaW4uZm9yRXhpdCwgbm9WYWx1ZSgpKSk7Ci0gICAgICAgIAotICAgICAgICBTdGF0ZSog
c3RhdGUgPSAmbV9mdGxTdGF0ZTsKLQotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
Ci0gICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBCMzo6U3RhY2ttYXBH
ZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGUgTWFjcm9B
c3NlbWJsZXIga25vd3MgbW9yZSBhYm91dCB0aGlzIHRoYW4gQjMgZG9lcy4gVGhlIHdhdGNocG9p
bnRMYWJlbCgpIG1ldGhvZAotICAgICAgICAgICAgICAgIC8vIHdpbGwgZW5zdXJlIHRoYXQgdGhp
cyBpcyBmb2xsb3dlZCBieSBhIG5vcCBzaGFkb3cgYnV0IG9ubHkgd2hlbiB0aGlzIGlzIGFjdHVh
bGx5Ci0gICAgICAgICAgICAgICAgLy8gbmVjZXNzYXJ5LgotICAgICAgICAgICAgICAgIENDYWxs
SGVscGVyczo6TGFiZWwgbGFiZWwgPSBqaXQud2F0Y2hwb2ludExhYmVsKCk7Ci0KLSAgICAgICAg
ICAgICAgICBSZWZQdHI8T1NSRXhpdEhhbmRsZT4gaGFuZGxlID0gZGVzY3JpcHRvci0+ZW1pdE9T
UkV4aXRMYXRlcigKLSAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBVbmNvdW50YWJsZUludmFs
aWRhdGlvbiwgb3JpZ2luLCBwYXJhbXMpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpJVENv
ZGU+IGppdENvZGUgPSBzdGF0ZS0+aml0Q29kZS5nZXQoKTsKLQotICAgICAgICAgICAgICAgIGpp
dC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKdW1wUmVwbGFjZW1lbnQganVtcFJl
cGxhY2VtZW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRp
b25PZihsYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGhhbmRsZS0+bGFiZWwpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUt
PmNvbW1vbi5qdW1wUmVwbGFjZW1lbnRzLmFwcGVuZChqdW1wUmVwbGFjZW1lbnQpOwotICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIC8vIFNldCBzb21l
IG9idmlvdXMgdGhpbmdzLgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFsID0g
ZmFsc2U7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IGZh
bHNlOwotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzTG9jYWxTdGF0ZSA9IGZhbHNl
OwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyBpcyBob3cgd2UgdGVsbCBCMyBhYm91dCB0aGUg
cG9zc2liaWxpdHkgb2YganVtcCByZXBsYWNlbWVudC4KLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZm
ZWN0cy5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEl0J3Mgbm90
IHBvc3NpYmxlIGZvciBzb21lIHByaW9yIGJyYW5jaCB0byBkZXRlcm1pbmUgdGhlIHNhZmV0eSBv
ZiB0aGlzIG9wZXJhdGlvbi4gSXQncyBhbHdheXMKLSAgICAgICAgLy8gZmluZSB0byBleGVjdXRl
IHRoaXMgb24gc29tZSBwYXRoIHRoYXQgd291bGRuJ3QgaGF2ZSBvcmlnaW5hbGx5IGV4ZWN1dGVk
IGl0IGJlZm9yZQotICAgICAgICAvLyBvcHRpbWl6YXRpb24uCi0gICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMuY29udHJvbERlcGVuZGVudCA9IGZhbHNlOwotCi0gICAgICAgIC8vIElmIHRoaXMg
ZmFsbHMgdGhyb3VnaCB0aGVuIGl0IHdvbid0IHdyaXRlIGFueXRoaW5nLgotICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLndyaXRlcyA9IEhlYXBSYW5nZSgpOwotCi0gICAgICAgIC8vIFdoZW4g
dGhpcyBhYnJ1cHRseSB0ZXJtaW5hdGVzLCBpdCBjb3VsZCByZWFkIGFueSBoZWFwIGxvY2F0aW9u
LgotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlSXNVbmRlZmluZWQoKQotICAgIHsKLSAgICAg
ICAgc2V0Qm9vbGVhbihlcXVhbE51bGxPclVuZGVmaW5lZChtX25vZGUtPmNoaWxkMSgpLCBBbGxD
ZWxsc0FyZUZhbHNlLCBFcXVhbFVuZGVmaW5lZCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVJc0Jvb2xlYW4oKQotICAgIHsKLSAgICAgICAgc2V0Qm9vbGVhbihpc0Jvb2xlYW4obG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJc051bWJlcigpCi0gICAgewotICAgICAg
ICBzZXRCb29sZWFuKGlzTnVtYmVyKGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIHByb3Zl
blR5cGUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxl
SXNTdHJpbmcoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzU3RyaW5nIGNlbGwgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc1N0cmlu
ZyBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwot
ICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhp
c0NlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBjZWxsUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGlzU3RyaW5nKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hp
bGQxKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVz
dWx0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSXNPYmplY3QoKQotICAgIHsKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLQotICAgICAg
ICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVj
dCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3QgY29udGludWF0aW9uIikpOwotCi0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZh
bHNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUo
Y29udGludWF0aW9uKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhpc0NlbGxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJl
c3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKLSAgICB7
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIAotICAgICAgICBFZGdl
IGNoaWxkID0gbV9ub2RlLT5jaGlsZDEoKTsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShjaGlsZCk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY2VsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBub3RGdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklz
T2JqZWN0T3JOdWxsIG5vdCBmdW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBv
YmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc09iamVjdE9yTnVsbCBvYmplY3Qg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIklzT2JqZWN0T3JOdWxsIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIklzT2JqZWN0T3JOdWxsIG5vdCBj
ZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSXNPYmplY3RPck51bGwgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1
bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbENhc2UpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5vdEZ1bmN0
aW9uQ2FzZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGlzRnVuY3Rpb25SZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgaXNGdW5jdGlvbih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAotICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RGdW5jdGlvbkNhc2UpKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgb2JqZWN0Q2FzZSk7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdE9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ib29sZWFuRmFsc2UpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBp
c09iamVjdCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLAotICAgICAgICAgICAgdW5zdXJlKG9i
amVjdENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBtX291
dC5hcHBlbmRUbyhvYmplY3RDYXNlLCBzbG93UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG9iamVjdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhvdGljRm9yVHlwZW9mKHZhbHVlLCBwcm92
ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgs
IG5vdENlbGxDYXNlKTsKLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk9iamVjdElzT2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCi0gICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2Nh
dGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgfSwgdmFsdWUpOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdFplcm82NChz
bG93UmVzdWx0VmFsdWUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIExWYWx1ZSBub3RDZWxsUmVzdWx0VmFsdWUgPSBtX291dC5lcXVhbCh2YWx1ZSwg
bV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3Iobm90Q2VsbFJlc3VsdFZh
bHVlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkoCi0gICAgICAgICAgICBtX291dC5ib29sZWFuLAotICAgICAg
ICAgICAgaXNGdW5jdGlvblJlc3VsdCwgbm90T2JqZWN0UmVzdWx0LCBvYmplY3RSZXN1bHQsIHNs
b3dSZXN1bHQsIG5vdENlbGxSZXN1bHQpOwotICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZUlzRnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgY2hpbGQgPSBt
X25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGNoaWxk
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJJc0Z1bmN0aW9uIGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bm90RnVuY3Rpb25DYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJc0Z1bmN0aW9uIG5vdCBm
dW5jdGlvbiBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSXNGdW5jdGlvbiBjb250
aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJy
YW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkpLCB1bnN1
cmUoY2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBub3RGdW5jdGlv
bkNhc2UpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmdW5jdGlvblJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwKLSAgICAgICAgICAgIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90RnVuY3Rpb25DYXNlKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RGdW5jdGlvbkNhc2UsIHNsb3dQYXRoKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb2JqZWN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xl
YW5GYWxzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhvdGljRm9y
VHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksCi0gICAgICAgICAgICByYXJlbHkoc2xv
d1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25PYmplY3RJc0Z1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAg
fSwgdmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0Lm5vdE51bGwoc2xvd1Jlc3VsdFZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKAotICAg
ICAgICAgICAgbV9vdXQuYm9vbGVhbiwgbm90Q2VsbFJlc3VsdCwgZnVuY3Rpb25SZXN1bHQsIG9i
amVjdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVHlwZU9mKCkKLSAgICB7Ci0gICAgICAgIEVkZ2Ug
Y2hpbGQgPSBtX25vZGUtPmNoaWxkMSgpOwotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKGNoaWxkKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVHlwZU9mIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaz4gcmVzdWx0
czsKLSAgICAgICAgCi0gICAgICAgIGJ1aWxkVHlwZU9mKAotICAgICAgICAgICAgY2hpbGQsIHZh
bHVlLAotICAgICAgICAgICAgWyZdIChUeXBlb2ZUeXBlIHR5cGUpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iod2Vha1BvaW50ZXIodm0oKS5zbWFsbFN0cmlu
Z3MudHlwZVN0cmluZyh0eXBlKSkpKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShtX291dC5pbnQ2NCwgcmVzdWx0cykpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVJ
bigpCi0gICAgewotICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICBFZGdlIGJh
c2UgPSBub2RlLT5jaGlsZDIoKTsKLSAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKGJhc2Up
OwotICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWlj
Q2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkgewotICAgICAgICAgICAgaWYgKHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkg
ewotICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBzdHIgPSBiaXR3aXNlX2Nhc3Q8
VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpKTsKLSAgICAgICAg
ICAgICAgICBCMzo6UGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2lu
dChJbnQ2NCk7Ci0gICAgICAgICAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGNlbGwpOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6
Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAgICAgICAgICAgICAgIFN0YXRlKiBzdGF0
ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICAgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBwYXJhbXNbMV0uZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcGFyYW1zWzBdLmdwcigp
OwotCi0gICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8g
PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5jb2RlQmxvY2soKS0+YWRkU3R1Yklu
Zm8oQWNjZXNzVHlwZTo6SW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPmNh
bGxTaXRlSW5kZXggPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPmNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50
aWM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guYmFzZUdQUiA9IHN0
YXRpY19jYXN0PGludDhfdD4oYmFzZUdQUik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdHVi
SW5mby0+cGF0Y2gudmFsdWVHUFIgPSBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUik7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2gudXNlZFJlZ2lzdGVycyA9IHBh
cmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlBhdGNoYWJsZUp1bXAganVtcCA9IGppdC5wYXRjaGFibGVKdW1wKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVsIGRvbmUgPSBqaXQubGFi
ZWwoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdl
IGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGp1
bXAubV9qdW1wLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6TGFiZWwgc2xvd1BhdGhCZWdpbiA9IGppdC5sYWJlbCgpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0
ZSwgcGFyYW1zLnVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksIGppdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgbnVsbHB0ciwgb3BlcmF0
aW9uSW5PcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dEdQUiwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgYmFzZUdQUiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihzdHIpKS5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC5q
dW1wKCkubGlua1RvKGRvbmUsICZqaXQpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGppdC5hZGRMaW5rVGFzaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKHNsb3dQYXRoQ2FsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSA9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6ZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbFJldHVybkxvY2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGRvbmUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9K
dW1wID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsUmV0dXJuTG9jYXRpb24sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoanVtcCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRv
U2xvd0Nhc2UgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OmRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cigKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxSZXR1cm5Mb2NhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9j
YXRpb25PZihzbG93UGF0aEJlZ2luKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAKLQotICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkdlbmVyaWNJbiksIG1fY2FsbEZyYW1lLCBjZWxsLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlT3ZlcnJpZGVzSGFzSW5zdGFuY2UoKQot
ICAgIHsKLSAgICAgICAgSlNGdW5jdGlvbiogZGVmYXVsdEhhc0luc3RhbmNlRnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0KLSAg
ICAgICAgTFZhbHVlIGNvbnN0cnVjdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICAgICAgTFZhbHVlIGhhc0luc3RhbmNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBkZWZhdWx0SGFzSW5zdGFuY2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNlIFN5bWJvbC5oYXNJbnN0YW5jZSBpcyBkZWZh
dWx0IikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIk92ZXJyaWRlc0hhc0luc3RhbmNlIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAg
ICAvLyBVbmxpa2UgaW4gdGhlIERGRywgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgY2xlYW5pbmcgdGhp
cyBjb2RlIHVwIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHByb3ZlbiB0aGUgaGFzSW5zdGFu
Y2VWYWx1ZSBpcyBhIGNvbnN0YW50IGFzIExMVk0gc2hvdWxkIGZpeCBpdCBmb3IgdXMuCi0KLSAg
ICAgICAgQVNTRVJUKCFtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+aXNDZWxsQ29uc3RhbnQoKSB8
fCBkZWZhdWx0SGFzSW5zdGFuY2VGdW5jdGlvbiA9PSBtX25vZGUtPmNoaWxkMigpLm5vZGUoKS0+
YXNDZWxsKCkpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdERlZmF1bHRIYXNJbnN0YW5j
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3RFcXVhbChoYXNJbnN0YW5jZSwgbV9vdXQuY29uc3RJbnRQdHIoZGVm
YXVsdEhhc0luc3RhbmNlRnVuY3Rpb24pKSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShk
ZWZhdWx0SGFzSW5zdGFuY2UpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGRlZmF1bHRIYXNJbnN0YW5jZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICBtX291dC5sb2FkOFplcm9F
eHQzMihjb25zdHJ1Y3RvciwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGko
bV9vdXQuYm9vbGVhbiwgaW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZVJlc3VsdCwgbm90RGVm
YXVsdEhhc0luc3RhbmNlUmVzdWx0KSk7Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlQ2hlY2tU
eXBlSW5mb0ZsYWdzKCkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJh
ZFR5cGVJbmZvRmxhZ3MsIG5vVmFsdWUoKSwgMCwKLSAgICAgICAgICAgIG1fb3V0LnRlc3RJc1pl
cm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMihsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDMyKG1fbm9kZS0+dHlwZUluZm9PcGVyYW5kKCkpKSk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2YoKQotICAgIHsKLSAgICAgICAgTFZh
bHVlIGNlbGw7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSkKLSAgICAgICAgICAgIGNlbGwgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjZWxsID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBwcm90b3R5cGUgPSBsb3dD
ZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSW5zdGFuY2VPZiBjZWxsIGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxvb3AgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkluc3Rh
bmNlT2YgbG9vcCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90WWV0SW5zdGFuY2UgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIkluc3RhbmNlT2Ygbm90IHlldCBpbnN0YW5jZSIpKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJJbnN0
YW5jZU9mIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBjb25kaXRp
b247Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KQotICAgICAgICAgICAgY29uZGl0aW9uID0gaXNDZWxsKGNlbGwsIHByb3ZlblR5cGUobV9ub2Rl
LT5jaGlsZDEoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25kaXRpb24gPSBtX291
dC5ib29sZWFuVHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKGNvbmRpdGlvbiwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9u
KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGxvb3ApOwotICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIG5vVmFsdWUoKSwgMCwgaXNOb3RPYmplY3QocHJvdG90eXBlLCBwcm92ZW5UeXBlKG1fbm9k
ZS0+Y2hpbGQyKCkpKSk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBvcmlnaW5h
bFZhbHVlID0gbV9vdXQuYW5jaG9yKGNlbGwpOwotICAgICAgICBtX291dC5qdW1wKGxvb3ApOwot
ICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcCwgbm90WWV0SW5zdGFuY2UpOwot
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBtX291dC5waGkobV9vdXQuaW50NjQsIG9yaWdpbmFsVmFs
dWUpOwotICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZSh2YWx1ZSk7Ci0g
ICAgICAgIExWYWx1ZSBjdXJyZW50UHJvdG90eXBlID0gbV9vdXQubG9hZDY0KHN0cnVjdHVyZSwg
bV9oZWFwcy5TdHJ1Y3R1cmVfcHJvdG90eXBlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaXNJ
bnN0YW5jZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKGN1cnJlbnRQcm90b3R5cGUs
IHByb3RvdHlwZSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5v
dFlldEluc3RhbmNlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RZZXRJ
bnN0YW5jZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90SW5zdGFu
Y2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9v
dXQuYWRkSW5jb21pbmdUb1BoaSh2YWx1ZSwgbV9vdXQuYW5jaG9yKGN1cnJlbnRQcm90b3R5cGUp
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChjdXJyZW50UHJvdG90eXBlKSwgdW5zdXJl
KGxvb3ApLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbigKLSAg
ICAgICAgICAgIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBub3RDZWxsUmVzdWx0LCBpc0luc3Rh
bmNlUmVzdWx0LCBub3RJbnN0YW5jZVJlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUluc3RhbmNlT2ZDdXN0b20oKQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGNvbnN0cnVjdG9yID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgTFZhbHVlIGhhc0luc3RhbmNlID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lmxv
Z2ljYWxOb3QobV9vdXQuZXF1YWwobV9vdXQuY29uc3RJbnQzMigwKSwgdm1DYWxsKG1fb3V0Lmlu
dDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSksIG1fY2FsbEZy
YW1lLCB2YWx1ZSwgY29uc3RydWN0b3IsIGhhc0luc3RhbmNlKSkpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBjb21waWxlQ291bnRFeGVjdXRpb24oKQotICAgIHsKLSAgICAgICAgVHlwZWRQb2lu
dGVyIGNvdW50ZXIgPSBtX291dC5hYnNvbHV0ZShtX25vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKS0+
YWRkcmVzcygpKTsKLSAgICAgICAgbV9vdXQuc3RvcmU2NChtX291dC5hZGQobV9vdXQubG9hZDY0
KGNvdW50ZXIpLCBtX291dC5jb25zdEludDY0KDEpKSwgY291bnRlcik7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgY29tcGlsZVN0b3JlQmFycmllcigpCi0gICAgewotICAgICAgICBlbWl0U3RvcmVC
YXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCi0gICAgewotICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93
U3RvcmFnZShtX25vZGUtPmNoaWxkMygpKTsKLQotICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0
SGVhcCYgaGVhcCA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/
Ci0gICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFw
cy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7Ci0KLSAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNoZWNrSG9sZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGlu
dC9jb250aWd1b3VzIGNoZWNrIGhvbGUiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGludC9jb250
aWd1b3VzIHNsb3cgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGludC9jb250aWd1
b3VzIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXgsIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVy
Zmx5X3B1YmxpY0xlbmd0aCkpLAotICAgICAgICAgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2Up
LCB1c3VhbGx5KGNoZWNrSG9sZSkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjaGVja0hvbGUpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrSG9sZSwgc2xvd0Nhc2UpOwotICAgICAgICAgICAg
TFZhbHVlIGNoZWNrSG9sZVJlc3VsdFZhbHVlID0KLSAgICAgICAgICAgICAgICBtX291dC5ub3Ra
ZXJvNjQobV9vdXQubG9hZDY0KGJhc2VJbmRleChoZWFwLCBzdG9yYWdlLCBpbmRleCwgbV9ub2Rl
LT5jaGlsZDIoKSkpKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNoZWNrSG9sZVJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihjaGVja0hvbGVSZXN1bHRWYWx1ZSk7Ci0gICAgICAgICAgICBtX291
dC5icmFuY2goY2hlY2tIb2xlUmVzdWx0VmFsdWUsIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dDYXNlKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBj
b250aW51YXRpb24pOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIGluZGV4KSkpOwotICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJv
b2xlYW4sIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBMVmFs
dWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDMoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWRE
b3VibGVQcm9wZXJ0aWVzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBj
aGVja0hvbGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc0luZGV4ZWRQcm9wZXJ0eSBkb3Vi
bGUgY2hlY2sgaG9sZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJIYXNJbmRleGVkUHJvcGVydHkgZG91YmxlIHNsb3cgY2FzZSIp
KTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiSGFzSW5kZXhlZFByb3BlcnR5IGRvdWJsZSBjb250aW51YXRpb24iKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKLSAgICAgICAgICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAg
IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291
dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpKSwKLSAgICAgICAgICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVj
a0hvbGUpKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y2hlY2tIb2xlKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhjaGVja0hvbGUsIHNsb3dDYXNlKTsKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVW
YWx1ZSA9IG1fb3V0LmxvYWREb3VibGUoYmFzZUluZGV4KGhlYXAsIHN0b3JhZ2UsIGluZGV4LCBt
X25vZGUtPmNoaWxkMigpKSk7Ci0gICAgICAgICAgICBMVmFsdWUgY2hlY2tIb2xlUmVzdWx0VmFs
dWUgPSBtX291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUpOwotICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgY2hlY2tIb2xlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNoZWNr
SG9sZVJlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChjaGVja0hvbGVSZXN1
bHRWYWx1ZSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd0Nhc2UpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKLSAgICAgICAgICAgICAgICB2bUNhbGwobV9vdXQu
aW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpLCBtX2Nh
bGxGcmFtZSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQu
Ym9vbGVhbiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUhhc0dlbmVyaWNQcm9wZXJ0eSgpCi0g
ICAgewotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0g
ICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uSGFzR2VuZXJpY1Byb3BlcnR5KSwgbV9jYWxsRnJhbWUsIGJhc2UsIHByb3BlcnR5KSk7
Ci0gICAgfQotCi0gICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHkoKQotICAgIHsK
LSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAg
ICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKLQotICAg
ICAgICBMQmFzaWNCbG9jayBjb3JyZWN0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSBjb3JyZWN0IHN0cnVjdHVyZSIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgd3JvbmdTdHJ1Y3R1cmUgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkhhc1N0cnVj
dHVyZVByb3BlcnR5IHdyb25nIHN0cnVjdHVyZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJIYXNTdHJ1Y3R1cmVQcm9wZXJ0eSBj
b250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAot
ICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlE
KSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5
KHdyb25nU3RydWN0dXJlKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7Ci0KLSAgICAgICAg
TEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjb3JyZWN0U3RydWN0dXJlLCB3
cm9uZ1N0cnVjdHVyZSk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvcnJlY3RTdHJ1Y3R1cmVS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8od3JvbmdTdHJ1Y3R1
cmUsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHdyb25nU3RydWN0dXJl
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUp
KSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChtX291dC5pbnQ2NCwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkhhc0dlbmVyaWNQcm9wZXJ0eSksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9wZXJ0
eSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShtX291dC5ib29sZWFuLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCB3cm9uZ1N0cnVj
dHVyZVJlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldERpcmVjdFBuYW1lKCkK
LSAgICB7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwotCi0gICAgICAg
IExCYXNpY0Jsb2NrIGNoZWNrT2Zmc2V0ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXREaXJl
Y3RQbmFtZSBjaGVjayBvZmZzZXQiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIGlubGluZSBsb2FkIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJHZXREaXJlY3RQbmFtZSBvdXQtb2YtbGluZSBsb2FkIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBzbG93Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RGlyZWN0UG5hbWUgc2xvdyBj
YXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkdldERpcmVjdFBuYW1lIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVy
ZUlEKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNoZWNrT2Zmc2V0
KSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVj
a09mZnNldCwgaW5saW5lTG9hZCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZU9y
RXF1YWwoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpLAotICAgICAgICAgICAgdW5zdXJl
KG91dE9mTGluZUxvYWQpLCB1bnN1cmUoaW5saW5lTG9hZCkpOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlubGluZUxvYWQsIG91dE9mTGluZUxvYWQpOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBpbmxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkNjQo
bV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCAKLSAgICAg
ICAgICAgICAgICBiYXNlLCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnQ2NCksIFNjYWxl
RWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSkpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mTGlu
ZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb2FkQnV0dGVyZmx5
UmVhZE9ubHkoYmFzZSk7Ci0gICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0
MzJUbzY0KAotICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgbV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElu
bGluZUNhcGFjaXR5KSkpKTsKLSAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
b3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0
KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgc3RvcmFn
ZSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpKSk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0Nhc2VS
ZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICB2bUNhbGwobV9vdXQuaW50NjQsIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCksIG1fY2FsbEZyYW1lLCBiYXNlLCBwcm9w
ZXJ0eSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKG1fb3V0LmludDY0LCBpbmxpbmVSZXN1bHQsIG91dE9mTGluZVJlc3VsdCwgc2xv
d0Nhc2VSZXN1bHQpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVu
Z3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwobV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm9wZXJ0
eUVudW1lcmF0b3IpLCBtX2NhbGxGcmFtZSwgYmFzZSkpOwotICAgIH0KLQotICAgIHZvaWQgY29t
cGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUg
ZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGluQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWUgaW4gYm91bmRzIikpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIG91dCBvZiBi
b3VuZHMiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIGNvbnRpbnVhdGlvbiIpKTsK
LQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3coaW5kZXgsIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91
dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1f
b3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91
bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291
dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KFZhbHVl
TnVsbCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5waGkobV9vdXQuaW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5k
c1Jlc3VsdCkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSBpbiBib3VuZHMiKSk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJHZXRFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lIG91dCBvZiBib3VuZHMiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJl
bG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSwKLSAgICAgICAgICAgIHVzdWFs
bHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsKLQotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAg
ICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAg
ICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1f
b3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShtX291dC5pbnQ2NCwgaW5C
b3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
Y29tcGlsZVRvSW5kZXhTdHJpbmcoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKG1fb3V0
LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRleFN0cmluZyksIG1fY2FsbEZy
YW1lLCBpbmRleCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVDaGVja1N0cnVjdHVy
ZUltbWVkaWF0ZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgY2hlY2tTdHJ1Y3R1cmUoCi0gICAgICAgICAgICBz
dHJ1Y3R1cmUsIG5vVmFsdWUoKSwgQmFkQ2FjaGUsIG1fbm9kZS0+c3RydWN0dXJlU2V0KCksCi0g
ICAgICAgICAgICBbdGhpc10gKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYWtTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKLSAgICAgICAgICAgIH0pOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVNYXRlcmlhbGl6ZU5ld09iamVjdCgpCi0gICAgewot
ICAgICAgICBPYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5vYmplY3RN
YXRlcmlhbGl6YXRpb25EYXRhKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBMb3dlciB0aGUgdmFs
dWVzIGZpcnN0LCB0byBhdm9pZCBjcmVhdGluZyB2YWx1ZXMgaW5zaWRlIGEgY29udHJvbCBmbG93
IGRpYW1vbmQuCi0gICAgICAgIAotICAgICAgICBWZWN0b3I8TFZhbHVlLCA4PiB2YWx1ZXM7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSArIGkpKSk7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCA9IG1fbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0gICAgICAgIAotICAgICAgICBW
ZWN0b3I8TEJhc2ljQmxvY2ssIDE+IGJsb2NrcyhzZXQuc2l6ZSgpKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKLSAgICAgICAgICAgIGJsb2Nrc1tpXSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY2FzZSAiLCBpKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGR1bW15RGVmYXVsdCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
TWF0ZXJpYWxpemVOZXdPYmplY3QgZGVmYXVsdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBvdXRlckNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVO
ZXdPYmplY3QgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDE+IGNhc2VzKHNldC5zaXplKCkpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
ZXQuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgY2FzZXNbaV0gPSBTd2l0Y2hDYXNlKHdlYWtT
dHJ1Y3R1cmUoc2V0W2ldKSwgYmxvY2tzW2ldLCBXZWlnaHQoMSkpOwotICAgICAgICBtX291dC5z
d2l0Y2hJbnN0cnVjdGlvbigKLSAgICAgICAgICAgIGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApKSwgY2FzZXMsIGR1bW15RGVmYXVsdCwgV2VpZ2h0KDApKTsKLSAgICAgICAg
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dGVyTGFzdE5leHQgPSBtX291dC5tX25leHRCbG9jazsK
LSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMT4gcmVzdWx0czsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspIHsKLSAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJsb2Nrc1tpXSwgaSArIDEgPCBzZXQuc2l6ZSgpID8g
YmxvY2tzW2kgKyAxXSA6IGR1bW15RGVmYXVsdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2V0W2ldOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMVmFsdWUgb2JqZWN0OwotICAgICAgICAgICAgTFZhbHVlIGJ1dHRlcmZseTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewot
ICAgICAgICAgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFs
bG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgICAgICAg
ICAgTWFya2VkQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAmdm0oKS5oZWFwLmFsbG9jYXRvckZvck9i
amVjdFdpdGhvdXREZXN0cnVjdG9yKGFsbG9jYXRpb25TaXplKTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTWF0ZXJpYWxpemVOZXdPYmplY3QgY29tcGxleCBvYmplY3QgYWxsb2NhdGlvbiBzbG93
IHBhdGgiKSk7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZU5ld09iamVjdCBjb21wbGV4IG9iamVjdCBh
bGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShz
bG93UGF0aCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVlIGVuZE9m
U3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0RW5kKAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBz
aXplb2YoSlNWYWx1ZSkpLAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgTFZhbHVlIGZhc3RCdXR0ZXJmbHlWYWx1ZSA9IG1f
b3V0LmFkZCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKElu
ZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgTFZhbHVlIGZhc3RPYmplY3RWYWx1ZSA9IGFsbG9jYXRlT2JqZWN0KAotICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhbGxvY2F0b3IpLCBzdHJ1Y3R1cmUsIGZh
c3RCdXR0ZXJmbHlWYWx1ZSwgc2xvd1BhdGgpOwotCi0gICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgZmFzdE9iamVjdCA9IG1fb3V0LmFuY2hvcihmYXN0T2JqZWN0VmFsdWUpOwotICAgICAg
ICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFz
dEJ1dHRlcmZseVZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd09iamVj
dFZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0
aEJ1dHRlcmZseSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09i
amVjdCA9IG1fb3V0LmFuY2hvcihzbG93T2JqZWN0VmFsdWUpOwotICAgICAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd09iamVjdFZhbHVlLCBtX2hlYXBzLkpTT2JqZWN0X2J1
dHRlcmZseSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBvYmplY3QgPSBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0T2JqZWN0LCBz
bG93T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBidXR0ZXJmbHkgPSBtX291dC5waGkobV9vdXQu
aW50UHRyLCBmYXN0QnV0dGVyZmx5LCBzbG93QnV0dGVyZmx5KTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gSW4gdGhlIGVhc3kgY2FzZSB3aGVyZSB3ZSBjYW4gZG8g
YSBvbmUtc2hvdCBhbGxvY2F0aW9uLCB3ZSBzaW1wbHkgYWxsb2NhdGUgdGhlCi0gICAgICAgICAg
ICAgICAgLy8gb2JqZWN0IHRvIGRpcmVjdGx5IGhhdmUgdGhlIGRlc2lyZWQgc3RydWN0dXJlLgot
ICAgICAgICAgICAgICAgIG9iamVjdCA9IGFsbG9jYXRlT2JqZWN0KHN0cnVjdHVyZSk7Ci0gICAg
ICAgICAgICAgICAgYnV0dGVyZmx5ID0gbnVsbHB0cjsgLy8gRG9uJ3QgaGF2ZSBvbmUsIGRvbid0
IG5lZWQgb25lLgotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3Ig
KFByb3BlcnR5TWFwRW50cnkgZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJy
ZW50bHkoKSkgewotICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEubV9wcm9w
ZXJ0aWVzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgICAgICAgICBQaGFudG9tUHJvcGVy
dHlWYWx1ZSB2YWx1ZSA9IGRhdGEubV9wcm9wZXJ0aWVzW2ldOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC5pZGVudGlmaWVycygpW3ZhbHVlLm1faWRlbnRpZmllck51bWJlcl0gIT0g
ZW50cnkua2V5KQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBMVmFsdWUgYmFzZSA9IGlzSW5saW5lT2Zm
c2V0KGVudHJ5Lm9mZnNldCkgPyBvYmplY3QgOiBidXR0ZXJmbHk7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0b3JlUHJvcGVydHkodmFsdWVzW2ldLCBiYXNlLCB2YWx1ZS5tX2lkZW50aWZpZXJOdW1i
ZXIsIGVudHJ5Lm9mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0
cy5hcHBlbmQobV9vdXQuYW5jaG9yKG9iamVjdCkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChv
dXRlckNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGR1bW15RGVmYXVsdCwgb3V0ZXJDb250aW51YXRpb24pOwotICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0ZXJDb250
aW51YXRpb24sIG91dGVyTGFzdE5leHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaSht
X291dC5pbnRQdHIsIHJlc3VsdHMpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBpbGVNYXRlcmlh
bGl6ZUNyZWF0ZUFjdGl2YXRpb24oKQotICAgIHsKLSAgICAgICAgT2JqZWN0TWF0ZXJpYWxpemF0
aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+b2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgpOwotCi0g
ICAgICAgIFZlY3RvcjxMVmFsdWUsIDg+IHZhbHVlczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgdmFs
dWVzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyICsgaSkp
KTsKLQotICAgICAgICBMVmFsdWUgc2NvcGUgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7Ci0gICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fbm9kZS0+Y2FzdE9w
ZXJhbmQ8U3ltYm9sVGFibGUqPigpOwotICAgICAgICBBU1NFUlQodGFibGUgPT0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApLT5jYXN0Q29uc3RhbnQ8U3ltYm9sVGFibGUqPigpKTsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKTsKLQotICAgICAgICBM
QmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTWF0ZXJpYWxpemVD
cmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b24gY29udGludWF0aW9uIikpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9v
dXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLQotICAgICAgICBMVmFsdWUgZmFz
dE9iamVjdCA9IGFsbG9jYXRlT2JqZWN0PEpTTGV4aWNhbEVudmlyb25tZW50PigKLSAgICAgICAg
ICAgIEpTTGV4aWNhbEVudmlyb25tZW50OjphbGxvY2F0aW9uU2l6ZSh0YWJsZSksIHN0cnVjdHVy
ZSwgbV9vdXQuaW50UHRyWmVybywgc2xvd1BhdGgpOwotCi0gICAgICAgIG1fb3V0LnN0b3JlUHRy
KHNjb3BlLCBmYXN0T2JqZWN0LCBtX2hlYXBzLkpTU2NvcGVfbmV4dCk7Ci0gICAgICAgIG1fb3V0
LnN0b3JlUHRyKHdlYWtQb2ludGVyKHRhYmxlKSwgZmFzdE9iamVjdCwgbV9oZWFwcy5KU1N5bWJv
bFRhYmxlT2JqZWN0X3N5bWJvbFRhYmxlKTsKLQotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZh
c3RSZXN1bHQgPSBtX291dC5hbmNob3IoZmFzdE9iamVjdCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgLy8gV2UgZW5zdXJlIGFsbG9jYXRpb24gc2lua2luZyBleHBsaWN0
bHkgc2V0cyBib3R0b20gdmFsdWVzIGZvciBhbGwgZmllbGQgbWVtYmVycy4gCi0gICAgICAgIC8v
IFRoZXJlZm9yZSwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCBKU1ZhbHVlIHdlIHBhc3MgaW4gYXMg
dGhlIGluaXRpYWxpemF0aW9uIHZhbHVlCi0gICAgICAgIC8vIGJlY2F1c2UgYWxsIGZpZWxkcyB3
aWxsIGJlIG92ZXJ3cml0dGVuLgotICAgICAgICAvLyBGSVhNRTogSXQgbWF5IGJlIHdvcnRoIGNy
ZWF0aW5nIGFuIG9wZXJhdGlvbiB0aGF0IGNhbGxzIGEgY29uc3RydWN0b3Igb24gSlNMZXhpY2Fs
RW52aXJvbm1lbnQgdGhhdCAKLSAgICAgICAgLy8gZG9lc24ndCBpbml0aWFsaXplIGV2ZXJ5IHNs
b3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFudGVlZCB0byBkbyB0aGF0IGhlcmUuCi0gICAgICAgIExW
YWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAotICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpKTsKLSAgICAgICAgICAgIH0sIHNjb3BlKTsKLSAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9ICBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7Ci0gICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgTFZhbHVlIGFjdGl2YXRpb24gPSBtX291
dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoZGF0YS5tX3Byb3BlcnRpZXMuc2l6ZSgpID09IHRhYmxlLT5zY29wZVNpemUo
KSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLm1fcHJvcGVydGllcy5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZXNbaV0sCi0gICAg
ICAgICAgICAgICAgYWN0aXZhdGlvbiwKLSAgICAgICAgICAgICAgICBtX2hlYXBzLkpTRW52aXJv
bm1lbnRSZWNvcmRfdmFyaWFibGVzW2RhdGEubV9wcm9wZXJ0aWVzW2ldLm1faWRlbnRpZmllck51
bWJlcl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRvIG1ha2Ugc3VyZSBldmVyeSBzbG90IGluIHRoZSBz
Y29wZSBoYXMgb25lIHZhbHVlLgotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIodGFibGUtPm1fbG9jayk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHRhYmxlLT5i
ZWdpbihsb2NrZXIpLCBlbmQgPSB0YWJsZS0+ZW5kKGxvY2tlcik7IGl0ZXIgIT0gZW5kOyArK2l0
ZXIpIHsKLSAgICAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEubV9wcm9wZXJ0aWVzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5zY29wZU9mZnNldCgpLm9m
ZnNldCgpID09IGRhdGEubV9wcm9wZXJ0aWVzW2ldLm1faWRlbnRpZmllck51bWJlcikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShhY3RpdmF0aW9uKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNvbXBpbGVDaGVja1dhdGNoZG9nVGltZXIoKQotICAgIHsKLSAgICAgICAgTEJhc2lj
QmxvY2sgdGltZXJEaWRGaXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVja1dhdGNoZG9n
VGltZXIgdGltZXIgZGlkIGZpcmUiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ2hlY2tXYXRjaGRvZ1RpbWVyIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKG1fb3V0LmFic29sdXRlKHZtKCkud2F0Y2hkb2coKS0+dGltZXJEaWRGaXJlQWRkcmVzcygp
KSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihzdGF0ZSksCi0gICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseSh0aW1lckRpZEZpcmUpKTsKLQotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHRpbWVyRGlkRmlyZSwg
Y29udGludWF0aW9uKTsKLQotICAgICAgICBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICBbPV0g
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0
b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Iob3Bl
cmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciwgSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIGRpZE92ZXJmbG93U3RhY2soKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBkb2VzIGEgdmVy
eSBzaW1wbGUgbGVhZiBmdW5jdGlvbiBhbmFseXNpcy4gVGhlIGludmFyaWFudCBvZiBGVEwgY2Fs
bAotICAgICAgICAvLyBmcmFtZXMgaXMgdGhhdCB0aGUgY2FsbGVyIGhhZCBhbHJlYWR5IGRvbmUg
ZW5vdWdoIG9mIGEgc3RhY2sgY2hlY2sgdG8KLSAgICAgICAgLy8gcHJvdmUgdGhhdCB0aGlzIGNh
bGwgZnJhbWUgaGFzIGVub3VnaCBzdGFjayB0byBydW4sIGFuZCBhbHNvIGVub3VnaCBzdGFjawot
ICAgICAgICAvLyB0byBtYWtlIHJ1bnRpbWUgY2FsbHMuIFNvLCB3ZSBvbmx5IG5lZWQgdG8gc3Rh
Y2sgY2hlY2sgd2hlbiBtYWtpbmcgY2FsbHMKLSAgICAgICAgLy8gdG8gb3RoZXIgSlMgZnVuY3Rp
b25zLiBJZiB3ZSBkb24ndCBmaW5kIHN1Y2ggY2FsbHMgdGhlbiB3ZSBkb24ndCBuZWVkIHRvCi0g
ICAgICAgIC8vIGRvIGFueSBzdGFjayBjaGVja3MuCi0gICAgICAgIAotICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nrcygp
OyArK2Jsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgaWYgKCFibG9jaykKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKLSAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBHZXRCeUlkOgotICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlJZDoKLSAgICAgICAg
ICAgICAgICBjYXNlIENhbGw6Ci0gICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5iZWxvdygKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5hYnNvbHV0ZSh2bSgpLmFkZHJlc3NP
ZkZUTFN0YWNrTGltaXQoKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQuYm9vbGVhbkZhbHNlOwotICAgIH0KLSAgICAKLSAgICBzdHJ1Y3QgQXJndW1lbnRzTGVuZ3Ro
IHsKLSAgICAgICAgQXJndW1lbnRzTGVuZ3RoKCkKLSAgICAgICAgICAgIDogaXNLbm93bihmYWxz
ZSkKLSAgICAgICAgICAgICwga25vd24oVUlOVF9NQVgpCi0gICAgICAgICAgICAsIHZhbHVlKG51
bGxwdHIpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0tu
b3duOwotICAgICAgICB1bnNpZ25lZCBrbm93bjsKLSAgICAgICAgTFZhbHVlIHZhbHVlOwotICAg
IH07Ci0gICAgQXJndW1lbnRzTGVuZ3RoIGdldEFyZ3VtZW50c0xlbmd0aChJbmxpbmVDYWxsRnJh
bWUqIGlubGluZUNhbGxGcmFtZSkKLSAgICB7Ci0gICAgICAgIEFyZ3VtZW50c0xlbmd0aCBsZW5n
dGg7Ci0KLSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSAmJiAhaW5saW5lQ2FsbEZyYW1lLT5p
c1ZhcmFyZ3MoKSkgewotICAgICAgICAgICAgbGVuZ3RoLmtub3duID0gaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIGxlbmd0aC5pc0tub3duID0gdHJ1
ZTsKLSAgICAgICAgICAgIGxlbmd0aC52YWx1ZSA9IG1fb3V0LmNvbnN0SW50MzIobGVuZ3RoLmtu
b3duKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxlbmd0aC5rbm93biA9IFVJTlRf
TUFYOwotICAgICAgICAgICAgbGVuZ3RoLmlzS25vd24gPSBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQotICAgICAgICAgICAgICAgIGFyZ3VtZW50Q291
bnRSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpBcmd1bWVudENvdW50KTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhcmd1bWVudENvdW50UmVnaXN0ZXIgPSBp
bmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50Q291bnRSZWdpc3RlcjsKLSAgICAgICAgICAgIGxlbmd0
aC52YWx1ZSA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIocGF5bG9hZEZvcihhcmd1bWVudENvdW50
UmVnaXN0ZXIpKSwgbV9vdXQuaW50MzJPbmUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gbGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICBBcmd1bWVudHNMZW5ndGggZ2V0QXJn
dW1lbnRzTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRBcmd1bWVudHNMZW5ndGgo
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGdldEN1cnJlbnRDYWxsZWUoKQotICAgIHsKLSAgICAgICAgaWYgKElubGluZUNh
bGxGcmFtZSogZnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUp
IHsKLSAgICAgICAgICAgIGlmIChmcmFtZS0+aXNDbG9zdXJlQ2FsbCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKGZyYW1lLT5jYWxsZWVSZWNvdmVyeS52
aXJ0dWFsUmVnaXN0ZXIoKSkpOwotICAgICAgICAgICAgcmV0dXJuIHdlYWtQb2ludGVyKGZyYW1l
LT5jYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpLmFzQ2VsbCgpKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vdXQubG9hZFB0cihhZGRyZXNzRm9yKEpTU3RhY2s6OkNhbGxlZSkpOwotICAg
IH0KLSAgICAKLSAgICBMVmFsdWUgZ2V0QXJndW1lbnRzU3RhcnQoSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUpCi0gICAgewotICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhcnQgPSBB
c3NlbWJseUhlbHBlcnM6OmFyZ3VtZW50c1N0YXJ0KGlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAg
IHJldHVybiBhZGRyZXNzRm9yKHN0YXJ0KS52YWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICBMVmFs
dWUgZ2V0QXJndW1lbnRzU3RhcnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEFyZ3VtZW50
c1N0YXJ0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7Ci0gICAgfQot
ICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBjaGVja1N0cnVj
dHVyZSgKLSAgICAgICAgTFZhbHVlIHN0cnVjdHVyZURpc2NyaW1pbmFudCwgY29uc3QgRm9ybWF0
dGVkVmFsdWUmIGZvcm1hdHRlZFZhbHVlLCBFeGl0S2luZCBleGl0S2luZCwKLSAgICAgICAgY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQsIGNvbnN0IEZ1bmN0b3ImIHdlYWtTdHJ1Y3R1cmVEaXNjcmlt
aW5hbnQpCi0gICAgewotICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
dGVybWluYXRlKGV4aXRLaW5kKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChzZXQuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgICAgICBleGl0S2luZCwgZm9ybWF0dGVkVmFsdWUsIDAsCi0gICAgICAgICAgICAg
ICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlRGlzY3JpbWluYW50LCB3ZWFrU3RydWN0dXJlRGlz
Y3JpbWluYW50KHNldFswXSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJjaGVja1N0cnVjdHVyZSBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250
aW51YXRpb24pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2V0LnNpemUoKSAt
IDE7ICsraSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiY2hlY2tTdHJ1Y3R1cmUgbmV4dFN0cnVjdHVyZSIpKTsKLSAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbChzdHJ1Y3R1
cmVEaXNjcmltaW5hbnQsIHdlYWtTdHJ1Y3R1cmVEaXNjcmltaW5hbnQoc2V0W2ldKSksCi0gICAg
ICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShuZXh0U3RydWN0dXJlKSk7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuZXh0U3RydWN0dXJlKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGZvcm1h
dHRlZFZhbHVlLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlRGlzY3Jp
bWluYW50LCB3ZWFrU3RydWN0dXJlRGlzY3JpbWluYW50KHNldC5sYXN0KCkpKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbnVt
YmVyT3JOb3RDZWxsVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlZhbHVlVG9J
bnQzMiBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90SW50Q2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIG5vdCBpbnQgY2FzZSIpKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9IDA7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdE51bWJl
ckNhc2UgPSAwOwotICAgICAgICBpZiAoZWRnZS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZSkgewot
ICAgICAgICAgICAgZG91YmxlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiVmFsdWVUb0lu
dDMyIGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgbm90TnVtYmVyQ2FzZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiVmFsdWVUb0ludDMyIG5vdCBudW1iZXIgY2FzZSIpKTsKLSAgICAgICAg
fQotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlZhbHVlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBWZWN0
b3I8VmFsdWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFu
Y2goaXNOb3RJbnQzMih2YWx1ZSksIHVuc3VyZShub3RJbnRDYXNlKSwgdW5zdXJlKGludENhc2Up
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaW50Q2FzZSwgbm90SW50Q2FzZSk7Ci0gICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFu
Y2hvcih1bmJveEludDMyKHZhbHVlKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBpZiAoZWRnZS51c2VLaW5kKCkgPT0gTnVtYmVyVXNlKSB7
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RJbnRDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3Bl
Y0J5dGVjb2RlTnVtYmVyLCBpc0NlbGxPck1pc2ModmFsdWUpKTsKLSAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKG1fb3V0LmFuY2hvcihkb3VibGVUb0ludDMyKHVuYm94RG91YmxlKHZhbHVlKSkp
KTsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEludENhc2UsIGRvdWJsZUNhc2UpOwot
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIGlzQ2VsbE9yTWlzYyh2
YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShub3ROdW1iZXJDYXNlKSwgdW5zdXJlKGRv
dWJsZUNhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91
YmxlQ2FzZSwgbm90TnVtYmVyQ2FzZSk7Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291
dC5hbmNob3IoZG91YmxlVG9JbnQzMih1bmJveERvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdE51bWJlckNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIH5T
cGVjQ2VsbCwgaXNDZWxsKHZhbHVlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1
ZSBzcGVjaWFsUmVzdWx0ID0gbV9vdXQuc2VsZWN0KAotICAgICAgICAgICAgICAgIG1fb3V0LmVx
dWFsKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1
ZSkpKSksCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50MzJPbmUsIG1fb3V0LmludDMyWmVybyk7
Ci0gICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Ioc3BlY2lhbFJlc3VsdCkp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgcmVzdWx0cyk7Ci0gICAgfQotCi0g
ICAgdm9pZCBjaGVja0luZmVycmVkVHlwZShFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSwgY29uc3Qg
SW5mZXJyZWRUeXBlOjpEZXNjcmlwdG9yJiB0eXBlKQotICAgIHsKLSAgICAgICAgLy8gVGhpcyBj
YW5ub3QgdXNlIEZUTF9UWVBFX0NIRUNLIG9yIHR5cGVDaGVjaygpIGJlY2F1c2UgaXQgaXMgY2Fs
bGVkIHBhcnRpYWxseSwgYXMgaW4gYSBub2RlIGxpa2U6Ci0gICAgICAgIC8vCi0gICAgICAgIC8v
ICAgICBNdWx0aVB1dEJ5T2Zmc2V0KC4uLikKLSAgICAgICAgLy8KLSAgICAgICAgLy8gbWF5IGJl
IGxvd2VyZWQgdG86Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBzd2l0Y2ggKG9iamVjdC0+
c3RydWN0dXJlKSB7Ci0gICAgICAgIC8vICAgICBjYXNlIDQyOgotICAgICAgICAvLyAgICAgICAg
IGNoZWNrSW5mZXJyZWRUeXBlKC4uLiwgdHlwZTEpOwotICAgICAgICAvLyAgICAgICAgIC4uLgot
ICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyAgICAgY2FzZSA0MzoKLSAgICAg
ICAgLy8gICAgICAgICBjaGVja0luZmVycmVkVHlwZSguLi4sIHR5cGUyKTsKLSAgICAgICAgLy8g
ICAgICAgICAuLi4KLSAgICAgICAgLy8gICAgICAgICBicmVhazsKLSAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgLy8KLSAgICAgICAgLy8gd2hlcmUgdHlwZTEgYW5kIHR5cGUyIGFyZSBkaWZmZXJl
bnQuIFVzaW5nIHR5cGVDaGVjaygpIHdvdWxkIG1lYW4gdGhhdCB0aGUgZWRnZSB3b3VsZCBiZQot
ICAgICAgICAvLyBmaWx0ZXJlZCBieSB0eXBlMSAmIHR5cGUyLCBpbnN0ZWFkIG9mIHR5cGUxIHwg
dHlwZTIuCi0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCgpKSB7Ci0gICAgICAg
IGNhc2UgSW5mZXJyZWRUeXBlOjpCb3R0b206Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlw
ZSwganNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIG1fb3V0LmJvb2xlYW5UcnVlKTsK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6Qm9vbGVh
bjoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwgaXNOb3RCb29sZWFuKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok90aGVyOgotICAg
ICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9k
ZSgpLCBpc05vdE90aGVyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6OkludDMyOgotICAgICAgICAgICAg
c3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05v
dEludDMyKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6Ok51bWJlcjoKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3ROdW1iZXIo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICBjYXNlIEluZmVycmVkVHlwZTo6U3RyaW5nOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUo
ZWRnZSkpKTsKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlw
ZTo6U3ltYm9sOgotICAgICAgICAgICAgc3BlY3VsYXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2
YWx1ZSksIGVkZ2Uubm9kZSgpLCBpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdl
Lm5vZGUoKSwgaXNOb3RTeW1ib2wodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBjYXNlIEluZmVycmVkVHlwZTo6T2JqZWN0V2l0aFN0cnVj
dHVyZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUp
LCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSk7Ci0gICAg
ICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQodHlwZS5zdHJ1Y3R1cmUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBl
ZGdlLm5vZGUoKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVj
dHVyZUlEKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0
cnVjdHVyZSgpKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgIGNhc2UgSW5mZXJyZWRUeXBlOjpPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlcjogewotICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY2VsbENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImNo
ZWNrSW5mZXJyZWRUeXBlIE9iamVjdFdpdGhTdHJ1Y3R1cmVPck90aGVyIGNlbGwgY2FzZSIpKTsK
LSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JPdGhlciBub3QgY2Vs
bCBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RXaXRoU3RydWN0dXJlT3JP
dGhlciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
dmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1bnN1cmUobm90Q2Vs
bENhc2UpKTsKLQotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhjZWxsQ2FzZSwgbm90Q2VsbENhc2UpOwotCi0gICAgICAgICAgICBpZiAoIWFic3RyYWN0
VmFsdWUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQodHlwZS5zdHJ1
Y3R1cmUoKSkpKSB7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAg
ICAgICBCYWRUeXBlLCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5sb2FkMzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdlYWtTdHJ1Y3R1cmVJRCh0eXBlLnN0cnVjdHVyZSgpKSkpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAg
ICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgQmFkVHlwZSwganNWYWx1ZVZhbHVl
KHZhbHVlKSwgZWRnZS5ub2RlKCksCi0gICAgICAgICAgICAgICAgaXNOb3RPdGhlcih2YWx1ZSwg
cHJvdmVuVHlwZShlZGdlKSAmIH5TcGVjQ2VsbCkpOwotCi0gICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBJbmZlcnJlZFR5cGU6Ok9iamVjdDoKLSAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLm5vZGUoKSwgaXNOb3RDZWxsKHZhbHVlLCBwcm92
ZW5UeXBlKGVkZ2UpKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKHZhbHVlKSwgZWRnZS5ub2RlKCksIGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVk
Z2UpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgY2FzZSBJbmZlcnJlZFR5cGU6
Ok9iamVjdE9yT3RoZXI6IHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNlbGxDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIGNlbGwg
Y2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGxDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJjaGVja0luZmVycmVkVHlwZSBPYmplY3RPck90aGVyIG5vdCBjZWxsIGNh
c2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImNoZWNrSW5mZXJyZWRUeXBlIE9iamVjdE9yT3RoZXIgY29udGludWF0aW9u
IikpOwotCi0gICAgICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBl
KGVkZ2UpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGxDYXNlKSk7Ci0KLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2VsbENhc2UsIG5v
dENlbGxDYXNlKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uubm9kZSgpLAotICAgICAgICAgICAgICAg
IGlzTm90T2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpICYgU3BlY0NlbGwpKTsKLQotICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2Uu
bm9kZSgpLAotICAgICAgICAgICAgICAgIGlzTm90T3RoZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkgJiB+U3BlY0NlbGwpKTsKLQotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgSW5mZXJyZWRU
eXBlOjpUb3A6Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZmVycmVkIHR5cGUiKTsKLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGxvYWRQcm9wZXJ0eShMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fb3V0LmxvYWQ2NChhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVy
LCBvZmZzZXQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdG9yZVByb3BlcnR5KAotICAgICAg
ICBMVmFsdWUgdmFsdWUsIExWYWx1ZSBzdG9yYWdlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVy
LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBtX291dC5zdG9yZTY0KHZh
bHVlLCBhZGRyZXNzT2ZQcm9wZXJ0eShzdG9yYWdlLCBpZGVudGlmaWVyTnVtYmVyLCBvZmZzZXQp
KTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NPZlByb3BlcnR5KAotICAg
ICAgICBMVmFsdWUgc3RvcmFnZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmFkZHJlc3MoCi0gICAg
ICAgICAgICBtX2hlYXBzLnByb3BlcnRpZXNbaWRlbnRpZmllck51bWJlcl0sIHN0b3JhZ2UsIG9m
ZnNldFJlbGF0aXZlVG9CYXNlKG9mZnNldCkpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc3Rv
cmFnZUZvclRyYW5zaXRpb24oCi0gICAgICAgIExWYWx1ZSBvYmplY3QsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwKLSAgICAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJl
KiBuZXh0U3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNl
dCkpCi0gICAgICAgICAgICByZXR1cm4gb2JqZWN0OwotICAgICAgICAKLSAgICAgICAgaWYgKHBy
ZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IG5leHRTdHJ1Y3R1cmUtPm91
dE9mTGluZUNhcGFjaXR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbG9hZEJ1dHRlcmZseVdpdGhC
YXJyaWVyKG9iamVjdCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAg
ICBpZiAoIXByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKQotICAgICAgICAg
ICAgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBwcmV2aW91c1N0cnVj
dHVyZSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gcmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSgKLSAgICAgICAgICAgICAgICBvYmplY3QsIGxvYWRCdXR0ZXJmbHlXaXRo
QmFycmllcihvYmplY3QpLAotICAgICAgICAgICAgICAgIHByZXZpb3VzU3RydWN0dXJlLCBuZXh0
U3RydWN0dXJlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZW1pdFN0b3JlQmFycmll
cihvYmplY3QpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKExWYWx1ZSBvYmplY3QsIFN0cnVj
dHVyZSogcHJldmlvdXNTdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBpZiAocHJldmlvdXNTdHJ1
Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKLSAgICAgICAgICAgIHJldHVybiB2
bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQuaW50UHRyLAotICAgICAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uUmVhbGxvY2F0ZUJ1
dHRlcmZseVRvSGF2ZVByb3BlcnR5U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAotICAgICAg
ICAgICAgICAgIG1fY2FsbEZyYW1lLCBvYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwo
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIocmVzdWx0
LCBvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Ci0gICAgICAgIExWYWx1ZSBvYmplY3QsIExWYWx1ZSBvbGRTdG9yYWdlLCBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCi0gICAgewotICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9
IHByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICBzaXplX3QgbmV3U2l6ZSA9
IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7IAotCi0gICAgICAgIEFTU0VSVF9VTlVT
RUQobmV4dCwgbmV3U2l6ZSA9PSBuZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChwcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewotICAg
ICAgICAgICAgTFZhbHVlIG5ld0FsbG9jU2l6ZSA9IG1fb3V0LmNvbnN0SW50UHRyKG5ld1NpemUp
OyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gdm1DYWxsKG1fb3V0Lmlu
dFB0ciwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvblJlYWxsb2NhdGVCdXR0ZXJmbHlUb0dyb3dQ
cm9wZXJ0eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgb2JqZWN0LCBuZXdBbGxvY1NpemUpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2VXaXRoU2l6ZUltcGwobmV3U2l6ZSk7Ci0KLSAgICAgICAgcHRyZGlmZl90IGhlYWRl
clNpemUgPSAtc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAtIHNpemVvZih2b2lkKik7Ci0gICAgICAg
IHB0cmRpZmZfdCBlbmRTdG9yYWdlID0gaGVhZGVyU2l6ZSAtIHN0YXRpY19jYXN0PHB0cmRpZmZf
dD4ob2xkU2l6ZSAqIHNpemVvZihKU1ZhbHVlKSk7Ci0KLSAgICAgICAgZm9yIChwdHJkaWZmX3Qg
b2Zmc2V0ID0gaGVhZGVyU2l6ZTsgb2Zmc2V0ID4gZW5kU3RvcmFnZTsgb2Zmc2V0IC09IHNpemVv
Zih2b2lkKikpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsb2FkZWQgPSAKLSAgICAgICAgICAgICAg
ICBtX291dC5sb2FkUHRyKG1fb3V0LmFkZHJlc3MobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVt
YmVyKCksIG9sZFN0b3JhZ2UsIG9mZnNldCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmVQdHIo
bG9hZGVkLCBtX291dC5hZGRyZXNzKG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBy
ZXN1bHQsIG9mZnNldCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9y
ZVB0cihyZXN1bHQsIG1fb3V0LmFkZHJlc3Mob2JqZWN0LCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRl
cmZseSkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKHNpemVfdCBzaXpl
SW5WYWx1ZXMpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUltcGwgc2xvdyBw
YXRoIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5z
ZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBl
bmRPZlN0b3JhZ2UgPSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZCgKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKHNpemVJblZhbHVlcyAqIHNpemVvZihKU1ZhbHVlKSksIHNsb3dQ
YXRoKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5hZGQobV9vdXQuY29uc3RJbnRQdHIoc2l6
ZW9mKEluZGV4aW5nSGVhZGVyKSksIGVuZE9mU3RvcmFnZSkpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc2xv
d0J1dHRlcmZseVZhbHVlOwotICAgICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGluaXRpYWxPdXRP
ZkxpbmVDYXBhY2l0eSkgewotICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gbGF6eVNs
b3dQYXRoKAotICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNsb3dC
dXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVy
YXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZUluVmFsdWVzKSk7Ci0gICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZs
eSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5VmFsdWUpOwotICAgICAgICAKLSAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmludFB0ciwgZmFzdEJ1dHRlcmZseSwgc2xvd0J1dHRlcmZseSk7Ci0gICAg
fQotICAgIAotICAgIExWYWx1ZSBnZXRCeUlkKExWYWx1ZSBiYXNlKQotICAgIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZTsKLSAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldOwotCi0gICAgICAg
IEIzOjpQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5wYXRjaHBvaW50KEludDY0
KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyKGJhc2UpOwotCi0gICAg
ICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIGEgR2V0QnlJZEZsdXNoLCB3ZSBtaWdodCBnZXQgc29t
ZSBwZXJmb3JtYW5jZSBib29zdCBpZiB3ZSBjbGFpbSB0aGF0IGl0Ci0gICAgICAgIC8vIGNsb2Ji
ZXJzIHZvbGF0aWxlIHJlZ2lzdGVycyBsYXRlLiBJdCdzIG5vdCBuZWNlc3NhcnkgZm9yIGNvcnJl
Y3RuZXNzLCB0aG91Z2gsIHNpbmNlIHRoZQotICAgICAgICAvLyBJQyBjb2RlIGlzIHN1cGVyIHNt
YXJ0IGFib3V0IHNhdmluZyByZWdpc3RlcnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTI4NDgKLSAgICAgICAgCi0gICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLQotICAg
ICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFuZGxlID0K
LSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBvaW50KTsK
LQotICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2lu
dC0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0KLSAgICAg
ICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQotICAgICAgICAgICAgICAg
ICAgICBzdGF0ZS0+aml0Q29kZS0+Y29tbW9uLmFkZFVuaXF1ZUNhbGxTaXRlSW5kZXgobm9kZS0+
b3JpZ2luLnNlbWFudGljKTsKLQotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGRpcmVj
dCBleGl0IHRhcmdldCBmb3Igb3BlcmF0aW9uIGNhbGxzLgotICAgICAgICAgICAgICAgIEJveDxD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBleGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAg
ZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQp
OwotCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXhpdCBmb3IgY2FsbCBJQydzIGNy
ZWF0ZWQgYnkgdGhlIGdldEJ5SWQgZm9yIGdldHRlcnMuIFdlIGRvbid0IGhhdmUKLSAgICAgICAg
ICAgICAgICAvLyB0byBkbyBhbnl0aGluZyB3ZWlyZCBvdGhlciB0aGFuIGNhbGwgdGhpcywgc2lu
Y2UgaXQgd2lsbCBhc3NvY2lhdGUgdGhlIGV4aXQgd2l0aAotICAgICAgICAgICAgICAgIC8vIHRo
ZSBjYWxsc2l0ZSBpbmRleC4KLSAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVk
dWxlRXhpdENyZWF0aW9uRm9yVW53aW5kKHBhcmFtcywgY2FsbFNpdGVJbmRleCk7Ci0KLSAgICAg
ICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRHZXRCeUlkR2VuZXJhdG9yPjo6Y3Jl
YXRlKAotICAgICAgICAgICAgICAgICAgICBqaXQuY29kZUJsb2NrKCksIG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYywgY2FsbFNpdGVJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIEpTVmFsdWVSZWdzKHBhcmFtc1sxXS5ncHIoKSksCi0gICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHBhcmFtc1swXS5ncHIoKSkpOwotCi0gICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgICAgICAgICAgICAg
Q0NhbGxIZWxwZXJzOjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAgICAgICAg
ICBwYXJhbXMuYWRkTGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLT5zbG93UGF0aEp1bXAoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBzbG93UGF0aEJlZ2luID0gaml0LmxhYmVsKCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkNhbGwgc2xvd1BhdGhDYWxsID0g
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFt
cy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIHBhcmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuZXJhdG9yLT5zdHViSW5mbygpKSwgcGFy
YW1zWzFdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih1aWQpKS5jYWxsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQu
anVtcCgpLmxpbmtUbyhkb25lLCAmaml0KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5yZXBvcnRTbG93UGF0aENhbGwoc2xvd1BhdGhCZWdpbiwgc2xvd1BhdGhDYWxsKTsK
LQotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZExpbmtUYXNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmZpbmFsaXplKGxpbmtCdWZmZXIpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHJldHVybiBwYXRjaHBvaW50OwotICAgIH0KLQot
ICAgIExWYWx1ZSBsb2FkQnV0dGVyZmx5V2l0aEJhcnJpZXIoTFZhbHVlIG9iamVjdCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIG9iamVjdCwgbV9vdXQu
bG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSwgb3BlcmF0aW9uR2V0
QnV0dGVyZmx5KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvYWRWZWN0b3JXaXRoQmFycmll
cihMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHRWYWx1ZSA9
IG1fb3V0LmxvYWRQdHIob2JqZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X3ZlY3Rvcik7
Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIGZhc3RSZXN1bHRWYWx1
ZSwKLSAgICAgICAgICAgIFsmXSAoKSAtPiBMVmFsdWUgewotICAgICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJsb2FkVmVjdG9yV2l0aEJh
cnJpZXIgc2xvdyBwYXRoIikpOwotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgibG9hZFZlY3RvcldpdGhCYXJyaWVyIGNvbnRp
bnVhdGlvbiIpKTsKLQotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQg
PSBtX291dC5hbmNob3IoZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgICAgICAgICBtX291dC5i
cmFuY2goaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5
KGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCi0gICAgICAgICAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25HZXRBcnJheUJ1ZmZlclZlY3RvciwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0sIG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBtX291dC5waGkobV9vdXQuaW50UHRyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKLSAg
ICAgICAgICAgIH0pOwotICAgIH0KLQotICAgIExWYWx1ZSBjb3B5QmFycmllcihMVmFsdWUgb2Jq
ZWN0LCBMVmFsdWUgcG9pbnRlciwgUF9KSVRPcGVyYXRpb25fRUMgc2xvd1BhdGhGdW5jdGlvbikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjb3B5QmFycmllcigKLSAgICAgICAgICAgIHBvaW50ZXIs
Ci0gICAgICAgICAgICBbJl0gKCkgLT4gTFZhbHVlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bGF6eVNsb3dQYXRoKAotICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhGdW5jdGlvbiwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgICAgICAgICAgICAg
ICAgICB9LCBvYmplY3QpOwotICAgICAgICAgICAgfSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBMVmFsdWUgY29weUJhcnJpZXIoTFZhbHVlIHBvaW50ZXIs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiY29weUJhcnJpZXIgc2xvdyBwYXRoIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImNvcHlCYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHBvaW50ZXIpOwotICAgICAgICBtX291dC5icmFuY2go
aXNJblRvU3BhY2UocG9pbnRlciksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQ
YXRoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgY29udGludWF0aW9uKTsKLQotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGZ1bmN0b3IoKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0
KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpOwotICAgIH0KLQotICAgIExWYWx1ZSBpc0luVG9TcGFjZShMVmFsdWUgcG9pbnRl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0SXNaZXJvUHRyKHBvaW50ZXIsIG1f
b3V0LmNvbnN0SW50UHRyKENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSk7Ci0gICAgfQotCi0g
ICAgTFZhbHVlIGxvYWRCdXR0ZXJmbHlSZWFkT25seShMVmFsdWUgb2JqZWN0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIHJlbW92ZVNwYWNlQml0cyhtX291dC5sb2FkUHRyKG9iamVjdCwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgbG9hZFZlY3RvclJl
YWRPbmx5KExWYWx1ZSBvYmplY3QpCi0gICAgewotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZh
bHVlID0gbV9vdXQubG9hZFB0cihvYmplY3QsIG1faGVhcHMuSlNBcnJheUJ1ZmZlclZpZXdfdmVj
dG9yKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBwb3NzaWJseUZyb21TcGFjZSA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgibG9hZFZlY3RvclJlYWRPbmx5IHBvc3NpYmx5IGZyb20gc3BhY2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgibG9hZFZlY3RvclJlYWRPbmx5IGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0KLSAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzSW5Ub1NwYWNlKGZhc3RSZXN1bHRWYWx1ZSksIHVzdWFsbHko
Y29udGludWF0aW9uKSwgcmFyZWx5KHBvc3NpYmx5RnJvbVNwYWNlKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhwb3NzaWJseUZyb21TcGFjZSwgY29u
dGludWF0aW9uKTsKLQotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbV9vdXQuc2Vs
ZWN0KAotICAgICAgICAgICAgaXNGYXN0VHlwZWRBcnJheShvYmplY3QpLCByZW1vdmVTcGFjZUJp
dHMoZmFzdFJlc3VsdFZhbHVlKSwgZmFzdFJlc3VsdFZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludFB0ciwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHJlbW92ZVNwYWNlQml0cyhMVmFsdWUgc3RvcmFnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX291dC5iaXRBbmQoCi0gICAgICAgICAgICBzdG9yYWdlLCBtX291dC5jb25zdEludFB0cih+
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KENvcHlCYXJyaWVyQmFzZTo6c3BhY2VCaXRzKSkpOwotICAg
IH0KLQotICAgIExWYWx1ZSBpc0Zhc3RUeXBlZEFycmF5KExWYWx1ZSBvYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIob2Jq
ZWN0LCBtX2hlYXBzLkpTQXJyYXlCdWZmZXJWaWV3X21vZGUpLAotICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihGYXN0VHlwZWRBcnJheSkpOwotICAgIH0KLSAgICAKLSAgICBUeXBlZFBvaW50
ZXIgYmFzZUluZGV4KEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAsIExWYWx1ZSBzdG9yYWdlLCBM
VmFsdWUgaW5kZXgsIEVkZ2UgZWRnZSwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgaGVhcCwgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dFB0cihpbmRleCksIHByb3ZlblZhbHVlKGVkZ2UpLCBvZmZzZXQpOwotICAg
IH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEludEZ1bmN0b3IsIHR5cGVuYW1lIERvdWJsZUZ1
bmN0b3I+Ci0gICAgdm9pZCBjb21wYXJlKAotICAgICAgICBjb25zdCBJbnRGdW5jdG9yJiBpbnRG
dW5jdG9yLCBjb25zdCBEb3VibGVGdW5jdG9yJiBkb3VibGVGdW5jdG9yLAotICAgICAgICBTX0pJ
VE9wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCi0gICAgewotICAgICAgICBpZiAobV9ub2Rl
LT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKGludEZ1
bmN0b3IobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDUyUmVwVXNlKSkg
ewotICAgICAgICAgICAgSW50NTJLaW5kIGtpbmQ7Ci0gICAgICAgICAgICBMVmFsdWUgbGVmdCA9
IGxvd1doaWNoZXZlckludDUyKG1fbm9kZS0+Y2hpbGQxKCksIGtpbmQpOwotICAgICAgICAgICAg
TFZhbHVlIHJpZ2h0ID0gbG93SW50NTIobV9ub2RlLT5jaGlsZDIoKSwga2luZCk7Ci0gICAgICAg
ICAgICBzZXRCb29sZWFuKGludEZ1bmN0b3IobGVmdCwgcmlnaHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlV
c2VLaW5kKERvdWJsZVJlcFVzZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91
YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihkb3VibGVGdW5j
dG9yKGxlZnQsIHJpZ2h0KSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX25vZGUtPmlzQmluYXJ5VXNlS2luZChVbnR5cGVkVXNlKSkgewot
ICAgICAgICAgICAgbm9uU3BlY3VsYXRpdmVDb21wYXJlKGludEZ1bmN0b3IsIGhlbHBlckZ1bmN0
aW9uKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21wYXJlRXFPYmplY3RPck90aGVyVG9PYmplY3QoRWRnZSBsZWZ0Q2hpbGQs
IEVkZ2UgcmlnaHRDaGlsZCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByaWdodENlbGwgPSBsb3dD
ZWxsKHJpZ2h0Q2hpbGQpOwotICAgICAgICBMVmFsdWUgbGVmdFZhbHVlID0gbG93SlNWYWx1ZShs
ZWZ0Q2hpbGQsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBz
cGVjdWxhdGVUcnV0aHlPYmplY3QocmlnaHRDaGlsZCwgcmlnaHRDZWxsLCBTcGVjT2JqZWN0KTsK
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRDZWxsQ2FzZSA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGxlZnQgY2VsbCBjYXNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBsZWZ0Tm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdCBsZWZ0IG5vdCBjZWxsIGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQ29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQ2VsbChsZWZ0
VmFsdWUsIHByb3ZlblR5cGUobGVmdENoaWxkKSksCi0gICAgICAgICAgICB1bnN1cmUobGVmdENl
bGxDYXNlKSwgdW5zdXJlKGxlZnROb3RDZWxsQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsZWZ0Q2VsbENhc2UsIGxlZnROb3RD
ZWxsQ2FzZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVRydXRoeU9iamVjdChsZWZ0Q2hpbGQsIGxlZnRW
YWx1ZSwgU3BlY09iamVjdCB8ICh+U3BlY0NlbGwpKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
Y2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbChyaWdodENlbGwsIGxlZnRWYWx1
ZSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhsZWZ0Tm90Q2VsbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKGxlZnRWYWx1ZSksIGxl
ZnRDaGlsZCwgU3BlY090aGVyIHwgU3BlY0NlbGwsIGlzTm90T3RoZXIobGVmdFZhbHVlKSk7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
Ym9vbGVhbkZhbHNlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKG1fb3V0LmJvb2xlYW4sIGNlbGxSZXN1bHQsIG5vdENl
bGxSZXN1bHQpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVUcnV0aHlPYmplY3Qo
RWRnZSBlZGdlLCBMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgZmlsdGVyKQotICAgIHsKLSAg
ICAgICAgaWYgKG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKCkp
IHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwg
ZmlsdGVyLCBpc05vdE9iamVjdChjZWxsKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZWRnZSwgZmlsdGVyLCBpc05vdE9iamVjdChjZWxsKSk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAg
ICAgICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZS5ub2RlKCksCi0gICAg
ICAgICAgICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4
WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnRGdW5jdG9yPgotICAgIHZvaWQgbm9uU3BlY3Vs
YXRpdmVDb21wYXJlKGNvbnN0IEludEZ1bmN0b3ImIGludEZ1bmN0b3IsIFNfSklUT3BlcmF0aW9u
X0VKSiBoZWxwZXJGdW5jdGlvbikKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxlZnRJ
c0ludCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgbGVmdCBpcyBp
bnQiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhc3RQYXRoID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJDb21wYXJlRXEgdW50eXBlZCBmYXN0IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb21wYXJlRXEgdW50eXBlZCBzbG93
IHBhdGgiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiQ29tcGFyZUVxIHVudHlwZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIobGVmdCksIHJhcmVseShzbG93UGF0aCks
IHVzdWFsbHkobGVmdElzSW50KSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxlZnRJc0ludCwgZmFzdFBhdGgpOwotICAgICAgICBtX291
dC5icmFuY2goaXNOb3RJbnQzMihyaWdodCksIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoZmFz
dFBhdGgpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBzbG93
UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
aW50RnVuY3Rvcih1bmJveEludDMyKGxlZnQpLCB1bmJveEludDMyKHJpZ2h0KSkpOwotICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHZtQ2FsbCgKLSAgICAgICAgICAg
IG1fb3V0LmludFB0ciwgbV9vdXQub3BlcmF0aW9uKGhlbHBlckZ1bmN0aW9uKSwgbV9jYWxsRnJh
bWUsIGxlZnQsIHJpZ2h0KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgIH0KLQotICAgIExWYWx1ZSBzdHJpbmdzRXF1YWwoTFZhbHVlIGxl
ZnRKU1N0cmluZywgTFZhbHVlIHJpZ2h0SlNTdHJpbmcpCi0gICAgewotICAgICAgICBMQmFzaWNC
bG9jayBub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3Ry
aW5nc0VxdWFsIG5vdCB0cml2aWFsbHkgdW5lcXVhbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBub3RFbXB0eUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBu
b3QgZW1wdHkgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGVmdFJlYWR5Q2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIGxlZnQgcmVhZHkgY2FzZSIpKTsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgcmlnaHRSZWFkeUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
InN0cmluZ3NFcXVhbCByaWdodCByZWFkeSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBs
ZWZ0OEJpdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBsZWZ0IDgt
Yml0IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHJpZ2h0OEJpdENhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCByaWdodCA4LWJpdCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBsb29wID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpbmdzRXF1YWwg
bG9vcCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgYnl0ZXNFcXVhbCA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgic3RyaW5nc0VxdWFsIGJ5dGVzIGVxdWFsIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayB0cnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3RyaW5nc0VxdWFsIHRydWUgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpbmdzRXF1YWwgZmFsc2UgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmluZ3NFcXVhbCBzbG93IGNhc2UiKSk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgic3RyaW5nc0VxdWFsIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBMVmFsdWUgbGVuZ3Ro
ID0gbV9vdXQubG9hZDMyKGxlZnRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgpOwot
Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGxlbmd0
aCwgbV9vdXQubG9hZDMyKHJpZ2h0SlNTdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3RoKSks
Ci0gICAgICAgICAgICB1bnN1cmUoZmFsc2VDYXNlKSwgdW5zdXJlKG5vdFRyaXZpYWxseVVuZXF1
YWxDYXNlKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhub3RUcml2aWFsbHlVbmVxdWFsQ2FzZSwgbm90RW1wdHlDYXNlKTsKLQotICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobGVuZ3RoKSwgdW5zdXJlKHRydWVDYXNlKSwgdW5zdXJl
KG5vdEVtcHR5Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5Q2FzZSwg
bGVmdFJlYWR5Q2FzZSk7Ci0KLSAgICAgICAgTFZhbHVlIGxlZnQgPSBtX291dC5sb2FkUHRyKGxl
ZnRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIExWYWx1ZSByaWdo
dCA9IG1fb3V0LmxvYWRQdHIocmlnaHRKU1N0cmluZywgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7
Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdE51bGwobGVmdCksIHVzdWFsbHkobGVm
dFJlYWR5Q2FzZSksIHJhcmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGxlZnRSZWFkeUNhc2UsIHJpZ2h0UmVhZHlDYXNlKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5ub3ROdWxsKHJpZ2h0KSwgdXN1YWxseShyaWdodFJlYWR5Q2FzZSksIHJh
cmVseShzbG93Q2FzZSkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHJpZ2h0UmVhZHlDYXNl
LCBsZWZ0OEJpdENhc2UpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIobGVmdCwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXM4Qml0KCkpKSwKLSAgICAgICAgICAgIHVuc3VyZShz
bG93Q2FzZSksIHVuc3VyZShsZWZ0OEJpdENhc2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhsZWZ0OEJpdENhc2UsIHJpZ2h0OEJpdENhc2UpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzIocmlnaHQsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSksCi0gICAg
ICAgICAgICB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUocmlnaHQ4Qml0Q2FzZSkpOwotCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHJpZ2h0OEJpdENhc2UsIGxvb3ApOwotCi0gICAgICAgIExWYWx1
ZSBsZWZ0RGF0YSA9IG1fb3V0LmxvYWRQdHIobGVmdCwgbV9oZWFwcy5TdHJpbmdJbXBsX2RhdGEp
OwotICAgICAgICBMVmFsdWUgcmlnaHREYXRhID0gbV9vdXQubG9hZFB0cihyaWdodCwgbV9oZWFw
cy5TdHJpbmdJbXBsX2RhdGEpOwotCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4QXRTdGFy
dCA9IG1fb3V0LmFuY2hvcihsZW5ndGgpOwotCi0gICAgICAgIG1fb3V0Lmp1bXAobG9vcCk7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcCwgYnl0ZXNFcXVhbCk7Ci0KLSAgICAgICAgTFZh
bHVlIGluZGV4QXRMb29wVG9wID0gbV9vdXQucGhpKG1fb3V0LmludDMyLCBpbmRleEF0U3RhcnQp
OwotICAgICAgICBMVmFsdWUgaW5kZXhJbkxvb3AgPSBtX291dC5zdWIoaW5kZXhBdExvb3BUb3As
IG1fb3V0LmludDMyT25lKTsKLQotICAgICAgICBMVmFsdWUgbGVmdEJ5dGUgPSBtX291dC5sb2Fk
OFplcm9FeHQzMigKLSAgICAgICAgICAgIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLmNoYXJhY3Rl
cnM4LCBsZWZ0RGF0YSwgbV9vdXQuemVyb0V4dFB0cihpbmRleEluTG9vcCkpKTsKLSAgICAgICAg
TFZhbHVlIHJpZ2h0Qnl0ZSA9IG1fb3V0LmxvYWQ4WmVyb0V4dDMyKAotICAgICAgICAgICAgbV9v
dXQuYmFzZUluZGV4KG1faGVhcHMuY2hhcmFjdGVyczgsIHJpZ2h0RGF0YSwgbV9vdXQuemVyb0V4
dFB0cihpbmRleEluTG9vcCkpKTsKLQotICAgICAgICBtX291dC5icmFuY2gobV9vdXQubm90RXF1
YWwobGVmdEJ5dGUsIHJpZ2h0Qnl0ZSksIHVuc3VyZShmYWxzZUNhc2UpLCB1bnN1cmUoYnl0ZXNF
cXVhbCkpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ5dGVzRXF1YWwsIHRydWVDYXNlKTsK
LQotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmRleEZvck5leHRJdGVyYXRpb24gPSBtX291dC5h
bmNob3IoaW5kZXhJbkxvb3ApOwotICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4
QXRMb29wVG9wLCBpbmRleEZvck5leHRJdGVyYXRpb24pOwotICAgICAgICBtX291dC5icmFuY2go
bV9vdXQubm90WmVybzMyKGluZGV4SW5Mb29wKSwgdW5zdXJlKGxvb3ApLCB1bnN1cmUodHJ1ZUNh
c2UpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyh0cnVlQ2FzZSwgZmFsc2VDYXNlKTsKLSAg
ICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHRydWVSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0K
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFsc2VDYXNlLCBzbG93Q2FzZSk7Ci0KLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFsc2VSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZh
bHNlKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIExWYWx1ZSBzbG93
UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQ2NCwgbV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSksIG1fY2FsbEZyYW1lLAotICAgICAgICAg
ICAgbGVmdEpTU3RyaW5nLCByaWdodEpTU3RyaW5nKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih1bmJveEJvb2xlYW4oc2xvd1Jlc3VsdFZhbHVlKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaSht
X291dC5ib29sZWFuLCB0cnVlUmVzdWx0LCBmYWxzZVJlc3VsdCwgc2xvd1Jlc3VsdCk7Ci0gICAg
fQotCi0gICAgZW51bSBTY3JhdGNoRlBSVXNhZ2UgewotICAgICAgICBEb250TmVlZFNjcmF0Y2hG
UFIsCi0gICAgICAgIE5lZWRTY3JhdGNoRlBSCi0gICAgfTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCaW5hcnlBcml0aE9wR2VuZXJhdG9yLCBTY3JhdGNoRlBSVXNhZ2Ugc2NyYXRjaEZQUlVzYWdl
ID0gRG9udE5lZWRTY3JhdGNoRlBSPgotICAgIHZvaWQgZW1pdEJpbmFyeVNuaXBwZXQoSl9KSVRP
cGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dKU1ZhbHVlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZShub2RlLT5j
aGlsZDIoKSk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQobV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkpOwotICAgICAgICBTbmlwcGV0T3Bl
cmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5yZXN1bHRU
eXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRT
b21lUmVnaXN0ZXIobGVmdCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3Rl
cihyaWdodCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ01hc2ssIFZhbHVlUmVw
OjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFw
cGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKSk7Ci0gICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxlPiBl
eGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JFeGNlcHRp
b25zKHBhdGNocG9pbnQpOwotICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3Rl
cnMgPSAxOwotICAgICAgICBwYXRjaHBvaW50LT5udW1GUFNjcmF0Y2hSZWdpc3RlcnMgPSAyOwot
ICAgICAgICBpZiAoc2NyYXRjaEZQUlVzYWdlID09IE5lZWRTY3JhdGNoRlBSKQotICAgICAgICAg
ICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzKys7Ci0gICAgICAgIHBhdGNocG9p
bnQtPmNsb2JiZXIoUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAg
ICAgU3RhdGUqIHN0YXRlID0gJm1fZnRsU3RhdGU7Ci0gICAgICAgIHBhdGNocG9pbnQtPnNldEdl
bmVyYXRvcigKLSAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNr
bWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAgICAgQWxsb3dNYWNy
b1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOwotCi0gICAgICAgICAgICAg
ICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAgICAgICAgICAg
ICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBhcmFtcyktPmp1
bXBzKGppdCk7Ci0KLSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxCaW5hcnlB
cml0aE9wR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFu
ZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJh
bXNbMl0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDApLCBw
YXJhbXMuZnBTY3JhdGNoKDEpLCBwYXJhbXMuZ3BTY3JhdGNoKDApLAotICAgICAgICAgICAgICAg
ICAgICBzY3JhdGNoRlBSVXNhZ2UgPT0gTmVlZFNjcmF0Y2hGUFIgPyBwYXJhbXMuZnBTY3JhdGNo
KDIpIDogSW52YWxpZEZQUlJlZyk7Ci0KLSAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPmdlbmVy
YXRlRmFzdFBhdGgoaml0KTsKLQotICAgICAgICAgICAgICAgIGlmIChnZW5lcmF0b3ItPmRpZEVt
aXRGYXN0UGF0aCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExp
c3QoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkxhYmVs
IGRvbmUgPSBqaXQubGFiZWwoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIHBhcmFtcy5hZGRMYXRlUGF0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgIFs9XSAo
Q0NhbGxIZWxwZXJzJiBqaXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd01h
Y3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLT5z
bG93UGF0aEp1bXBMaXN0KCkubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUs
IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5nZXQoKSwgc2xv
d1BhdGhGdW5jdGlvbiwgcGFyYW1zWzBdLmdwcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbXNbMV0uZ3ByKCksIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaml0Lmp1bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgKnN0YXRlLCBw
YXJhbXMudW5hdmFpbGFibGVSZWdpc3RlcnMoKSwgaml0LCBub2RlLT5vcmlnaW4uc2VtYW50aWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0
aW9uLCBwYXJhbXNbMF0uZ3ByKCksIHBhcmFtc1sxXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBCaW5hcnlCaXRPcEdlbmVyYXRvcj4KLSAgICB2b2lkIGVtaXRCaW5hcnlC
aXRPcFNuaXBwZXQoSl9KSVRPcGVyYXRpb25fRUpKIHNsb3dQYXRoRnVuY3Rpb24pCi0gICAgewot
ICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6
IE1ha2UgdGhpcyBkbyBleGNlcHRpb25zLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUxNjg2Ci0gICAgICAgICAgICAKLSAgICAgICAgTFZhbHVl
IGxlZnQgPSBsb3dKU1ZhbHVlKG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHJpZ2h0
ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5yZXN1bHRUeXBlKCkp
OwotICAgICAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQobV9zdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMigpKS5yZXN1bHRUeXBlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOwotICAgICAg
ICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIobGVmdCk7Ci0gICAgICAgIHBhdGNocG9p
bnQtPmFwcGVuZFNvbWVSZWdpc3RlcihyaWdodCk7Ci0gICAgICAgIHBhdGNocG9pbnQtPmFwcGVu
ZChtX3RhZ01hc2ssIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0g
ICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZChtX3RhZ1R5cGVOdW1iZXIsIFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7Ci0gICAgICAgIFJlZlB0cjxQYXRjaHBv
aW50RXhjZXB0aW9uSGFuZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFy
ZVBhdGNocG9pbnRGb3JFeGNlcHRpb25zKHBhdGNocG9pbnQpOwotICAgICAgICBwYXRjaHBvaW50
LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgPSAxOwotICAgICAgICBwYXRjaHBvaW50LT5jbG9iYmVy
KFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMoKSk7Ci0gICAgICAgIFN0YXRlKiBz
dGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3IoCi0g
ICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRp
b25QYXJhbXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVn
aXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgQm94PENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGV4Y2VwdGlvbnMgPQotICAg
ICAgICAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGUtPnNjaGVkdWxlRXhpdENyZWF0aW9uKHBh
cmFtcyktPmp1bXBzKGppdCk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGF1dG8gZ2VuZXJhdG9yID0gQm94PEJpbmFyeUJpdE9wR2VuZXJhdG9yPjo6Y3JlYXRlKAotICAg
ICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBKU1ZhbHVlUmVncyhw
YXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhwYXJhbXNb
MV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkpLCBwYXJhbXMuZ3BTY3JhdGNo
KDApKTsKLQotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+Z2VuZXJhdGVGYXN0UGF0aChqaXQp
OwotICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+ZW5kSnVtcExpc3QoKS5saW5rKCZqaXQpOwot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFiZWwgZG9uZSA9IGppdC5sYWJlbCgpOwot
Ci0gICAgICAgICAgICAgICAgcGFyYW1zLmFkZExhdGVQYXRoKAotICAgICAgICAgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3ItPnNs
b3dQYXRoSnVtcExpc3QoKS5saW5rKCZqaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3RhdGUsIHBhcmFtcy51
bmF2YWlsYWJsZVJlZ2lzdGVycygpLCBqaXQsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmdldCgpLCBzbG93UGF0aEZ1bmN0aW9u
LCBwYXJhbXNbMF0uZ3ByKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zWzFd
LmdwcigpLCBwYXJhbXNbMl0uZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0Lmp1
bXAoKS5saW5rVG8oZG9uZSwgJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgfSk7Ci0KLSAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGVtaXRSaWdodFNoaWZ0U25pcHBldChKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaGlm
dFR5cGUgc2hpZnRUeXBlKQotICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZG8gZXhjZXB0aW9ucy4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTY4NgotICAg
ICAgICAgICAgCi0gICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93SlNWYWx1ZShub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0pTVmFsdWUobm9kZS0+Y2hpbGQyKCkpOwot
Ci0gICAgICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkucmVzdWx0VHlwZSgpKTsKLSAgICAgICAgU25pcHBldE9wZXJhbmQgcmlnaHRP
cGVyYW5kKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDIoKSkucmVzdWx0VHlwZSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVy
KGxlZnQpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmRTb21lUmVnaXN0ZXIocmlnaHQpOwot
ICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdNYXNrLCBWYWx1ZVJlcDo6cmVnKEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICBwYXRjaHBvaW50LT5hcHBlbmQobV90YWdU
eXBlTnVtYmVyLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcikp
OwotICAgICAgICBSZWZQdHI8UGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZT4gZXhjZXB0aW9uSGFu
ZGxlID0KLSAgICAgICAgICAgIHByZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhwYXRjaHBv
aW50KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAg
ICAgICAgcGF0Y2hwb2ludC0+bnVtRlBTY3JhdGNoUmVnaXN0ZXJzID0gMTsKLSAgICAgICAgcGF0
Y2hwb2ludC0+Y2xvYmJlcihSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzKCkpOwot
ICAgICAgICBTdGF0ZSogc3RhdGUgPSAmbV9mdGxTdGF0ZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+
c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
U3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICBBbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEJveDxDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBl
eGNlcHRpb25zID0KLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVs
ZUV4aXRDcmVhdGlvbihwYXJhbXMpLT5qdW1wcyhqaXQpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBhdXRvIGdlbmVyYXRvciA9IEJveDxKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yPjo6Y3JlYXRlKAotICAgICAgICAgICAgICAgICAgICBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVy
YW5kLCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpLAotICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhwYXJhbXNbMV0uZ3ByKCkpLCBKU1ZhbHVlUmVncyhwYXJhbXNbMl0uZ3ByKCkp
LAotICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZnBTY3JhdGNoKDApLCBwYXJhbXMuZ3BTY3Jh
dGNoKDApLCBJbnZhbGlkRlBSUmVnLCBzaGlmdFR5cGUpOwotCi0gICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yLT5nZW5lcmF0ZUZhc3RQYXRoKGppdCk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LT5lbmRKdW1wTGlzdCgpLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBkb25lID0gaml0LmxhYmVsKCk7Ci0KLSAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdlbmVyYXRvci0+c2xvd1BhdGhKdW1wTGlzdCgpLmxpbmsoJmppdCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKSiBzbG93UGF0aEZ1
bmN0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdFR5cGUgPT0gSklUUmln
aHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IG9wZXJhdGlvblZhbHVlQml0UlNoaWZ0IDogb3BlcmF0aW9uVmFsdWVCaXRVUlNoaWZ0Owot
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzdGF0ZSwgcGFyYW1zLnVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksIGppdCwgbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbnMuZ2V0KCksIHNsb3dQYXRoRnVuY3Rpb24sIHBh
cmFtc1swXS5ncHIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNbMV0uZ3By
KCksIHBhcmFtc1syXS5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuanVtcCgp
LmxpbmtUbyhkb25lLCAmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9KTsKLQotICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgIH0KLQotICAgIExW
YWx1ZSBhbGxvY2F0ZUNlbGwoTFZhbHVlIGFsbG9jYXRvciwgTEJhc2ljQmxvY2sgc2xvd1BhdGgp
Ci0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJvYmplY3QgYWxsb2NhdGlvbiBzdWNjZXNzIikpOwotICAgIAotICAgICAgICBMVmFsdWUg
cmVzdWx0OwotICAgICAgICBMVmFsdWUgY29uZGl0aW9uOwotICAgICAgICBpZiAoT3B0aW9uczo6
Zm9yY2VHQ1Nsb3dQYXRocygpKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBtX291dC5pbnRQdHJa
ZXJvOwotICAgICAgICAgICAgY29uZGl0aW9uID0gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubG9hZFB0cigKLSAgICAgICAg
ICAgICAgICBhbGxvY2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7
Ci0gICAgICAgICAgICBjb25kaXRpb24gPSBtX291dC5ub3ROdWxsKHJlc3VsdCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9vdXQuYnJhbmNoKGNvbmRpdGlvbiwgdXN1YWxseShzdWNjZXNzKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzdWNjZXNz
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LnN0b3JlUHRyKAotICAgICAgICAgICAgbV9vdXQu
bG9hZFB0cihyZXN1bHQsIG1faGVhcHMuSlNDZWxsX2ZyZWVMaXN0TmV4dCksCi0gICAgICAgICAg
ICBhbGxvY2F0b3IsIG1faGVhcHMuTWFya2VkQWxsb2NhdG9yX2ZyZWVMaXN0SGVhZCk7Ci0KLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzdG9yZVN0cnVjdHVy
ZShMVmFsdWUgb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIG1f
b3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlkKCkpLCBvYmplY3QsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5vYmplY3RJbml0aWFsaXphdGlvbkJs
b2IoKSksCi0gICAgICAgICAgICBvYmplY3QsIG1faGVhcHMuSlNDZWxsX3VzZWZ1bEJ5dGVzKTsK
LSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVDZWxsKExWYWx1ZSBhbGxvY2F0b3IsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBMQmFzaWNCbG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNlbGwoYWxsb2NhdG9yLCBzbG93UGF0aCk7Ci0gICAgICAg
IHN0b3JlU3RydWN0dXJlKHJlc3VsdCwgc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoCi0gICAgICAgIExWYWx1ZSBh
bGxvY2F0b3IsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNC
bG9jayBzbG93UGF0aCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBhbGxvY2F0ZUNl
bGwoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQ
dHIoYnV0dGVyZmx5LCByZXN1bHQsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2xh
c3NUeXBlPgotICAgIExWYWx1ZSBhbGxvY2F0ZU9iamVjdCgKLSAgICAgICAgc2l6ZV90IHNpemUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKLSAgICB7Ci0gICAgICAgIE1hcmtlZEFsbG9jYXRvciogYWxsb2NhdG9yID0gJnZtKCku
aGVhcC5hbGxvY2F0b3JGb3JPYmplY3RPZlR5cGU8Q2xhc3NUeXBlPihzaXplKTsKLSAgICAgICAg
cmV0dXJuIGFsbG9jYXRlT2JqZWN0KG1fb3V0LmNvbnN0SW50UHRyKGFsbG9jYXRvciksIHN0cnVj
dHVyZSwgYnV0dGVyZmx5LCBzbG93UGF0aCk7Ci0gICAgfQotICAgIAotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENsYXNzVHlwZT4KLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIExWYWx1ZSBidXR0ZXJmbHksIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFsbG9jYXRlT2JqZWN0PENsYXNzVHlwZT4oCi0gICAgICAgICAgICBD
bGFzc1R5cGU6OmFsbG9jYXRpb25TaXplKDApLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1Bh
dGgpOwotICAgIH0KLSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDbGFzc1R5cGU+Ci0gICAg
TFZhbHVlIGFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCgKLSAgICAgICAgTFZhbHVlIHNpemUs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBMVmFsdWUgYnV0dGVyZmx5LCBMQmFzaWNCbG9jayBzbG93
UGF0aCkKLSAgICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRTcGFjZTo6cHJlY2lz
ZVN0ZXAgJiAoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0gMSkpLCAiTWFya2VkU3BhY2U6OnBy
ZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7Ci0gICAgICAgIHN0YXRpY19hc3Nl
cnQoIShNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCAmIChNYXJrZWRTcGFjZTo6aW1wcmVjaXNl
U3RlcCAtIDEpKSwgIk1hcmtlZFNwYWNlOjppbXByZWNpc2VTdGVwIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7Ci0KLSAgICAgICAgTFZhbHVlIHN1YnNwYWNlID0gbV9vdXQuY29uc3RJbnRQdHIo
JnZtKCkuaGVhcC5zdWJzcGFjZUZvck9iamVjdE9mVHlwZTxDbGFzc1R5cGU+KCkpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc21hbGxDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBzbWFsbCBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayBsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2sgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImFsbG9jYXRlVmFyaWFibGVTaXplZE9iamVjdCBsYXJnZSBvciBvdmVyc2l6ZSBjYXNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBsYXJnZUNhc2VCbG9jayA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiYWxsb2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGxhcmdlIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYWxs
b2NhdGVWYXJpYWJsZVNpemVkT2JqZWN0IGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAg
ICAgIExWYWx1ZSB1cHJvdW5kZWRTaXplID0gbV9vdXQuYWRkKHNpemUsIG1fb3V0LmNvbnN0SW50
MzIoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwIC0gMSkpOwotICAgICAgICBMVmFsdWUgaXNTbWFs
bCA9IG1fb3V0LmJlbG93KHVwcm91bmRlZFNpemUsIG1fb3V0LmNvbnN0SW50MzIoTWFya2VkU3Bh
Y2U6OnByZWNpc2VDdXRvZmYpKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzU21hbGwsIHVuc3Vy
ZShzbWFsbENhc2VCbG9jayksIHVuc3VyZShsYXJnZU9yT3ZlcnNpemVDYXNlQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc21h
bGxDYXNlQmxvY2ssIGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jayk7Ci0gICAgICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgbV9oZWFwcy5NYXJr
ZWRTcGFjZV9TdWJzcGFjZV9wcmVjaXNlQWxsb2NhdG9ycywgc3Vic3BhY2UsCi0gICAgICAgICAg
ICBtX291dC56ZXJvRXh0UHRyKG1fb3V0LmxTaHIodXByb3VuZGVkU2l6ZSwgbV9vdXQuY29uc3RJ
bnQzMihnZXRMU0JTZXQoTWFya2VkU3BhY2U6OnByZWNpc2VTdGVwKSkpKSk7Ci0gICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNtYWxsQWxsb2NhdG9yID0gbV9vdXQuYW5jaG9yKGFkZHJlc3MudmFsdWUo
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGxhcmdlT3JPdmVyc2l6ZUNhc2VCbG9jaywgbGFyZ2VDYXNlQmxvY2sp
OwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5iZWxvdyh1cHJvdW5k
ZWRTaXplLCBtX291dC5jb25zdEludDMyKE1hcmtlZFNwYWNlOjppbXByZWNpc2VDdXRvZmYpKSwK
LSAgICAgICAgICAgIHVzdWFsbHkobGFyZ2VDYXNlQmxvY2spLCByYXJlbHkoc2xvd1BhdGgpKTsK
LSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGxhcmdlQ2FzZUJsb2NrLCBjb250aW51
YXRpb24pOwotICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAg
bV9oZWFwcy5NYXJrZWRTcGFjZV9TdWJzcGFjZV9pbXByZWNpc2VBbGxvY2F0b3JzLCBzdWJzcGFj
ZSwKLSAgICAgICAgICAgIG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubFNocih1cHJvdW5kZWRTaXpl
LCBtX291dC5jb25zdEludDMyKGdldExTQlNldChNYXJrZWRTcGFjZTo6aW1wcmVjaXNlU3RlcCkp
KSkpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBsYXJnZUFsbG9jYXRvciA9IG1fb3V0LmFuY2hv
cihhZGRyZXNzLnZhbHVlKCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgTFZhbHVlIGFsbG9jYXRvciA9IG1fb3V0LnBoaShtX291dC5pbnRQdHIsIHNtYWxs
QWxsb2NhdG9yLCBsYXJnZUFsbG9jYXRvcik7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gYWxs
b2NhdGVPYmplY3QoYWxsb2NhdG9yLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSwgc2xvd1BhdGgpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBh
bGxvY2F0aW9uLgotICAgIExWYWx1ZSBhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChMVmFs
dWUgc2l6ZSwgTEJhc2ljQmxvY2sgc2xvd1BhdGgpCi0gICAgewotICAgICAgICBDb3BpZWRBbGxv
Y2F0b3ImIGFsbG9jYXRvciA9IHZtKCkuaGVhcC5zdG9yYWdlQWxsb2NhdG9yKCk7Ci0gICAgICAg
IAotICAgICAgICBMQmFzaWNCbG9jayBzdWNjZXNzID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJz
dG9yYWdlIGFsbG9jYXRpb24gc3VjY2VzcyIpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBy
ZW1haW5pbmcgPSBtX291dC5sb2FkUHRyKG1fb3V0LmFic29sdXRlKCZhbGxvY2F0b3IubV9jdXJy
ZW50UmVtYWluaW5nKSk7Ci0gICAgICAgIExWYWx1ZSBuZXdSZW1haW5pbmcgPSBtX291dC5zdWIo
cmVtYWluaW5nLCBzaXplKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAg
ICAgICAgIG1fb3V0Lmxlc3NUaGFuKG5ld1JlbWFpbmluZywgbV9vdXQuaW50UHRyWmVybyksCi0g
ICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHN1Y2Nlc3MpKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN1Y2Nlc3MpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuc3RvcmVQdHIobmV3UmVtYWluaW5nLCBtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3Vy
cmVudFJlbWFpbmluZykpOwotICAgICAgICByZXR1cm4gbV9vdXQuc3ViKAotICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihtX291dC5hYnNvbHV0ZSgmYWxsb2NhdG9yLm1fY3VycmVudFBheWxvYWRF
bmQpKSwgbmV3UmVtYWluaW5nKTsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYWxsb2NhdGVCYXNpY1N0
b3JhZ2UoTFZhbHVlIHNpemUsIExCYXNpY0Jsb2NrIHNsb3dQYXRoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LnN1YihhbGxvY2F0ZUJhc2ljU3RvcmFnZUFuZEdldEVuZChzaXplLCBzbG93
UGF0aCksIHNpemUpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgYWxsb2NhdGVPYmplY3QoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUg
PSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwotICAgICAgICBNYXJrZWRBbGxvY2F0b3IqIGFsbG9jYXRvciA9ICZ2bSgpLmhlYXAuYWxs
b2NhdG9yRm9yT2JqZWN0V2l0aG91dERlc3RydWN0b3IoYWxsb2NhdGlvblNpemUpOwotICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImFsbG9jYXRlT2JqZWN0IHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhbGxvY2F0ZU9iamVjdCBjb250aW51YXRp
b24iKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmlu
c2VydE5ld0Jsb2Nrc0JlZm9yZShzbG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBWYWx1ZUZy
b21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGFsbG9jYXRlT2JqZWN0KAotICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWxsb2NhdG9yKSwgc3RydWN0dXJlLCBtX291dC5pbnRQ
dHJaZXJvLCBzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7Ci0KLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0
aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAt
PiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlv
bk5ld09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93
UmVzdWx0VmFsdWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnRQdHIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OwotICAgIH0KLSAgICAKLSAgICBzdHJ1Y3QgQXJyYXlWYWx1ZXMgewotICAgICAgICBBcnJheVZh
bHVlcygpCi0gICAgICAgICAgICA6IGFycmF5KDApCi0gICAgICAgICAgICAsIGJ1dHRlcmZseSgw
KQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFycmF5VmFsdWVzKExW
YWx1ZSBhcnJheSwgTFZhbHVlIGJ1dHRlcmZseSkKLSAgICAgICAgICAgIDogYXJyYXkoYXJyYXkp
Ci0gICAgICAgICAgICAsIGJ1dHRlcmZseShidXR0ZXJmbHkpCi0gICAgICAgIHsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGFycmF5OwotICAgICAgICBMVmFsdWUgYnV0dGVy
Zmx5OwotICAgIH07Ci0gICAgQXJyYXlWYWx1ZXMgYWxsb2NhdGVKU0FycmF5KAotICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdW5zaWduZWQgbnVtRWxlbWVudHMsIExCYXNpY0Jsb2NrIHNs
b3dQYXRoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKAotICAgICAgICAgICAgaGFzVW5kZWNpZGVk
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNJbnQzMihzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgfHwgaGFzRG91YmxlKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICB8fCBoYXNDb250aWd1b3VzKHN0cnVjdHVy
ZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHZlY3Rvckxl
bmd0aCA9IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgbnVtRWxlbWVudHMpOwotICAgICAgICAK
LSAgICAgICAgTFZhbHVlIGVuZE9mU3RvcmFnZSA9IGFsbG9jYXRlQmFzaWNTdG9yYWdlQW5kR2V0
RW5kKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoc2l6ZW9mKEpTVmFsdWUpICogdmVj
dG9yTGVuZ3RoICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSksCi0gICAgICAgICAgICBzbG93UGF0
aCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgYnV0dGVyZmx5ID0gbV9vdXQuc3ViKAotICAg
ICAgICAgICAgZW5kT2ZTdG9yYWdlLCBtX291dC5jb25zdEludFB0cihzaXplb2YoSlNWYWx1ZSkg
KiB2ZWN0b3JMZW5ndGgpKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBvYmplY3QgPSBhbGxv
Y2F0ZU9iamVjdDxKU0FycmF5PigKLSAgICAgICAgICAgIHN0cnVjdHVyZSwgYnV0dGVyZmx5LCBz
bG93UGF0aCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5zdG9yZTMyKG1fb3V0LmNvbnN0SW50
MzIobnVtRWxlbWVudHMpLCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0
aCk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuY29uc3RJbnQzMih2ZWN0b3JMZW5ndGgp
LCBidXR0ZXJmbHksIG1faGVhcHMuQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoaGFzRG91YmxlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKSB7Ci0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1FbGVtZW50czsgaSA8IHZlY3Rvckxlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCgKLSAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQ2NChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4oUE5hTikpLAotICAgICAg
ICAgICAgICAgICAgICBidXR0ZXJmbHksIG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXNb
aV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
QXJyYXlWYWx1ZXMob2JqZWN0LCBidXR0ZXJmbHkpOwotICAgIH0KLSAgICAKLSAgICBBcnJheVZh
bHVlcyBhbGxvY2F0ZUpTQXJyYXkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVkIG51bUVs
ZW1lbnRzKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkpTQXJyYXkgYWxsb2NhdGlvbiBzbG93IHBhdGgiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiSlNBcnJheSBh
bGxvY2F0aW9uIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKHNsb3dQYXRoKTsKLSAgICAg
ICAgCi0gICAgICAgIEFycmF5VmFsdWVzIGZhc3RWYWx1ZXMgPSBhbGxvY2F0ZUpTQXJyYXkoc3Ry
dWN0dXJlLCBudW1FbGVtZW50cywgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0QXJyYXkgPSBtX291dC5hbmNob3IoZmFzdFZhbHVlcy5hcnJheSk7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIGZhc3RCdXR0ZXJmbHkgPSBtX291dC5hbmNob3IoZmFzdFZhbHVlcy5idXR0ZXJm
bHkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAg
ICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0KLSAg
ICAgICAgTFZhbHVlIHNsb3dBcnJheVZhbHVlID0gbGF6eVNsb3dQYXRoKAotICAgICAgICAgICAg
Wz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xv
d1BhdGg6OkdlbmVyYXRvcj4gewotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6
ZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobnVtRWxlbWVudHMpKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93QXJyYXkgPSBtX291dC5hbmNob3Ioc2xvd0FycmF5VmFsdWUpOwotICAgICAgICBWYWx1
ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9v
dXQubG9hZFB0cihzbG93QXJyYXlWYWx1ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsK
LQotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiBBcnJheVZhbHVlcygKLSAgICAgICAgICAgIG1fb3V0LnBoaShtX291dC5pbnRQdHIs
IGZhc3RBcnJheSwgc2xvd0FycmF5KSwKLSAgICAgICAgICAgIG1fb3V0LnBoaShtX291dC5pbnRQ
dHIsIGZhc3RCdXR0ZXJmbHksIHNsb3dCdXR0ZXJmbHkpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGJvb2xpZnkoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtp
bmQoKSkgewotICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6Ci0gICAgICAgIGNhc2UgS25vd25Cb29s
ZWFuVXNlOgotICAgICAgICAgICAgcmV0dXJuIGxvd0Jvb2xlYW4oZWRnZSk7Ci0gICAgICAgIGNh
c2UgSW50MzJVc2U6Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQubm90WmVybzMyKGxvd0ludDMy
KGVkZ2UpKTsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6Ci0gICAgICAgICAgICByZXR1cm4g
bV9vdXQuZG91YmxlTm90RXF1YWxBbmRPcmRlcmVkKGxvd0RvdWJsZShlZGdlKSwgbV9vdXQuZG91
YmxlWmVybyk7Ci0gICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKLSAgICAgICAgICAgIHJl
dHVybiBtX291dC5sb2dpY2FsTm90KAotICAgICAgICAgICAgICAgIGVxdWFsTnVsbE9yVW5kZWZp
bmVkKAotICAgICAgICAgICAgICAgICAgICBlZGdlLCBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3Qs
IFNwZWN1bGF0ZU51bGxPclVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICAgICAgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgICAgIGNhc2UgU3RyaW5nVXNlOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3RyaW5nVmFsdWUgPSBsb3dTdHJpbmcoZWRnZSk7Ci0gICAgICAgICAgICBMVmFs
dWUgbGVuZ3RoID0gbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RyaW5nVmFsdWUsIG1faGVhcHMu
SlNTdHJpbmdfbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX291dC5ub3RFcXVhbChsZW5n
dGgsIG1fb3V0LmludDMyWmVybyk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBVbnR5cGVkVXNl
OiB7Ci0gICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBJbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgY29udHJvbCBm
bG93IHN0cnVjdHVyZToKLSAgICAgICAgICAgIC8vIGlmICh2YWx1ZSBpcyBjZWxsKSB7Ci0gICAg
ICAgICAgICAvLyAgICAgaWYgKHZhbHVlIGlzIHN0cmluZykKLSAgICAgICAgICAgIC8vICAgICAg
ICAgcmVzdWx0ID0gISF2YWx1ZS0+bGVuZ3RoCi0gICAgICAgICAgICAvLyAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyAgICAgICAgIGRvIGV2aWwgdGhpbmdzIGZvciBtYXNxdWVyYWRlcy1hcy11
bmRlZmluZWQKLSAgICAgICAgICAgIC8vICAgICAgICAgcmVzdWx0ID0gdHJ1ZQotICAgICAgICAg
ICAgLy8gICAgIH0KLSAgICAgICAgICAgIC8vIH0gZWxzZSBpZiAodmFsdWUgaXMgaW50MzIpIHsK
LSAgICAgICAgICAgIC8vICAgICByZXN1bHQgPSAhIXVuYm94SW50MzIodmFsdWUpCi0gICAgICAg
ICAgICAvLyB9IGVsc2UgaWYgKHZhbHVlIGlzIG51bWJlcikgewotICAgICAgICAgICAgLy8gICAg
IHJlc3VsdCA9ICEhdW5ib3hEb3VibGUodmFsdWUpCi0gICAgICAgICAgICAvLyB9IGVsc2Ugewot
ICAgICAgICAgICAgLy8gICAgIHJlc3VsdCA9IHZhbHVlID09IGpzVHJ1ZQotICAgICAgICAgICAg
Ly8gfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIGNlbGwgY2FzZSIpKTsKLSAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJv
b2xpZnkgdW50eXBlZCBzdHJpbmcgY2FzZSIpKTsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5v
dFN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJvb2xpZnkgdW50eXBlZCBub3Qg
c3RyaW5nIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiQm9vbGlmeSB1bnR5cGVkIG5vdCBjZWxsIGNhc2UiKSk7Ci0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBpbnQzMkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkJvb2xpZnkgdW50eXBlZCBpbnQzMiBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bm90SW50MzJDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbm90
IGludDMyIGNhc2UiKSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgZG91YmxlIGNhc2UiKSk7Ci0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBub3REb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJCb29saWZ5IHVudHlwZWQgbm90IGRvdWJsZSBjYXNlIikpOwotICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlw
ZWQgY29udGludWF0aW9uIikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8VmFs
dWVGcm9tQmxvY2s+IHJlc3VsdHM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1bnN1cmUoY2VsbENhc2UpLCB1
bnN1cmUobm90Q2VsbENhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgc3RyaW5nQ2FzZSk7Ci0gICAg
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHBy
b3ZlblR5cGUoZWRnZSkgJiBTcGVjQ2VsbCksCi0gICAgICAgICAgICAgICAgdW5zdXJlKHN0cmlu
Z0Nhc2UpLCB1bnN1cmUobm90U3RyaW5nQ2FzZSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhzdHJpbmdDYXNlLCBub3RTdHJpbmdDYXNlKTsKLSAgICAgICAgICAg
IExWYWx1ZSBub25FbXB0eVN0cmluZyA9IG1fb3V0Lm5vdFplcm8zMigKLSAgICAgICAgICAgICAg
ICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZSh2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ19sZW5ndGgp
KTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihub25FbXB0eVN0cmlu
ZykpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhub3RTdHJpbmdDYXNlLCBub3RDZWxsQ2FzZSk7
Ci0gICAgICAgICAgICBMVmFsdWUgaXNUcnV0aHlPYmplY3Q7Ci0gICAgICAgICAgICBpZiAobWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAg
ICAgICBpc1RydXRoeU9iamVjdCA9IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbWFzcXVlcmFkZXNDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJCb29saWZ5IHVudHlwZWQgbWFzcXVlcmFkZXMgY2FzZSIpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNo
b3IobV9vdXQuYm9vbGVhblRydWUpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBtX291dC5icmFuY2goCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hl
YXBzLkpTQ2VsbF90eXBlSW5mb0ZsYWdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLAotICAgICAgICAgICAgICAgICAg
ICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShtYXNxdWVyYWRlc0Nhc2UpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtYXNxdWVyYWRlc0Nh
c2UpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlzVHJ1dGh5T2JqZWN0ID0g
bV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSksCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobG9hZFN0cnVjdHVyZSh2YWx1ZSksIG1faGVhcHMu
U3RydWN0dXJlX2dsb2JhbE9iamVjdCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVz
dWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGlzVHJ1dGh5T2JqZWN0KSk7Ci0gICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBpbnQzMkNhc2UpOwotICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgICAgIGlzSW50MzIodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkgJiB+
U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShpbnQzMkNhc2UpLCB1bnN1cmUobm90
SW50MzJDYXNlKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlu
dDMyQ2FzZSwgbm90SW50MzJDYXNlKTsKLSAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0
LmFuY2hvcihtX291dC5ub3RaZXJvMzIodW5ib3hJbnQzMih2YWx1ZSkpKSk7Ci0gICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdEludDMyQ2FzZSwgZG91YmxlQ2FzZSk7Ci0gICAgICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUsIHByb3ZlblR5cGUoZWRn
ZSkgJiB+U3BlY0NlbGwpLAotICAgICAgICAgICAgICAgIHVuc3VyZShkb3VibGVDYXNlKSwgdW5z
dXJlKG5vdERvdWJsZUNhc2UpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oZG91YmxlQ2FzZSwgbm90RG91YmxlQ2FzZSk7Ci0gICAgICAgICAgICBMVmFsdWUgZG91
YmxlSXNUcnV0aHkgPSBtX291dC5kb3VibGVOb3RFcXVhbEFuZE9yZGVyZWQoCi0gICAgICAgICAg
ICAgICAgdW5ib3hEb3VibGUodmFsdWUpLCBtX291dC5jb25zdERvdWJsZSgwKSk7Ci0gICAgICAg
ICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IoZG91YmxlSXNUcnV0aHkpKTsKLSAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90RG91YmxlQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAg
ICAgIExWYWx1ZSBtaXNjSXNUcnV0aHkgPSBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICB2
YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkp
OwotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1pc2NJc1RydXRoeSkp
OwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgcmVzdWx0cyk7Ci0gICAgICAg
IH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAotICAgIGVudW0gU3RyaW5nT3JPYmplY3RNb2RlIHsKLSAgICAgICAgQWxsQ2Vs
bHNBcmVGYWxzZSwKLSAgICAgICAgQ2VsbENhc2VTcGVjdWxhdGVzT2JqZWN0Ci0gICAgfTsKLSAg
ICBlbnVtIEVxdWFsTnVsbE9yVW5kZWZpbmVkTW9kZSB7Ci0gICAgICAgIEVxdWFsTnVsbCwKLSAg
ICAgICAgRXF1YWxVbmRlZmluZWQsCi0gICAgICAgIEVxdWFsTnVsbE9yVW5kZWZpbmVkLAotICAg
ICAgICBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQKLSAgICB9OwotICAgIExWYWx1ZSBlcXVhbE51
bGxPclVuZGVmaW5lZCgKLSAgICAgICAgRWRnZSBlZGdlLCBTdHJpbmdPck9iamVjdE1vZGUgY2Vs
bE1vZGUsIEVxdWFsTnVsbE9yVW5kZWZpbmVkTW9kZSBwcmltaXRpdmVNb2RlLAotICAgICAgICBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG9wZXJhbmRNb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQotICAgIHsKLSAgICAgICAgYm9vbCB2YWxpZFdhdGNocG9pbnQgPSBtYXNxdWVyYWRl
c0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZCgpOwotICAgICAgICAKLSAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBvcGVyYW5kTW9kZSk7Ci0gICAgICAgIAot
ICAgICAgICBMQmFzaWNCbG9jayBjZWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXF1
YWxOdWxsT3JVbmRlZmluZWQgY2VsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBwcmlt
aXRpdmVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBw
cmltaXRpdmUgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJFcXVhbE51bGxPclVuZGVmaW5lZCBjb250aW51YXRpb24iKSk7
Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goaXNOb3RDZWxsKHZhbHVlLCBwcm92ZW5U
eXBlKGVkZ2UpKSwgdW5zdXJlKHByaW1pdGl2ZUNhc2UpLCB1bnN1cmUoY2VsbENhc2UpKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oY2Vs
bENhc2UsIHByaW1pdGl2ZUNhc2UpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJv
bUJsb2NrLCAzPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChjZWxsTW9kZSkg
ewotICAgICAgICBjYXNlIEFsbENlbGxzQXJlRmFsc2U6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDZWxsQ2FzZVNwZWN1bGF0ZXNPYmplY3Q6Ci0gICAgICAgICAgICBGVExfVFlQ
RV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCAoflNw
ZWNDZWxsKSB8IFNwZWNPYmplY3QsIGlzTm90T2JqZWN0KHZhbHVlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHZhbGlkV2F0Y2hwb2ludCkg
ewotICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5G
YWxzZSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbWFzcXVlcmFkZXNDYXNlID0KLSAgICAg
ICAgICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkVxdWFsTnVsbE9yVW5kZWZpbmVkIG1h
c3F1ZXJhZGVzIGNhc2UiKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICByZXN1bHRz
LmFwcGVuZChtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNlKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgICAgICBtX291dC50ZXN0Tm9u
WmVybzMyKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLAotICAgICAgICAgICAgICAgIHJh
cmVseShtYXNxdWVyYWRlc0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhtYXNxdWVyYWRlc0Nhc2UsIHByaW1pdGl2
ZUNhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9h
ZFN0cnVjdHVyZSh2YWx1ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdHMuYXBw
ZW5kKG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIobV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0
cihzdHJ1Y3R1cmUsIG1faGVhcHMuU3RydWN0dXJlX2dsb2JhbE9iamVjdCkpKSk7Ci0gICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHByaW1pdGl2ZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBMVmFsdWUgcHJpbWl0aXZlUmVzdWx0OwotICAgICAgICBzd2l0Y2ggKHByaW1p
dGl2ZU1vZGUpIHsKLSAgICAgICAgY2FzZSBFcXVhbE51bGw6Ci0gICAgICAgICAgICBwcmltaXRp
dmVSZXN1bHQgPSBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChWYWx1ZU51bGwp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVxdWFsVW5kZWZpbmVkOgotICAg
ICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVxdWFsTnVsbE9yVW5kZWZpbmVkOgotICAgICAgICAgICAgcHJpbWl0aXZlUmVzdWx0ID0gaXNP
dGhlcih2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTcGVjdWxhdGVOdWxsT3JVbmRlZmluZWQ6Ci0gICAgICAgICAgICBGVExfVFlQRV9D
SEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjQ2Vs
bCB8IFNwZWNPdGhlciwgaXNOb3RPdGhlcih2YWx1ZSkpOwotICAgICAgICAgICAgcHJpbWl0aXZl
UmVzdWx0ID0gbV9vdXQuYm9vbGVhblRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3IocHJpbWl0aXZlUmVzdWx0KSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCByZXN1bHRzKTsKLSAgICB9Ci0gICAgCi0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgotICAgIHZvaWQgY29udGlndW91c1B1
dEJ5VmFsT3V0T2ZCb3VuZHMoCi0gICAgICAgIEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9u
LCBMVmFsdWUgYmFzZSwgTFZhbHVlIHN0b3JhZ2UsIExWYWx1ZSBpbmRleCwgTFZhbHVlIHZhbHVl
LAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24pCi0gICAgewotICAgICAgICBMVmFs
dWUgaXNOb3RJbkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAgICAgIGluZGV4
LCBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKTsKLSAgICAgICAgaWYgKCFtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbm90SW5Cb3VuZHNDYXNlID0KLSAgICAgICAg
ICAgICAgICBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlB1dEJ5VmFsIG5vdCBpbiBib3VuZHMiKSk7
Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBwZXJmb3JtU3RvcmUgPQotICAgICAgICAgICAgICAg
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwgcGVyZm9ybSBzdG9yZSIpKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEluQm91bmRzLCB1bnN1
cmUobm90SW5Cb3VuZHNDYXNlKSwgdW5zdXJlKHBlcmZvcm1TdG9yZSkpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhu
b3RJbkJvdW5kc0Nhc2UsIHBlcmZvcm1TdG9yZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBMVmFsdWUgaXNPdXRPZkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbCgKLSAgICAgICAg
ICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5C
dXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAoIW1fbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAwLCBpc091dE9mQm91bmRzKTsKLSAg
ICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRz
Q2FzZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlW
YWwgb3V0IG9mIGJvdW5kcyIpKTsKLSAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBob2xlQ2Fz
ZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiUHV0QnlWYWwg
aG9sZSBjYXNlIikpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291
dC5icmFuY2goaXNPdXRPZkJvdW5kcywgcmFyZWx5KG91dE9mQm91bmRzQ2FzZSksIHVzdWFsbHko
aG9sZUNhc2UpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgTEJhc2lj
QmxvY2sgaW5uZXJMYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzQ2FzZSwgaG9s
ZUNhc2UpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB2bUNhbGwoCi0g
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnZvaWRUeXBlLCBtX291dC5vcGVyYXRpb24oc2xvd1Bh
dGhGdW5jdGlvbiksCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBiYXNlLCBpbmRl
eCwgdmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGhvbGVDYXNlLCBpbm5lckxhc3ROZXh0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMigKLSAgICAgICAgICAgICAg
ICBtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSwKLSAgICAgICAgICAgICAgICBzdG9y
YWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9vdXQuanVtcChwZXJmb3JtU3RvcmUpOwotICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8ocGVyZm9ybVN0b3JlLCBsYXN0TmV4dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBidWlsZFN3aXRjaChTd2l0Y2hEYXRhKiBkYXRhLCBMVHlwZSB0eXBlLCBMVmFs
dWUgc3dpdGNoVmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodHlwZSA9PSBtX291dC5pbnRQ
dHIgfHwgdHlwZSA9PSBtX291dC5pbnQzMik7Ci0KLSAgICAgICAgVmVjdG9yPFN3aXRjaENhc2U+
IGNhc2VzOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS0+Y2FzZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFN3aXRjaENhc2UgbmV3Q2FzZTsKLQotICAgICAgICAg
ICAgaWYgKHR5cGUgPT0gbV9vdXQuaW50UHRyKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2FzZSA9
IFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNo
TG9va3VwVmFsdWUoZGF0YS0+a2luZCkpLAotICAgICAgICAgICAgICAgICAgICBsb3dCbG9jayhk
YXRhLT5jYXNlc1tpXS50YXJnZXQuYmxvY2spLCBXZWlnaHQoZGF0YS0+Y2FzZXNbaV0udGFyZ2V0
LmNvdW50KSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gbV9vdXQuaW50MzIpIHsK
LSAgICAgICAgICAgICAgICBuZXdDYXNlID0gU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKGRh
dGEtPmNhc2VzW2ldLnZhbHVlLnN3aXRjaExvb2t1cFZhbHVlKGRhdGEtPmtpbmQpKSwKLSAgICAg
ICAgICAgICAgICAgICAgbG93QmxvY2soZGF0YS0+Y2FzZXNbaV0udGFyZ2V0LmJsb2NrKSwgV2Vp
Z2h0KGRhdGEtPmNhc2VzW2ldLnRhcmdldC5jb3VudCkpOwotICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKG5ld0Nh
c2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlv
bigKLSAgICAgICAgICAgIHN3aXRjaFZhbHVlLCBjYXNlcywKLSAgICAgICAgICAgIGxvd0Jsb2Nr
KGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKSwgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3dpdGNoU3RyaW5nKFN3aXRjaERhdGEqIGRhdGEs
IExWYWx1ZSBzdHJpbmcpCi0gICAgewotICAgICAgICBib29sIGNhbkRvQmluYXJ5U3dpdGNoID0g
dHJ1ZTsKLSAgICAgICAgdW5zaWduZWQgdG90YWxMZW5ndGggPSAwOwotICAgICAgICAKLSAgICAg
ICAgZm9yIChERkc6OlN3aXRjaENhc2UgbXlDYXNlIDogZGF0YS0+Y2FzZXMpIHsKLSAgICAgICAg
ICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IG15Q2FzZS52YWx1ZS5zdHJpbmdJbXBsKCk7Ci0gICAg
ICAgICAgICBpZiAoIXN0cmluZy0+aXM4Qml0KCkpIHsKLSAgICAgICAgICAgICAgICBjYW5Eb0Jp
bmFyeVN3aXRjaCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkgPiBPcHRpb25zOjptYXhpbXVtQmlu
YXJ5U3RyaW5nU3dpdGNoQ2FzZUxlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FuRG9CaW5h
cnlTd2l0Y2ggPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmICghY2FuRG9CaW5hcnlTd2l0Y2ggfHwgdG90YWxMZW5ndGgg
PiBPcHRpb25zOjptYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90YWxMZW5ndGgoKSkgewotICAg
ICAgICAgICAgc3dpdGNoU3RyaW5nU2xvdyhkYXRhLCBzdHJpbmcpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1f
b3V0LmxvYWRQdHIoc3RyaW5nLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKLSAgICAgICAgTFZh
bHVlIGxlbmd0aCA9IG1fb3V0LmxvYWQzMihzdHJpbmcsIG1faGVhcHMuSlNTdHJpbmdfbGVuZ3Ro
KTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGhhc0ltcGxCbG9jayA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiU3dpdGNoL1N3aXRjaFN0cmluZyBoYXMgaW1wbCBjYXNlIikpOwotICAg
ICAgICBMQmFzaWNCbG9jayBpczhCaXRCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3dp
dGNoL1N3aXRjaFN0cmluZyBpcyA4IGJpdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBz
bG93QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN3aXRjaC9Td2l0Y2hTdHJpbmcgc2xv
dyBjYXNlIikpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzTnVsbChz
dHJpbmdJbXBsKSwgdW5zdXJlKHNsb3dCbG9jayksIHVuc3VyZShoYXNJbXBsQmxvY2spKTsKLSAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFz
SW1wbEJsb2NrLCBpczhCaXRCbG9jayk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCi0gICAgICAgICAgICAgICAgbV9vdXQu
bG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLAotICAg
ICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6ZmxhZ0lzOEJpdCgpKSks
Ci0gICAgICAgICAgICB1bnN1cmUoc2xvd0Jsb2NrKSwgdW5zdXJlKGlzOEJpdEJsb2NrKSk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpczhCaXRCbG9jaywgc2xvd0Jsb2NrKTsK
LSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBidWZmZXIgPSBtX291dC5sb2FkUHRyKHN0cmluZ0lt
cGwsIG1faGVhcHMuU3RyaW5nSW1wbF9kYXRhKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvcGFnYXRlIGJyYW5jaCB3ZWlnaHQgZGF0YSB0byB0aGUgY2FzZXMgb2Yg
dGhpcyBzd2l0Y2guCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDQzNjgKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxTdHJpbmdTd2l0Y2hDYXNl
PiBjYXNlczsKLSAgICAgICAgZm9yIChERkc6OlN3aXRjaENhc2UgbXlDYXNlIDogZGF0YS0+Y2Fz
ZXMpCi0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoU3RyaW5nU3dpdGNoQ2FzZShteUNhc2UudmFs
dWUuc3RyaW5nSW1wbCgpLCBsb3dCbG9jayhteUNhc2UudGFyZ2V0LmJsb2NrKSkpOwotICAgICAg
ICBzdGQ6OnNvcnQoY2FzZXMuYmVnaW4oKSwgY2FzZXMuZW5kKCkpOwotICAgICAgICBzd2l0Y2hT
dHJpbmdSZWN1cnNlKGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgMCwgMCwgY2FzZXMuc2l6
ZSgpLCAwLCBmYWxzZSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Jsb2NrLCBsYXN0
TmV4dCk7Ci0gICAgICAgIHN3aXRjaFN0cmluZ1Nsb3coZGF0YSwgc3RyaW5nKTsKLSAgICB9Ci0g
ICAgCi0gICAgLy8gVGhlIGNvZGUgZm9yIHN0cmluZyBzd2l0Y2hpbmcgaXMgYmFzZWQgY2xvc2Vs
eSBvbiB0aGUgc2FtZSBjb2RlIGluIHRoZSBERkcgYmFja2VuZC4gV2hpbGUgaXQKLSAgICAvLyB3
b3VsZCBiZSBuaWNlIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIHNpbWlsYXItbG9va2luZyBjb2Rl
LCBpdCBzZWVtcyBsaWtlIHRoaXMgaXMgb25lIG9mCi0gICAgLy8gdGhvc2UgYWxnb3JpdGhtcyB3
aGVyZSBmYWN0b3Jpbmcgb3V0IHRoZSBjb21tb24gYml0cyB3b3VsZCByZXN1bHQgaW4gbW9yZSBj
b2RlIHRoYW4ganVzdAotICAgIC8vIGR1cGxpY2F0aW5nLgotICAgIAotICAgIHN0cnVjdCBTdHJp
bmdTd2l0Y2hDYXNlIHsKLSAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZSgpIHsgfQotICAgICAgICAK
LSAgICAgICAgU3RyaW5nU3dpdGNoQ2FzZShTdHJpbmdJbXBsKiBzdHJpbmcsIExCYXNpY0Jsb2Nr
IHRhcmdldCkKLSAgICAgICAgICAgIDogc3RyaW5nKHN0cmluZykKLSAgICAgICAgICAgICwgdGFy
Z2V0KHRhcmdldCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgU3RyaW5nU3dpdGNoQ2FzZSYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBzdHJpbmdMZXNzVGhhbigqc3RyaW5nLCAqb3RoZXIuc3RyaW5nKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nOwotICAgICAgICBM
QmFzaWNCbG9jayB0YXJnZXQ7Ci0gICAgfTsKLSAgICAKLSAgICBzdHJ1Y3QgQ2hhcmFjdGVyQ2Fz
ZSB7Ci0gICAgICAgIENoYXJhY3RlckNhc2UoKQotICAgICAgICAgICAgOiBjaGFyYWN0ZXIoMCkK
LSAgICAgICAgICAgICwgYmVnaW4oMCkKLSAgICAgICAgICAgICwgZW5kKDApCi0gICAgICAgIHsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQ2hhcmFjdGVyQ2FzZShMQ2hhciBjaGFyYWN0
ZXIsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQpCi0gICAgICAgICAgICA6IGNoYXJhY3Rl
cihjaGFyYWN0ZXIpCi0gICAgICAgICAgICAsIGJlZ2luKGJlZ2luKQotICAgICAgICAgICAgLCBl
bmQoZW5kKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgb3Bl
cmF0b3I8KGNvbnN0IENoYXJhY3RlckNhc2UmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gY2hhcmFjdGVyIDwgb3RoZXIuY2hhcmFjdGVyOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBMQ2hhciBjaGFyYWN0ZXI7Ci0gICAgICAgIHVuc2lnbmVkIGJlZ2lu
OwotICAgICAgICB1bnNpZ25lZCBlbmQ7Ci0gICAgfTsKLSAgICAKLSAgICB2b2lkIHN3aXRjaFN0
cmluZ1JlY3Vyc2UoCi0gICAgICAgIFN3aXRjaERhdGEqIGRhdGEsIExWYWx1ZSBidWZmZXIsIExW
YWx1ZSBsZW5ndGgsIGNvbnN0IFZlY3RvcjxTdHJpbmdTd2l0Y2hDYXNlPiYgY2FzZXMsCi0gICAg
ICAgIHVuc2lnbmVkIG51bUNoZWNrZWQsIHVuc2lnbmVkIGJlZ2luLCB1bnNpZ25lZCBlbmQsIHVu
c2lnbmVkIGFscmVhZHlDaGVja2VkTGVuZ3RoLAotICAgICAgICB1bnNpZ25lZCBjaGVja2VkRXhh
Y3RMZW5ndGgpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBmYWxsVGhyb3VnaCA9IGxvd0Js
b2NrKGRhdGEtPmZhbGxUaHJvdWdoLmJsb2NrKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChiZWdp
biA9PSBlbmQpIHsKLSAgICAgICAgICAgIG1fb3V0Lmp1bXAoZmFsbFRocm91Z2gpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBtaW5M
ZW5ndGggPSBjYXNlc1tiZWdpbl0uc3RyaW5nLT5sZW5ndGgoKTsKLSAgICAgICAgdW5zaWduZWQg
Y29tbW9uQ2hhcnMgPSBtaW5MZW5ndGg7Ci0gICAgICAgIGJvb2wgYWxsTGVuZ3Roc0VxdWFsID0g
dHJ1ZTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kp
IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIG15Q29tbW9uQ2hhcnMgPSBudW1DaGVja2VkOwotICAg
ICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBzdGQ6Om1pbihjYXNlc1tiZWdpbl0uc3RyaW5nLT5s
ZW5ndGgoKSwgY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSBudW1DaGVja2VkOyBqIDwgbGltaXQ7ICsraikgewotICAgICAgICAgICAgICAg
IGlmIChjYXNlc1tiZWdpbl0uc3RyaW5nLT5hdChqKSAhPSBjYXNlc1tpXS5zdHJpbmctPmF0KGop
KQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBteUNvbW1vbkNo
YXJzKys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb21tb25DaGFycyA9IHN0ZDo6bWlu
KGNvbW1vbkNoYXJzLCBteUNvbW1vbkNoYXJzKTsKLSAgICAgICAgICAgIGlmIChtaW5MZW5ndGgg
IT0gY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICBhbGxMZW5ndGhz
RXF1YWwgPSBmYWxzZTsKLSAgICAgICAgICAgIG1pbkxlbmd0aCA9IHN0ZDo6bWluKG1pbkxlbmd0
aCwgY2FzZXNbaV0uc3RyaW5nLT5sZW5ndGgoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChjaGVja2VkRXhhY3RMZW5ndGgpIHsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbV9ub2RlLCBhbHJlYWR5Q2hlY2tlZExlbmd0aCA9PSBtaW5MZW5ndGgpOwotICAgICAg
ICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGFsbExlbmd0aHNFcXVhbCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtaW5M
ZW5ndGggPj0gY29tbW9uQ2hhcnMpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFhbGxMZW5ndGhz
RXF1YWwgJiYgYWxyZWFkeUNoZWNrZWRMZW5ndGggPCBtaW5MZW5ndGgpCi0gICAgICAgICAgICBt
X291dC5jaGVjayhtX291dC5iZWxvdyhsZW5ndGgsIG1fb3V0LmNvbnN0SW50MzIobWluTGVuZ3Ro
KSksIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICBpZiAoYWxsTGVuZ3Roc0VxdWFsICYm
IChhbHJlYWR5Q2hlY2tlZExlbmd0aCA8IG1pbkxlbmd0aCB8fCAhY2hlY2tlZEV4YWN0TGVuZ3Ro
KSkKLSAgICAgICAgICAgIG1fb3V0LmNoZWNrKG1fb3V0Lm5vdEVxdWFsKGxlbmd0aCwgbV9vdXQu
Y29uc3RJbnQzMihtaW5MZW5ndGgpKSwgdW5zdXJlKGZhbGxUaHJvdWdoKSk7Ci0gICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1DaGVja2VkOyBpIDwgY29tbW9uQ2hhcnM7ICsr
aSkgewotICAgICAgICAgICAgbV9vdXQuY2hlY2soCi0gICAgICAgICAgICAgICAgbV9vdXQubm90
RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJ1ZmZlciwg
bV9oZWFwcy5jaGFyYWN0ZXJzOFtpXSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIoc3RhdGljX2Nhc3Q8dWludDE2X3Q+KGNhc2VzW2JlZ2luXS5zdHJpbmctPmF0KGkpKSkp
LAotICAgICAgICAgICAgICAgIHVuc3VyZShmYWxsVGhyb3VnaCkpOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAobWluTGVuZ3RoID09IGNvbW1vbkNoYXJzKSB7Ci0gICAgICAgICAg
ICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIG9uZSBvZiB0aGUgY2FzZXMgaXMgYSBwcmVmaXgg
b2YgYWxsIG9mIHRoZSBvdGhlciBjYXNlcy4KLSAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkg
Y2hlY2tlZCB0aGF0IHRoZSBpbnB1dCBzdHJpbmcgaXMgYSBwcmVmaXggb2YgYWxsIG9mIHRoZSBj
YXNlcywKLSAgICAgICAgICAgIC8vIHNvIHdlIGp1c3QgY2hlY2sgbGVuZ3RoIHRvIGp1bXAgdG8g
dGhhdCBjYXNlLgotICAgICAgICAgICAgCi0gICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgY2FzZXNbYmVnaW5dLnN0cmluZy0+bGVuZ3RoKCkgPT0gY29tbW9uQ2hhcnMpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmVnaW4gKyAxOyBpIDwgZW5kOyArK2kpCi0g
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGNhc2VzW2ldLnN0cmlu
Zy0+bGVuZ3RoKCkgPiBjb21tb25DaGFycyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChhbGxMZW5ndGhzRXF1YWwpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgZW5kID09IGJlZ2luICsgMSk7Ci0gICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
YXNlc1tiZWdpbl0udGFyZ2V0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fb3V0LmNoZWNrKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKGxlbmd0aCwgbV9vdXQuY29uc3RJbnQzMihjb21tb25DaGFycykpLAot
ICAgICAgICAgICAgICAgIHVuc3VyZShjYXNlc1tiZWdpbl0udGFyZ2V0KSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIFdlJ3ZlIGNoZWNrZWQgaWYgdGhlIGxlbmd0aCBpcyA+PSBtaW5M
ZW5ndGgsIGFuZCB0aGVuIHdlIGNoZWNrZWQgaWYgdGhlIGxlbmd0aCBpcwotICAgICAgICAgICAg
Ly8gPT0gY29tbW9uQ2hhcnMuIFdlIGdldCB0byB0aGlzIHBvaW50IGlmIGl0IGlzID49IG1pbkxl
bmd0aCBidXQgbm90ID09IGNvbW1vbkNoYXJzLgotICAgICAgICAgICAgLy8gSGVuY2Ugd2Uga25v
dyB0aGF0IGl0IG5vdyBtdXN0IGJlID4gbWluTGVuZ3RoLCBpLmUuIHRoYXQgaXQncyA+PSBtaW5M
ZW5ndGggKyAxLgotICAgICAgICAgICAgc3dpdGNoU3RyaW5nUmVjdXJzZSgKLSAgICAgICAgICAg
ICAgICBkYXRhLCBidWZmZXIsIGxlbmd0aCwgY2FzZXMsIGNvbW1vbkNoYXJzLCBiZWdpbiArIDEs
IGVuZCwgbWluTGVuZ3RoICsgMSwgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB0aGUg
c3RyaW5nIGlzIGxvbmdlciB0aGFuIGNvbW1vbkNoYXJzLCBhbmQgd2UndmUgb25seSB2ZXJpZmll
ZAotICAgICAgICAvLyBjb21tb25DaGFycy4gVXNlIGEgYmluYXJ5IHN3aXRjaCBvbiB0aGUgbmV4
dCB1bmNoZWNrZWQgY2hhcmFjdGVyLCBpLmUuCi0gICAgICAgIC8vIHN0cmluZ1tjb21tb25DaGFy
c10uCi0gICAgICAgIAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZW5kID49
IGJlZ2luICsgMik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdW5jaGVja2VkQ2hhciA9IG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKGJ1ZmZlciwgbV9oZWFwcy5jaGFyYWN0ZXJzOFtjb21tb25DaGFy
c10pOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPENoYXJhY3RlckNhc2U+IGNoYXJhY3RlckNh
c2VzOwotICAgICAgICBDaGFyYWN0ZXJDYXNlIGN1cnJlbnRDYXNlKGNhc2VzW2JlZ2luXS5zdHJp
bmctPmF0KGNvbW1vbkNoYXJzKSwgYmVnaW4sIGJlZ2luICsgMSk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJlZ2luICsgMTsgaSA8IGVuZDsgKytpKSB7Ci0gICAgICAgICAgICBMQ2hhciBj
dXJyZW50Q2hhciA9IGNhc2VzW2ldLnN0cmluZy0+YXQoY29tbW9uQ2hhcnMpOwotICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDaGFyICE9IGN1cnJlbnRDYXNlLmNoYXJhY3RlcikgewotICAgICAgICAg
ICAgICAgIGN1cnJlbnRDYXNlLmVuZCA9IGk7Ci0gICAgICAgICAgICAgICAgY2hhcmFjdGVyQ2Fz
ZXMuYXBwZW5kKGN1cnJlbnRDYXNlKTsKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2FzZSA9IENo
YXJhY3RlckNhc2UoY3VycmVudENoYXIsIGksIGkgKyAxKTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIGN1cnJlbnRDYXNlLmVuZCA9IGkgKyAxOwotICAgICAgICB9Ci0gICAg
ICAgIGNoYXJhY3RlckNhc2VzLmFwcGVuZChjdXJyZW50Q2FzZSk7Ci0gICAgICAgIAotICAgICAg
ICBWZWN0b3I8TEJhc2ljQmxvY2s+IGNoYXJhY3RlckJsb2NrczsKLSAgICAgICAgZm9yIChDaGFy
YWN0ZXJDYXNlJiBteUNhc2UgOiBjaGFyYWN0ZXJDYXNlcykKLSAgICAgICAgICAgIGNoYXJhY3Rl
ckJsb2Nrcy5hcHBlbmQoRlRMX05FV19CTE9DSyhtX291dCwgKCJTd2l0Y2gvU3dpdGNoU3RyaW5n
IGNhc2UgZm9yICIsIG15Q2FzZS5jaGFyYWN0ZXIsICIgYXQgaW5kZXggIiwgY29tbW9uQ2hhcnMp
KSk7Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gc3dpdGNoQ2FzZXM7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJDYXNlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGkpCi0gICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIGNoYXJhY3RlckNhc2VzW2kgLSAxXS5jaGFyYWN0ZXIgPCBjaGFyYWN0ZXJD
YXNlc1tpXS5jaGFyYWN0ZXIpOwotICAgICAgICAgICAgc3dpdGNoQ2FzZXMuYXBwZW5kKFN3aXRj
aENhc2UoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihjaGFyYWN0ZXJDYXNlc1tp
XS5jaGFyYWN0ZXIpLCBjaGFyYWN0ZXJCbG9ja3NbaV0sIFdlaWdodCgpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24odW5jaGVja2VkQ2hhciwgc3dpdGNoQ2Fz
ZXMsIGZhbGxUaHJvdWdoLCBXZWlnaHQoKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0Lm1fbmV4dEJsb2NrOwotICAgICAgICBjaGFyYWN0ZXJCbG9ja3Mu
YXBwZW5kKGxhc3ROZXh0KTsgLy8gTWFrZXMgaXQgY29udmVuaWVudCB0byBzZXQgbmV4dEJsb2Nr
LgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hhcmFjdGVyQ2FzZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoYXJhY3RlckJsb2Nrc1tpXSwg
Y2hhcmFjdGVyQmxvY2tzW2kgKyAxXSk7Ci0gICAgICAgICAgICBzd2l0Y2hTdHJpbmdSZWN1cnNl
KAotICAgICAgICAgICAgICAgIGRhdGEsIGJ1ZmZlciwgbGVuZ3RoLCBjYXNlcywgY29tbW9uQ2hh
cnMgKyAxLAotICAgICAgICAgICAgICAgIGNoYXJhY3RlckNhc2VzW2ldLmJlZ2luLCBjaGFyYWN0
ZXJDYXNlc1tpXS5lbmQsIG1pbkxlbmd0aCwgYWxsTGVuZ3Roc0VxdWFsKTsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3V0Lm1fbmV4
dEJsb2NrID09IGxhc3ROZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzd2l0Y2hTdHJpbmdT
bG93KFN3aXRjaERhdGEqIGRhdGEsIExWYWx1ZSBzdHJpbmcpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogV2Ugb3VnaHQgdG8gYmUgYWJsZSB0byB1c2UgY29tcHV0ZWQgZ290b3MgaGVyZS4gV2Ug
d291bGQgc2F2ZSB0aGUgbGFiZWxzIG9mIHRoZQotICAgICAgICAvLyBibG9ja3Mgd2Ugd2FudCB0
byBqdW1wIHRvLCBhbmQgdGhlbiByZXF1ZXN0IHRoZWlyIGFkZHJlc3NlcyBhZnRlciBjb21waWxh
dGlvbiBjb21wbGV0ZXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDQzNjkKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSBicmFuY2hPZmZzZXQg
PSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5pbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvblN3aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldCksCi0gICAgICAgICAgICBtX2NhbGxG
cmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoZGF0YS0+c3dpdGNoVGFibGVJbmRleCksIHN0cmluZyk7
Ci0gICAgICAgIAotICAgICAgICBTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJsb2NrKCkt
PnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
Ci0gICAgICAgIFZlY3RvcjxTd2l0Y2hDYXNlPiBjYXNlczsKLSAgICAgICAgc3RkOjp1bm9yZGVy
ZWRfc2V0PGludDMyX3Q+IGFscmVhZHlIYW5kbGVkOyAvLyBUaGVzZSBtYXkgYmUgbmVnYXRpdmUs
IG9yIHplcm8sIG9yIHByb2JhYmx5IG90aGVyIHN0dWZmLCB0b28uIFdlIGRvbid0IHdhbnQgdG8g
bWVzcyB3aXRoIEhhc2hTZXQncyBjb3JuZXIgY2FzZXMgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJl
IGFib3V0IHRocm91Z2hwdXQgaGVyZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGRhdGEtPmNhc2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogVGhlIGZh
Y3QgdGhhdCB3ZSdyZSB1c2luZyB0aGUgYnl0ZWNvZGUncyBzd2l0Y2ggdGFibGUgbWVhbnMgdGhh
dCB0aGUKLSAgICAgICAgICAgIC8vIGZvbGxvd2luZyBERkcgSVIgdHJhbnNmb3JtYXRpb24gd291
bGQgYmUgaW52YWxpZC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBPcmlnaW5hbCBj
b2RlOgotICAgICAgICAgICAgLy8gICAgIHN3aXRjaCAodikgewotICAgICAgICAgICAgLy8gICAg
IGNhc2UgImZvbyI6Ci0gICAgICAgICAgICAvLyAgICAgY2FzZSAiYmFyIjoKLSAgICAgICAgICAg
IC8vICAgICAgICAgdGhpbmdzKCk7Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgLy8gICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgLy8gICAgIH0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBOZXcg
Y29kZToKLSAgICAgICAgICAgIC8vICAgICBzd2l0Y2ggKHYpIHsKLSAgICAgICAgICAgIC8vICAg
ICBjYXNlICJmb28iOgotICAgICAgICAgICAgLy8gICAgICAgICBpbnN0cnVtZW50Rm9vKCk7Ci0g
ICAgICAgICAgICAvLyAgICAgICAgIGdvdG8gX3RoaW5nczsKLSAgICAgICAgICAgIC8vICAgICBj
YXNlICJiYXIiOgotICAgICAgICAgICAgLy8gICAgICAgICBpbnN0cnVtZW50QmFyKCk7Ci0gICAg
ICAgICAgICAvLyAgICAgX3RoaW5nczoKLSAgICAgICAgICAgIC8vICAgICAgICAgdGhpbmdzKCk7
Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAvLyAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gICAgIH0K
LSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBMdWNraWx5LCB3ZSBkb24ndCBjdXJyZW50
bHkgZG8gYW55IHN1Y2ggdHJhbnNmb3JtYXRpb24uIEJ1dCBpdCdzIGtpbmQgb2Ygc2lsbHkgdGhh
dAotICAgICAgICAgICAgLy8gdGhpcyBpcyBhbiBpc3N1ZS4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2MzUKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgREZHOjpTd2l0Y2hDYXNlIG15Q2FzZSA9IGRhdGEtPmNhc2VzW2ldOwotICAg
ICAgICAgICAgU3RyaW5nSnVtcFRhYmxlOjpTdHJpbmdPZmZzZXRUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9Ci0gICAgICAgICAgICAgICAgdGFibGUub2Zmc2V0VGFibGUuZmluZChteUNhc2UudmFsdWUu
c3RyaW5nSW1wbCgpKTsKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBp
dGVyICE9IHRhYmxlLm9mZnNldFRhYmxlLmVuZCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFhbHJlYWR5SGFuZGxlZC5pbnNlcnQoaXRlci0+dmFsdWUuYnJhbmNoT2Zmc2V0KS5z
ZWNvbmQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGNhc2VzLmFw
cGVuZChTd2l0Y2hDYXNlKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoaXRlci0+
dmFsdWUuYnJhbmNoT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICBsb3dCbG9jayhteUNhc2UudGFy
Z2V0LmJsb2NrKSwgV2VpZ2h0KG15Q2FzZS50YXJnZXQuY291bnQpKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIG1fb3V0LnN3aXRjaEluc3RydWN0aW9uKAotICAgICAgICAgICAgYnJh
bmNoT2Zmc2V0LCBjYXNlcywgbG93QmxvY2soZGF0YS0+ZmFsbFRocm91Z2guYmxvY2spLAotICAg
ICAgICAgICAgV2VpZ2h0KGRhdGEtPmZhbGxUaHJvdWdoLmNvdW50KSk7Ci0gICAgfQotICAgIAot
ICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIGF0IHRoZSBwb2ludCBvZiBjb2RlIGdlbmVyYXRpb24g
d2hlcmUgd2Uga25vdyB3aGF0IHRoZSByZXN1bHQgdHlwZSBpcy4KLSAgICAvLyBZb3UgY2FuIGVt
aXQgd2hhdGV2ZXIgY29kZSB5b3UgbGlrZSBhdCB0aGF0IHBvaW50LiBFeHBlY3RzIHlvdSB0byB0
ZXJtaW5hdGUgdGhlIGJhc2ljIGJsb2NrLgotICAgIC8vIFdoZW4gYnVpbGRUeXBlT2YoKSByZXR1
cm5zLCBpdCB3aWxsIGhhdmUgdGVybWluYXRlZCBhbGwgYmFzaWMgYmxvY2tzIHRoYXQgaXQgY3Jl
YXRlZC4gU28sIGlmCi0gICAgLy8geW91IGFyZW4ndCB1c2luZyB0aGlzIGFzIHRoZSB0ZXJtaW5h
dG9yIG9mIGEgaGlnaC1sZXZlbCBibG9jaywgeW91IHNob3VsZCBjcmVhdGUgeW91ciBvd24KLSAg
ICAvLyBjb250aW5hdGlvbiBhbmQgc2V0IGl0IGFzIHRoZSBuZXh0QmxvY2sgKG1fb3V0Lmluc2Vy
dE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRpb24pKSBiZWZvcmUKLSAgICAvLyBjYWxsaW5nIHRo
aXMuIEZvciBleGFtcGxlOgotICAgIC8vCi0gICAgLy8gTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJNeSBjb250aW51YXRpb24iKSk7Ci0gICAgLy8gTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUoY29udGludWF0
aW9uKTsKLSAgICAvLyBidWlsZFR5cGVPZigKLSAgICAvLyAgICAgY2hpbGQsIHZhbHVlLAotICAg
IC8vICAgICBbJl0gKFR5cGVvZlR5cGUgdHlwZSkgewotICAgIC8vICAgICAgICAgIGRvIHRoaW5n
czsKLSAgICAvLyAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgLy8gICAg
IH0pOwotICAgIC8vIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBidWlsZFR5cGVPZihFZGdlIGNo
aWxkLCBMVmFsdWUgdmFsdWUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICAKLSAgICAgICAgLy8gSW1wbGVtZW50
cyB0aGUgZm9sbG93aW5nIGJyYW5jaGluZyBzdHJ1Y3R1cmU6Ci0gICAgICAgIC8vCi0gICAgICAg
IC8vIGlmIChpcyBjZWxsKSB7Ci0gICAgICAgIC8vICAgICBpZiAoaXMgb2JqZWN0KSB7Ci0gICAg
ICAgIC8vICAgICAgICAgaWYgKGlzIGZ1bmN0aW9uKSB7Ci0gICAgICAgIC8vICAgICAgICAgICAg
IHJldHVybiBmdW5jdGlvbjsKLSAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKGRvZXNuJ3Qg
aGF2ZSBjYWxsIHRyYXAgYW5kIGRvZXNuJ3QgbWFzcXVlcmFkZSBhcyB1bmRlZmluZWQpIHsKLSAg
ICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIG9iamVjdAotICAgICAgICAvLyAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOwotICAgICAg
ICAvLyAgICAgICAgIH0KLSAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoaXMgc3RyaW5nKSB7Ci0g
ICAgICAgIC8vICAgICAgICAgcmV0dXJuIHN0cmluZwotICAgICAgICAvLyAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gICAgICAgICByZXR1cm4gc3ltYm9sCi0gICAgICAgIC8vICAgICB9Ci0gICAg
ICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVtYmVyKSB7Ci0gICAgICAgIC8vICAgICByZXR1cm4gbnVt
YmVyCi0gICAgICAgIC8vIH0gZWxzZSBpZiAoaXMgbnVsbCkgewotICAgICAgICAvLyAgICAgcmV0
dXJuIG9iamVjdAotICAgICAgICAvLyB9IGVsc2UgaWYgKGlzIGJvb2xlYW4pIHsKLSAgICAgICAg
Ly8gICAgIHJldHVybiBib29sZWFuCi0gICAgICAgIC8vIH0gZWxzZSB7Ci0gICAgICAgIC8vICAg
ICByZXR1cm4gdW5kZWZpbmVkCi0gICAgICAgIC8vIH0KLSAgICAgICAgCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBjZWxs
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIG9iamVjdCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBmdW5jdGlvbkNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIGZ1bmN0
aW9uIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG5vdEZ1bmN0aW9uQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2Ygbm90IGZ1bmN0aW9uIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIHJlYWxseU9iamVjdENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
ImJ1aWxkVHlwZU9mIHJlYWxseSBvYmplY3QgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIHNsb3cgcGF0aCIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgdW5yZWFjaGFibGUgPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoImJ1aWxkVHlwZU9mIHVucmVhY2hhYmxlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3RP
YmplY3RDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3Qgb2JqZWN0
IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHN0cmluZ0Nhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBzeW1ib2xDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBzeW1ib2wg
Y2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbENhc2UgPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImJ1aWxkVHlwZU9mIG5vdCBjZWxsIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIG51bWJlckNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImJ1aWxkVHlwZU9mIG51bWJl
ciBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3ROdW1iZXJDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJidWlsZFR5cGVPZiBub3QgbnVtYmVyIGNhc2UiKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIG5vdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWlsZFR5cGVP
ZiBub3QgbnVsbCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBib29sZWFuQ2FzZSA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiYnVpbGRUeXBlT2YgYm9vbGVhbiBjYXNlIikpOwotICAgICAg
ICBMQmFzaWNCbG9jayB1bmRlZmluZWRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJidWls
ZFR5cGVPZiB1bmRlZmluZWQgY2FzZSIpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5j
aChpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpKSwgdW5zdXJlKGNlbGxDYXNlKSwgdW5z
dXJlKG5vdENlbGxDYXNlKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGNlbGxDYXNlLCBvYmplY3RDYXNlKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKGlzT2JqZWN0KHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSksIHVuc3VyZShvYmplY3RD
YXNlKSwgdW5zdXJlKG5vdE9iamVjdENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKG9iamVjdENhc2UsIGZ1bmN0aW9uQ2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgK
LSAgICAgICAgICAgIGlzRnVuY3Rpb24odmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgU3BlY09i
amVjdCksCi0gICAgICAgICAgICB1bnN1cmUoZnVuY3Rpb25DYXNlKSwgdW5zdXJlKG5vdEZ1bmN0
aW9uQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oZnVuY3Rpb25DYXNl
LCBub3RGdW5jdGlvbkNhc2UpOwotICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6OkZ1bmN0aW9u
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEZ1bmN0aW9uQ2FzZSwgcmVh
bGx5T2JqZWN0Q2FzZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzRXhv
dGljRm9yVHlwZW9mKHZhbHVlLCBwcm92ZW5UeXBlKGNoaWxkKSAmIChTcGVjT2JqZWN0IC0gU3Bl
Y0Z1bmN0aW9uKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KHJlYWxs
eU9iamVjdENhc2UpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHJlYWxseU9i
amVjdENhc2UsIHNsb3dQYXRoKTsKLSAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3Qp
OwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hhYmxl
KTsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlw
ZW9mVHlwZSwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAotICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRp
cmVjdEdQUigpKTsKLSAgICAgICAgICAgIH0sIHZhbHVlKTsKLSAgICAgICAgVmVjdG9yPFN3aXRj
aENhc2UsIDM+IGNhc2VzOwotICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5j
b25zdEludDMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OlVuZGVmaW5lZCkpLCB1
bmRlZmluZWRDYXNlKSk7Ci0gICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNv
bnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6T2JqZWN0KSksIHJlYWxs
eU9iamVjdENhc2UpKTsKLSAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29u
c3RJbnQzMihzdGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpGdW5jdGlvbikpLCBmdW5j
dGlvbkNhc2UpKTsKLSAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24obV9vdXQuY2FzdFRv
SW50MzIocmVzdWx0KSwgY2FzZXMsIHVucmVhY2hhYmxlLCBXZWlnaHQoKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyh1bnJlYWNoYWJsZSwgbm90T2JqZWN0Q2FzZSk7Ci0gICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhub3RPYmplY3RDYXNlLCBzdHJpbmdDYXNlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgaXNTdHJpbmcodmFsdWUsIHByb3ZlblR5cGUoY2hpbGQpICYgKFNwZWNDZWxsIC0g
U3BlY09iamVjdCkpLAotICAgICAgICAgICAgdW5zdXJlKHN0cmluZ0Nhc2UpLCB1bnN1cmUoc3lt
Ym9sQ2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyaW5nQ2FzZSwg
c3ltYm9sQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6U3RyaW5nKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHN5bWJvbENhc2UsIG5vdENlbGxDYXNlKTsKLSAg
ICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpTeW1ib2wpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90Q2VsbENhc2UsIG51bWJlckNhc2UpOwotICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICBpc051bWJlcih2YWx1ZSwgcHJvdmVuVHlwZShjaGlsZCkgJiB+U3Bl
Y0NlbGwpLAotICAgICAgICAgICAgdW5zdXJlKG51bWJlckNhc2UpLCB1bnN1cmUobm90TnVtYmVy
Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obnVtYmVyQ2FzZSwgbm90
TnVtYmVyQ2FzZSk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlwZTo6TnVtYmVyKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE51bWJlckNhc2UsIG5vdE51bGxDYXNlKTsK
LSAgICAgICAgTFZhbHVlIGlzTnVsbDsKLSAgICAgICAgaWYgKHByb3ZlblR5cGUoY2hpbGQpICYg
U3BlY090aGVyKQotICAgICAgICAgICAgaXNOdWxsID0gbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0
LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGlzTnVs
bCA9IG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzTnVsbCwgdW5z
dXJlKHJlYWxseU9iamVjdENhc2UpLCB1bnN1cmUobm90TnVsbENhc2UpKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdE51bGxDYXNlLCBib29sZWFuQ2FzZSk7Ci0gICAgICAg
IG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIGlzQm9vbGVhbih2YWx1ZSwgcHJvdmVuVHlwZShj
aGlsZCkgJiB+KFNwZWNDZWxsIHwgU3BlY0Z1bGxOdW1iZXIpKSwKLSAgICAgICAgICAgIHVuc3Vy
ZShib29sZWFuQ2FzZSksIHVuc3VyZSh1bmRlZmluZWRDYXNlKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhib29sZWFuQ2FzZSwgdW5kZWZpbmVkQ2FzZSk7Ci0gICAgICAgIGZ1
bmN0b3IoVHlwZW9mVHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBl
bmRUbyh1bmRlZmluZWRDYXNlLCBsYXN0TmV4dCk7Ci0gICAgICAgIGZ1bmN0b3IoVHlwZW9mVHlw
ZTo6VW5kZWZpbmVkKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGRvdWJsZVRvSW50MzIoTFZh
bHVlIGRvdWJsZVZhbHVlLCBkb3VibGUgbG93LCBkb3VibGUgaGlnaCwgYm9vbCBpc1NpZ25lZCA9
IHRydWUpCi0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBncmVhdEVub3VnaCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiZG91YmxlVG9JbnQzMiBncmVhdEVub3VnaCIpKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgd2l0aGluUmFuZ2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50
MzIgd2l0aGluUmFuZ2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJkb3VibGVUb0ludDMyIHNsb3dQYXRoIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImRvdWJsZVRvSW50
MzIgY29udGludWF0aW9uIikpOwotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFZhbHVlRnJvbUJs
b2NrLCAyPiByZXN1bHRzOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAg
ICAgICAgbV9vdXQuZG91YmxlR3JlYXRlclRoYW5PckVxdWFsKGRvdWJsZVZhbHVlLCBtX291dC5j
b25zdERvdWJsZShsb3cpKSwKLSAgICAgICAgICAgIHVuc3VyZShncmVhdEVub3VnaCksIHVuc3Vy
ZShzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhncmVhdEVub3VnaCwgd2l0aGluUmFuZ2UpOwotICAgICAgICBtX291dC5i
cmFuY2goCi0gICAgICAgICAgICBtX291dC5kb3VibGVMZXNzVGhhbk9yRXF1YWwoZG91YmxlVmFs
dWUsIG1fb3V0LmNvbnN0RG91YmxlKGhpZ2gpKSwKLSAgICAgICAgICAgIHVuc3VyZSh3aXRoaW5S
YW5nZSksIHVuc3VyZShzbG93UGF0aCkpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8od2l0aGluUmFuZ2UsIHNsb3dQYXRoKTsKLSAgICAgICAgTFZhbHVlIGZhc3RSZXN1bHQ7Ci0g
ICAgICAgIGlmIChpc1NpZ25lZCkKLSAgICAgICAgICAgIGZhc3RSZXN1bHQgPSBtX291dC5kb3Vi
bGVUb0ludChkb3VibGVWYWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGZhc3RSZXN1
bHQgPSBtX291dC5kb3VibGVUb1VJbnQoZG91YmxlVmFsdWUpOwotICAgICAgICByZXN1bHRzLmFw
cGVuZChtX291dC5hbmNob3IoZmFzdFJlc3VsdCkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29u
dGludWF0aW9uKTsKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKG1fb3V0LmNh
bGwobV9vdXQuaW50MzIsIG1fb3V0Lm9wZXJhdGlvbih0b0ludDMyKSwgZG91YmxlVmFsdWUpKSk7
Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmludDMyLCByZXN1bHRzKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGRv
dWJsZVRvSW50MzIoTFZhbHVlIGRvdWJsZVZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKE91dHB1
dDo6aGFzU2Vuc2libGVEb3VibGVUb0ludCgpKQotICAgICAgICAgICAgcmV0dXJuIHNlbnNpYmxl
RG91YmxlVG9JbnQzMihkb3VibGVWYWx1ZSk7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbGlt
aXQgPSBwb3coMiwgMzEpIC0gMTsKLSAgICAgICAgcmV0dXJuIGRvdWJsZVRvSW50MzIoZG91Ymxl
VmFsdWUsIC1saW1pdCwgbGltaXQpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc2Vuc2libGVE
b3VibGVUb0ludDMyKExWYWx1ZSBkb3VibGVWYWx1ZSkKLSAgICB7Ci0gICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzZW5zaWJsZSBkb3VibGVUb0lu
dDMyIHNsb3cgcGF0aCIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJzZW5zaWJsZSBkb3VibGVUb0ludDMyIGNvbnRpbnVhdGlvbiIp
KTsKLQotICAgICAgICBMVmFsdWUgZmFzdFJlc3VsdFZhbHVlID0gbV9vdXQuZG91YmxlVG9JbnQo
ZG91YmxlVmFsdWUpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGZhc3RSZXN1bHRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAg
ICAgIG1fb3V0LmVxdWFsKGZhc3RSZXN1bHRWYWx1ZSwgbV9vdXQuY29uc3RJbnQzMigweDgwMDAw
MDAwKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlv
bikpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQuaW50
MzIsIG1fb3V0Lm9wZXJhdGlvbih0b0ludDMyKSwgZG91YmxlVmFsdWUpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQu
aW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMg
YSBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIGEgY29kZSBnZW5lcmF0b3IgdGhhdCBmaWxscyBpbiBh
IGdhcCBpbiB0aGUgY29kZSB1c2luZyBvdXIKLSAgICAvLyBvd24gTWFjcm9Bc3NlbWJsZXIuIFRo
aXMgaXMgdXNlZnVsIGZvciBzbG93IHBhdGhzIHRoYXQgaW52b2x2ZSBhIGxvdCBvZiBjb2RlIGFu
ZCB3ZSBkb24ndCB3YW50Ci0gICAgLy8gdG8gcGF5IHRoZSBwcmljZSBvZiBMTFZNIG9wdGltaXpp
bmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2lsbCBvbmx5IGJlIGdlbmVyYXRlZCBpZiBpdCBhY3R1
YWxseQotICAgIC8vIGV4ZWN1dGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgYSBsYXp5IHNsb3cgcGF0
aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9mIHR3byBhZGRpdGlvbmFsIGp1bXBzLgotICAgIC8v
IEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdzIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaXMg
c2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlkLCBzbyB5b3UKLSAgICAvLyBoYXZlIHRvIHVzZSBh
IFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB0byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lz
dGVycyBhbmQgeW91IG1heSBoYXZlCi0gICAgLy8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlm
IHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZS4KLSAgICAvLwotICAgIC8v
IExhenkgc2xvdyBwYXRocyBpbnZvbHZlIHRocmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0
aW9uLiBFYWNoIHN0YWdlIGhhcyB1bmlxdWUKLSAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3ds
ZWRnZS4gVGhlIHN0YWdlcyBhcmU6Ci0gICAgLy8KLSAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJp
bmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4gdGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxh
c3QgdGltZSB5b3Ugd2lsbAotICAgIC8vICAgIGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRo
ZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRzIHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkg
c2xvdwotICAgIC8vICAgIHBhdGgsIHRoZW4geW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVu
dCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFyZ3MgYXJndW1lbnRzIGFmdGVyIHRoZQotICAgIC8v
ICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5nIGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMg
d2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFsdWVzLiBIZW5jZQotICAgIC8vICAgIHlvdSBwYXNz
IGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgpIGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJp
bmcgc3RhZ2UgKDIpOgotICAgIC8vCi0gICAgLy8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMgY29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGlj
aCB3ZSBrbm93Ci0gICAgLy8gICAgdGhlIG1hcHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRv
IHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhlIHJlZ2lzdGVycyB0aGF0IExMVk0KLSAgICAvLyAg
ICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1lbnRzLiBZb3UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0
byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBzaW5jZSB0aGVuCi0gICAgLy8gICAgdGhlIHNsb3cg
cGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBsYXppbHkgZ2VuZXJhdGVkLiBJbnN0ZWFkLCB5b3Ug
d2FudCB0byBzYXZlIHRoZQotICAgIC8vICAgIHJlZ2lzdGVycyBiZWluZyB1c2VkIGZvciB0aGUg
YXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdlbmVyYXRpb24gdG8gc3RhZ2UgKDMpIGJ5IGNyZWF0
aW5nCi0gICAgLy8gICAgYW5kIHJldHVybmluZyBhIExhenlTbG93UGF0aDo6R2VuZXJhdG9yOgot
ICAgIC8vCi0gICAgLy8gMykgTGF6eVNsb3dQYXRoJ3MgZ2VuZXJhdGUoKSBtZXRob2QuIFRoaXMg
Y29kZSBydW5zIGluIHJlc3BvbnNlIHRvIHRoZSBsYXp5IHNsb3cgcGF0aAotICAgIC8vICAgIGV4
ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlv
dSBjcmVhdGVkIGluIHN0YWdlICgyKS4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRp
bWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBv
bmUsIG9yIG1hbnkgdGltZXMuCi0gICAgLy8gU3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZv
a2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3
aGljaAotICAgIC8vIGNhc2Ugc3RhZ2UgKDIpIHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRl
IHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEganVtcCB0aHJlYWRpbmcpLAotICAgIC8vIGxlYWRp
bmcgdG8gbWFueSBjYWxscyB0byB5b3VyIHN0YWdlICgyKSBsYW1iZGEuIFN0YWdlICgzKSBtYXkg
YmUgY2FsbGVkIHplcm8gb3Igb25jZSBmb3IgZWFjaAotICAgIC8vIHN0YWdlICgyKS4gSXQgd2ls
bCBiZSBjYWxsZWQgemVybyB0aW1lcyBpZiB0aGUgc2xvdyBwYXRoIG5ldmVyIHJ1bnMuIFRoaXMg
aXMgd2hhdCB5b3UgaG9wZSBmb3IKLSAgICAvLyB3aGVuZXZlciB5b3UgdXNlIHRoZSBsYXp5U2xv
d1BhdGgoKSBtZWNoYW5pc20uCi0gICAgLy8KLSAgICAvLyBBIHR5cGljYWwgdXNlIG9mIGxhenlT
bG93UGF0aCgpIHdpbGwgbG9vayBsaWtlIHRoZSBleGFtcGxlIGJlbG93LCB3aGljaCBqdXN0IGNy
ZWF0ZXMgYSBzbG93Ci0gICAgLy8gcGF0aCB0aGF0IGFkZHMgc29tZSB2YWx1ZSB0byB0aGUgaW5w
dXQgYW5kIHJldHVybnMgaXQuCi0gICAgLy8KLSAgICAvLyAvLyBTdGFnZSAoMSkgaXMgaGVyZS4g
VGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggTFZhbHVlcyB0byB1
c2UgYXMgaW5wdXRzLgotICAgIC8vIC8vIE5vdGljZSBob3cgd2UgcGFzcyAiaW5wdXQiIGFzIGFu
IGFyZ3VtZW50IHRvIGxhenlTbG93UGF0aCgpLgotICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsK
LSAgICAvLyBpbnQgYWRkZW5kID0gLi4uOwotICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xv
d1BhdGgoCi0gICAgLy8gICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAvLyAgICAgICAgIC8v
IFN0YWdlICgyKSBpcyBoZXJlLiBUaGlzIGlzIHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91
dCB3aGljaCByZWdpc3RlcnMgYXJlIHVzZWQKLSAgICAvLyAgICAgICAgIC8vIGZvciB3aGljaCB2
YWx1ZXMuIExvY2F0aW9uIHplcm8gaXMgYWx3YXlzIHRoZSByZXR1cm4gdmFsdWUuIFlvdSBjYW4g
aWdub3JlIGl0IGlmCi0gICAgLy8gICAgICAgICAvLyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4g
YW55dGhpbmcuIExvY2F0aW9uIDEgaXMgdGhlIHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QKLSAgICAv
LyAgICAgICAgIC8vIGFyZ3VtZW50IHRvIHRoZSBsYXp5U2xvd1BhdGgoKSwgaS5lLiAiaW5wdXQi
LiBOb3RlIHRoYXQgdGhlIExvY2F0aW9uIG9iamVjdCBjb3VsZAotICAgIC8vICAgICAgICAgLy8g
YWxzbyBob2xkIGFuIEZQUiwgaWYgeW91IGFyZSBwYXNzaW5nIGEgZG91YmxlLgotICAgIC8vICAg
ICAgICAgR1BSUmVnIG91dHB1dEdQUiA9IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKLSAgICAv
LyAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKLSAg
ICAvLyAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKLSAgICAv
LyAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgewotICAgIC8vICAgICAgICAgICAgICAgICAvLyBTdGFnZSAo
MykgaXMgaGVyZS4gVGhpcyBpcyB3aGVuIHlvdSBnZW5lcmF0ZSBjb2RlLiBZb3UgaGF2ZSBhY2Nl
c3MgdG8gdGhlCi0gICAgLy8gICAgICAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB5b3UgY29sbGVj
dGVkIGluIHN0YWdlICgyKSBiZWNhdXNlIHRoaXMgbGFtYmRhIGNsb3NlcyBvdmVyIHRob3NlCi0g
ICAgLy8gICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlcyAob3V0cHV0R1BSIGFuZCBpbnB1dEdQ
UikuIFlvdSBhbHNvIGhhdmUgYWNjZXNzIHRvIHdoYXRldmVyIGV4dHJhCi0gICAgLy8gICAgICAg
ICAgICAgICAgIC8vIGRhdGEgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMSksIHN1Y2ggYXMgdGhl
IGFkZGVuZCBpbiB0aGlzIGNhc2UuCi0gICAgLy8gICAgICAgICAgICAgICAgIGppdC5hZGQzMihU
cnVzdGVkSW1tMzIoYWRkZW5kKSwgaW5wdXRHUFIsIG91dHB1dEdQUik7Ci0gICAgLy8gICAgICAg
ICAgICAgICAgIC8vIFlvdSBoYXZlIHRvIGVuZCBieSBqdW1waW5nIHRvIGRvbmUuIFRoZXJlIGlz
IG5vdGhpbmcgdG8gZmFsbCB0aHJvdWdoIHRvLgotICAgIC8vICAgICAgICAgICAgICAgICAvLyBZ
b3UgY2FuIGFsc28ganVtcCB0byB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgKHNlZSBMYXp5U2xvd1Bh
dGguaCBmb3IgbW9yZQotICAgIC8vICAgICAgICAgICAgICAgICAvLyBpbmZvKS4gTm90ZSB0aGF0
IGN1cnJlbnRseSB5b3UgY2Fubm90IE9TUiBleGl0LgotICAgIC8vICAgICAgICAgICAgICAgICBw
YXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLSAgICAvLyAgICAgICAgICAgICB9
KTsKLSAgICAvLyAgICAgfSwKLSAgICAvLyAgICAgaW5wdXQpOwotICAgIC8vCi0gICAgLy8gWW91
IGNhbiBiYXNpY2FsbHkgcGFzcyBhcyBtYW55IGlucHV0cyBhcyB5b3UgbGlrZSwgZWl0aGVyIHVz
aW5nIHRoaXMgdmFyYXJncyBmb3JtLCBvciBieQotICAgIC8vIHBhc3NpbmcgYSBWZWN0b3Igb2Yg
TFZhbHVlcy4KLSAgICAvLwotICAgIC8vIE5vdGUgdGhhdCBpZiB5b3VyIHNsb3cgcGF0aCBpcyBv
bmx5IGRvaW5nIGEgY2FsbCwgeW91IGNhbiB1c2UgdGhlIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KCkKLSAgICAvLyBoZWxwZXIuIEZvciBleGFtcGxlOgotICAgIC8vCi0gICAgLy8gTFZhbHVlIGlu
cHV0ID0gLi4uOwotICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCi0gICAgLy8g
ICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKLSAgICAvLyAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5
Q2FsbEdlbmVyYXRvcigKLSAgICAvLyAgICAgICAgICAgICBvcGVyYXRpb25Eb1RoaW5ncywgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwotICAgIC8v
ICAgICB9LCBpbnB1dCk7Ci0gICAgLy8KLSAgICAvLyBGaW5hbGx5LCBub3RlIHRoYXQgYWxsIG9m
IHRoZSBsYW1iZGFzIC0gYm90aCB0aGUgc3RhZ2UgKDIpIGxhbWJkYSBhbmQgdGhlIHN0YWdlICgz
KSBsYW1iZGEgLQotICAgIC8vIHJ1biBhZnRlciB0aGUgZnVuY3Rpb24gdGhhdCBjcmVhdGVkIHRo
ZW0gcmV0dXJucy4gSGVuY2UsIHlvdSBzaG91bGQgbm90IHVzZSBieS1yZWZlcmVuY2UKLSAgICAv
LyBjYXB0dXJlIChpLmUuIFsmXSkgaW4gYW55IG9mIHRoZXNlIGxhbWJkYXMuCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3RvciwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KLSAgICBMVmFs
dWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4g
YXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGxhenlTbG93UGF0aChmdW5jdG9yLCBW
ZWN0b3I8TFZhbHVlPnsgYXJndW1lbnRzLi4uIH0pOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci0gICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yLCBjb25zdCBWZWN0b3I8TFZhbHVlPiYgdXNlckFyZ3VtZW50cykKLSAgICB7Ci0gICAg
ICAgIENvZGVPcmlnaW4gb3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAg
IAotICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9pbnQoQjM6
OkludDY0KTsKLSAgICAgICAgZm9yIChMVmFsdWUgYXJnIDogdXNlckFyZ3VtZW50cykKLSAgICAg
ICAgICAgIHJlc3VsdC0+YXBwZW5kKENvbnN0cmFpbmVkVmFsdWUoYXJnLCBCMzo6VmFsdWVSZXA6
OlNvbWVSZWdpc3RlcikpOwotCi0gICAgICAgIFJlZlB0cjxQYXRjaHBvaW50RXhjZXB0aW9uSGFu
ZGxlPiBleGNlcHRpb25IYW5kbGUgPQotICAgICAgICAgICAgcHJlcGFyZVBhdGNocG9pbnRGb3JF
eGNlcHRpb25zKHJlc3VsdCk7Ci0gICAgICAgIAotICAgICAgICByZXN1bHQtPmNsb2JiZXIoUmVn
aXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycygpKTsKLSAgICAgICAgU3RhdGUqIHN0YXRl
ID0gJm1fZnRsU3RhdGU7Ci0KLSAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoCi0gICAgICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgewotICAgICAgICAgICAgICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25z
OwotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgQjM6OlZhbHVlUmVwJiByZXAgOiBwYXJhbXMp
Ci0gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQoTG9jYXRpb246OmZvclZhbHVl
UmVwKHJlcCkpOwotCi0gICAgICAgICAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiBnZW5lcmF0b3IgPSBmdW5jdG9yKGxvY2F0aW9ucyk7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpQYXRjaGFibGVKdW1wIHBhdGNoYWJsZUp1bXAg
PSBqaXQucGF0Y2hhYmxlSnVtcCgpOwotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgZG9uZSA9IGppdC5sYWJlbCgpOwotCi0gICAgICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHBhcmFtcy51bmF2YWlsYWJsZVJlZ2lzdGVycygpOwotCi0gICAgICAgICAg
ICAgICAgUmVmUHRyPEV4Y2VwdGlvblRhcmdldD4gZXhjZXB0aW9uVGFyZ2V0ID0KLSAgICAgICAg
ICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlLT5zY2hlZHVsZUV4aXRDcmVhdGlvbihwYXJhbXMp
OwotCi0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEFzIHBhcnQgb2YgaGFuZGxpbmcgZXhjZXB0
aW9ucywgd2UgbmVlZCB0byBjcmVhdGUgYSBjb25jcmV0ZSBPU1JFeGl0IGhlcmUuCi0gICAgICAg
ICAgICAgICAgLy8gRG9pbmcgc28gc2hvdWxkIGF1dG9tYWdpY2FsbHkgcmVnaXN0ZXIgbGF0ZSBw
YXRocyB0aGF0IGVtaXQgZXhpdCB0aHVua3MuCi0KLSAgICAgICAgICAgICAgICBwYXJhbXMuYWRk
TGF0ZVBhdGgoCi0gICAgICAgICAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBh
bGxvd1NjcmF0Y2goaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoYWJsZUp1bXAu
bV9qdW1wLmxpbmsoJmppdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eCA9IHN0YXRlLT5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLnNpemUoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlLT5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLmFwcGVuZChudWxscHRyKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGppdC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRv
dWNoaW5nUmVnaXN0ZXJzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IGppdC5qdW1wKCk7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vdGUgdGhhdCBzbyBsb25nIGFzIHdlJ3JlIGhlcmUsIHdlIGRvbid0IHJl
YWxseSBrbm93IGlmIG91ciBsYXRlIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1
bnMgYmVmb3JlIG9yIGFmdGVyIGFueSBvdGhlciBsYXRlIHBhdGhzIHRoYXQgd2UgbWlnaHQgZGVw
ZW5kIG9uLCBsaWtlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZXhjZXB0aW9uIHRo
dW5rLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZSA9
IHN0YXRlLT5qaXRDb2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgVk0qIHZtID0gJnN0YXRl
LT5ncmFwaC5tX3ZtOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBqaXQuYWRkTGlua1Rhc2so
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvckp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLT5n
ZXRDVElTdHViKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
YXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q29kZUxvY2F0aW9uSnVtcCBsaW5rZWRQYXRjaGFibGVKdW1wID0gQ29kZUxvY2F0aW9uSnVtcCgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihwYXRjaGFibGVKdW1wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxpbmtlZERvbmUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoZG9uZSk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUlu
ZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdENvZGUtPmNvbW1v
bi5hZGRVbmlxdWVDYWxsU2l0ZUluZGV4KG9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPExhenlTbG93UGF0aD4gbGF6eVNsb3dQYXRoID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRQYXRjaGFibGVKdW1wLCBsaW5r
ZWREb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv
blRhcmdldC0+bGFiZWwobGlua0J1ZmZlciksIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbFNpdGVJbmRleCwgZ2VuZXJhdG9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqaXRDb2RlLT5sYXp5U2xvd1BhdGhzW2luZGV4XSA9IFdURk1vdmUobGF6eVNs
b3dQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAg
ICAgICAgfSk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGUoCi0gICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1h
dHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQotICAgIHsKLSAgICAgICAgYXBwZW5kT1NSRXhpdChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
LCBmYWlsQ29uZGl0aW9uLCBtX29yaWdpbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdGVybWlu
YXRlKEV4aXRLaW5kIGtpbmQpCi0gICAgewotICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIGRpZEFscmVhZHlUZXJt
aW5hdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkaWRBbHJlYWR5VGVybWluYXRlKCkKLSAg
ICB7Ci0gICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgdHlwZUNoZWNrKAotICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBo
aWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKLSAgICAgICAgTFZh
bHVlIGZhaWxDb25kaXRpb24sIEV4aXRLaW5kIGV4aXRLaW5kID0gQmFkVHlwZSkKLSAgICB7Ci0g
ICAgICAgIGFwcGVuZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24sIGV4aXRLaW5kKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBh
cHBlbmRUeXBlQ2hlY2soCi0gICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhp
Z2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAotICAgICAgICBMVmFs
dWUgZmFpbENvbmRpdGlvbiwgRXhpdEtpbmQgZXhpdEtpbmQpCi0gICAgewotICAgICAgICBpZiAo
IW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVj
ayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Ci0gICAgICAgIGFwcGVuZE9TUkV4aXQoZXhpdEtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uLCBtX29yaWdpbik7Ci0g
ICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdo
KTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd0ludDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNw
ZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAgIHsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxh
dGlvbiB8fCAoZWRnZS51c2VLaW5kKCkgPT0gSW50MzJVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0g
S25vd25JbnQzMlVzZSkpOwotICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgdGVybWlu
YXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJv
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50MzIodmFs
dWUuYXNJbnQzMigpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYg
KGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAg
ICAgIAotICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIHN0cmlj
dEludDUyVG9JbnQzMihlZGdlLCB2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZh
bHVlID0gbV9pbnQ1MlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gc3RyaWN0SW50NTJUb0ludDMyKGVkZ2UsIGlu
dDUyVG9TdHJpY3RJbnQ1Mih2YWx1ZS52YWx1ZSgpKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1
ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxp
ZCh2YWx1ZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSBib3hlZFJlc3VsdCA9IHZhbHVlLnZhbHVl
KCk7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1
bHQpKTsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0
KTsKLSAgICAgICAgICAgIHNldEludDMyKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjSW50MzIpKTsKLSAgICAgICAgdGVy
bWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmludDMyWmVybzsKLSAg
ICB9Ci0gICAgCi0gICAgZW51bSBJbnQ1MktpbmQgeyBTdHJpY3RJbnQ1MiwgSW50NTIgfTsKLSAg
ICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQga2luZCkKLSAgICB7Ci0gICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJl
cFVzZSk7Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlOwotICAgICAg
ICAKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAg
ICAgICB2YWx1ZSA9IG1faW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsdWUgPSBtX3N0cmljdEludDUyVmFsdWVz
LmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHN0cmljdEludDUyVG9JbnQ1Mih2YWx1ZS52YWx1ZSgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RyaWN0SW50NTI6
Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50NTJWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKLSAgICAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgdmFsdWUgPSBtX2lu
dDUyVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGludDUyVG9TdHJpY3RJbnQ1Mih2YWx1ZS52YWx1
ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX25vZGUsICFwcm92ZW5UeXBlKGVkZ2UpKTsKLSAgICAgICAgdGVybWluYXRl
KFVuY291bnRhYmxlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmludDY0WmVybzsKLSAgICB9Ci0g
ICAgCi0gICAgTFZhbHVlIGxvd0ludDUyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBsb3dJbnQ1MihlZGdlLCBJbnQ1Mik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJp
Y3RJbnQ1MihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
U3RyaWN0SW50NTIpOwotICAgIH0KLSAgICAKLSAgICBib29sIGJldHRlclVzZVN0cmljdEludDUy
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gIWlzVmFsaWQobV9pbnQ1MlZhbHVl
cy5nZXQobm9kZSkpOwotICAgIH0KLSAgICBib29sIGJldHRlclVzZVN0cmljdEludDUyKEVkZ2Ug
ZWRnZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiZXR0ZXJVc2VTdHJpY3RJbnQ1MihlZGdlLm5v
ZGUoKSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgSW50NTJLaW5kIGJl
c3RJbnQ1MktpbmQoVCBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJldHRlclVzZVN0cmlj
dEludDUyKG5vZGUpID8gU3RyaWN0SW50NTIgOiBJbnQ1MjsKLSAgICB9Ci0gICAgSW50NTJLaW5k
IG9wcG9zaXRlKEludDUyS2luZCBraW5kKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7
Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaWN0SW50NTI7Ci0g
ICAgICAgIGNhc2UgU3RyaWN0SW50NTI6Ci0gICAgICAgICAgICByZXR1cm4gSW50NTI7Ci0gICAg
ICAgIH0KLSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwotICAgICAgICByZXR1cm4gSW50NTI7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dXaGlj
aGV2ZXJJbnQ1MihFZGdlIGVkZ2UsIEludDUyS2luZCYga2luZCkKLSAgICB7Ci0gICAgICAgIGtp
bmQgPSBiZXN0SW50NTJLaW5kKGVkZ2UpOwotICAgICAgICByZXR1cm4gbG93SW50NTIoZWRnZSwg
a2luZCk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dDZWxsKEVkZ2UgZWRnZSwgT3BlcmFu
ZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQotICAg
IHsKLSAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IERGRzo6aXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
LmlzQ2VsbCgpKSB7Ci0gICAgICAgICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludFB0cih2YWx1ZS5hc0NlbGwoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFs
dWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKSB7
Ci0gICAgICAgICAgICBMVmFsdWUgdW5jaGVja2VkVmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwotICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVu
Y2hlY2tlZFZhbHVlKSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRWYWx1ZSkp
OwotICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFZhbHVlOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShwcm92ZW5UeXBlKGVkZ2Up
ICYgU3BlY0NlbGwpKTsKLSAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmludFB0clplcm87Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dPYmpl
Y3QoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVy
YW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUg
PT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IE9iamVjdFVz
ZSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKLSAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJpbmcoRWRnZSBlZGdlLCBP
cGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24p
Ci0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFN0cmluZ1VzZSB8fCBlZGdlLnVzZUtp
bmQoKSA9PSBLbm93blN0cmluZ1VzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBTdHJpbmdJZGVudFVz
ZSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlLCBtb2Rl
KTsKLSAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBsb3dTdHJpbmdJZGVudChFZGdlIGVk
Z2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gU3RyaW5nSWRlbnRVc2UpOwot
ICAgICAgICAKLSAgICAgICAgTFZhbHVlIHN0cmluZyA9IGxvd1N0cmluZyhlZGdlLCBtb2RlKTsK
LSAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHN0cmluZywgbV9oZWFw
cy5KU1N0cmluZ192YWx1ZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UsIHN0
cmluZywgc3RyaW5nSW1wbCk7Ci0gICAgICAgIHJldHVybiBzdHJpbmdJbXBsOwotICAgIH0KLQot
ICAgIExWYWx1ZSBsb3dTeW1ib2woRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1v
ZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRf
VU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNl
S2luZCgpID09IFN5bWJvbFVzZSk7Ci0KLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwo
ZWRnZSwgbW9kZSk7Ci0gICAgICAgIHNwZWN1bGF0ZVN5bWJvbChlZGdlLCByZXN1bHQpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIExWYWx1ZSBsb3dOb25OdWxsT2JqZWN0
KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFu
ZFNwZWN1bGF0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Up
OwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSwgbW9kZSk7
Ci0gICAgICAgIHNwZWN1bGF0ZU5vbk51bGxPYmplY3QoZWRnZSwgcmVzdWx0KTsKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd0Jvb2xlYW4oRWRnZSBl
ZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3Vs
YXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IEJvb2xlYW5Vc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25Cb29sZWFuVXNlKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChl
ZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+
YXNKU1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLmlzQm9vbGVhbigpKSB7Ci0gICAg
ICAgICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LmNvbnN0Qm9vbCh2YWx1ZS5hc0Jvb2xlYW4oKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKLSAg
ICAgICAgICAgIExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gdmFsdWUudmFsdWUoKTsKLSAgICAgICAg
ICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJveGVk
UmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7
Ci0gICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhKHByb3ZlblR5cGUoZWRnZSkgJiBTcGVjQm9vbGVhbikpOwot
ICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwotICAgICAgICByZXR1cm4gbV9vdXQuYm9v
bGVhbkZhbHNlOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgbG93RG91YmxlKEVkZ2UgZWRnZSkK
LSAgICB7Ci0gICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBpc0RvdWJsZShlZGdl
LnVzZUtpbmQoKSkpOwotICAgICAgICAKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOwotICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgIXByb3ZlblR5cGUoZWRnZSkpOwotICAgICAgICB0ZXJtaW5h
dGUoVW5jb3VudGFibGUpOwotICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlWmVybzsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGxvd0pTVmFsdWUoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCi0gICAgewotICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24gfHwgZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCAhaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKLSAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVkZ2UudXNlS2luZCgpICE9IEludDUyUmVwVXNl
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGVkZ2UtPmFzSlNWYWx1
ZSgpKSk7Ci0KLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9p
bnQzMlZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hJbnQzMih2YWx1ZS52YWx1ZSgpKTsK
LSAgICAgICAgICAgIHNldEpTVmFsdWUoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1f
Ym9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1
ZSkpIHsKLSAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBib3hCb29sZWFuKHZhbHVlLnZhbHVl
KCkpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJWYWx1ZSBub3QgZGVmaW5lZCIpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGxvd1N0b3JhZ2UoRWRnZSBlZGdlKQotICAg
IHsKLSAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fc3RvcmFnZVZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBs
b3dDZWxsKGVkZ2UpOwotICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgc3RyaWN0SW50
NTJUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IG1fb3V0LmNhc3RUb0ludDMyKHZhbHVlKTsKLSAgICAgICAgRlRMX1RZUEVfQ0hF
Q0soCi0gICAgICAgICAgICBub1ZhbHVlKCksIGVkZ2UsIFNwZWNJbnQzMiwKLSAgICAgICAgICAg
IG1fb3V0Lm5vdEVxdWFsKG1fb3V0LnNpZ25FeHQzMlRvNjQocmVzdWx0KSwgdmFsdWUpKTsKLSAg
ICAgICAgc2V0SW50MzIoZWRnZS5ub2RlKCksIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvRG91YmxlKExWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5pbnRUb0RvdWJsZSh2YWx1ZSk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShMVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBMQmFzaWNCbG9jayBpc0ludDMyID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzdHJpY3RJbnQ1MlRvSlNWYWx1ZSBpc0ludDMyIGNhc2UiKSk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGlzRG91YmxlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzdHJpY3RJbnQ1MlRvSlNW
YWx1ZSBpc0RvdWJsZSBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInN0cmljdEludDUyVG9KU1ZhbHVlIGNvbnRpbnVhdGlv
biIpKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMj4gcmVzdWx0
czsKLSAgICAgICAgICAgIAotICAgICAgICBMVmFsdWUgaW50MzJWYWx1ZSA9IG1fb3V0LmNhc3RU
b0ludDMyKHZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQu
ZXF1YWwobV9vdXQuc2lnbkV4dDMyVG82NChpbnQzMlZhbHVlKSwgdmFsdWUpLAotICAgICAgICAg
ICAgdW5zdXJlKGlzSW50MzIpLCB1bnN1cmUoaXNEb3VibGUpKTsKLSAgICAgICAgCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNJbnQzMiwgaXNEb3VibGUp
OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveEludDMy
KGludDMyVmFsdWUpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzRG91YmxlLCBjb250aW51YXRpb24pOwotICAg
ICAgICAKLSAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKGJveERvdWJsZShtX291
dC5pbnRUb0RvdWJsZSh2YWx1ZSkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDY0LCByZXN1bHRzKTsKLSAg
ICB9Ci0gICAgCi0gICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQ1MihMVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9vdXQuc2hsKHZhbHVlLCBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6OmludDUyU2hpZnRBbW91bnQpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGludDUy
VG9TdHJpY3RJbnQ1MihMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9vdXQu
YVNocih2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7
Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc0ludDMyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHBy
b3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0ludDMyKSkKLSAgICAgICAgICAgIHJldHVy
biBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5hYm92ZU9yRXF1YWwoanNWYWx1ZSwgbV90
YWdUeXBlTnVtYmVyKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzTm90SW50MzIoTFZhbHVlIGpzVmFs
dWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlm
IChMVmFsdWUgcHJvdmVuID0gaXNQcm92ZW5WYWx1ZSh0eXBlLCB+U3BlY0ludDMyKSkKLSAgICAg
ICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5iZWxvdyhqc1ZhbHVl
LCBtX3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICBMVmFsdWUgdW5ib3hJbnQzMihMVmFsdWUg
anNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5jYXN0VG9JbnQzMihqc1ZhbHVl
KTsKLSAgICB9Ci0gICAgTFZhbHVlIGJveEludDMyKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX291dC5hZGQobV9vdXQuemVyb0V4dCh2YWx1ZSwgbV9vdXQuaW50NjQpLCBt
X3RhZ1R5cGVOdW1iZXIpOwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNDZWxsT3JNaXNjKExW
YWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewot
ICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0NlbGwg
fCBTcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4g
bV9vdXQudGVzdElzWmVybzY0KGpzVmFsdWUsIG1fdGFnVHlwZU51bWJlcik7Ci0gICAgfQotICAg
IExWYWx1ZSBpc05vdENlbGxPck1pc2MoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQ
cm92ZW5WYWx1ZSh0eXBlLCB+KFNwZWNDZWxsIHwgU3BlY01pc2MpKSkKLSAgICAgICAgICAgIHJl
dHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KGpzVmFsdWUs
IG1fdGFnVHlwZU51bWJlcik7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSB1bmJveERvdWJsZShM
VmFsdWUganNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX291dC5iaXRDYXN0KG1fb3V0
LmFkZChqc1ZhbHVlLCBtX3RhZ1R5cGVOdW1iZXIpLCBtX291dC5kb3VibGVUeXBlKTsKLSAgICB9
Ci0gICAgTFZhbHVlIGJveERvdWJsZShMVmFsdWUgZG91YmxlVmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9vdXQuc3ViKG1fb3V0LmJpdENhc3QoZG91YmxlVmFsdWUsIG1fb3V0LmludDY0
KSwgbV90YWdUeXBlTnVtYmVyKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIGpzVmFsdWVUb1N0
cmljdEludDUyKEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUpCi0gICAgewotICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9JbnQ1
MiB1bmJveGluZyBpbnQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgZG91YmxlQ2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgZG91YmxlIGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvSW50NTIgdW5ib3hpbmcgY29udGludWF0aW9uIikpOwotICAgICAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSBpc05vdEludDMyOwotICAgICAgICBpZiAoIW1faW50ZXJw
cmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0ludDMyKSkKLSAgICAgICAgICAgIGlzTm90
SW50MzIgPSBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIGVsc2UgaWYgKCFtX2ludGVycHJl
dGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIH5TcGVjSW50MzIpKQotICAgICAgICAgICAgaXNOb3RJ
bnQzMiA9IG1fb3V0LmJvb2xlYW5UcnVlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpc05v
dEludDMyID0gdGhpcy0+aXNOb3RJbnQzMihib3hlZFZhbHVlKTsKLSAgICAgICAgbV9vdXQuYnJh
bmNoKGlzTm90SW50MzIsIHVuc3VyZShkb3VibGVDYXNlKSwgdW5zdXJlKGludENhc2UpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGludENhc2UsIGRvdWJsZUNhc2UpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJs
b2NrIGludFRvSW50NTIgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5zaWduRXh0
MzJUbzY0KHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNh
c2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgcG9zc2libGVSZXN1
bHQgPSBtX291dC5jYWxsKAotICAgICAgICAgICAgbV9vdXQuaW50NjQsIG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Db252ZXJ0Qm94ZWREb3VibGVUb0ludDUyKSwgYm94ZWRWYWx1ZSk7Ci0gICAg
ICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkVmFsdWUp
LCBlZGdlLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwKLSAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHBvc3NpYmxlUmVzdWx0LCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Om5vdEludDUy
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGRvdWJsZVRvSW50NTIg
PSBtX291dC5hbmNob3IocG9zc2libGVSZXN1bHQpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgcmV0dXJuIG1fb3V0LnBoaSht
X291dC5pbnQ2NCwgaW50VG9JbnQ1MiwgZG91YmxlVG9JbnQ1Mik7Ci0gICAgfQotICAgIAotICAg
IExWYWx1ZSBkb3VibGVUb1N0cmljdEludDUyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHBvc3NpYmxlUmVzdWx0ID0gbV9vdXQuY2FsbCgKLSAgICAgICAg
ICAgIG1fb3V0LmludDY0LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ29udmVydERvdWJsZVRv
SW50NTIpLCB2YWx1ZSk7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLX1dJVEhfRVhJVF9LSU5EKElu
dDUyT3ZlcmZsb3csCi0gICAgICAgICAgICBkb3VibGVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNJ
bnQ1MkFzRG91YmxlLAotICAgICAgICAgICAgbV9vdXQuZXF1YWwocG9zc2libGVSZXN1bHQsIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6bm90SW50NTIpKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gcG9zc2libGVSZXN1bHQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGNvbnZlcnREb3VibGVU
b0ludDMyKExWYWx1ZSB2YWx1ZSwgYm9vbCBzaG91bGRDaGVja05lZ2F0aXZlWmVybykKLSAgICB7
Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWUgPSBtX291dC5kb3VibGVUb0ludCh2YWx1ZSk7
Ci0gICAgICAgIExWYWx1ZSBpbnRlZ2VyVmFsdWVDb252ZXJ0ZWRUb0RvdWJsZSA9IG1fb3V0Lmlu
dFRvRG91YmxlKGludGVnZXJWYWx1ZSk7Ci0gICAgICAgIExWYWx1ZSB2YWx1ZU5vdENvbnZlcnRp
YmxlVG9JbnRlZ2VyID0gbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZCh2YWx1ZSwgaW50
ZWdlclZhbHVlQ29udmVydGVkVG9Eb3VibGUpOwotICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3cs
IEZvcm1hdHRlZFZhbHVlKERhdGFGb3JtYXREb3VibGUsIHZhbHVlKSwgbV9ub2RlLCB2YWx1ZU5v
dENvbnZlcnRpYmxlVG9JbnRlZ2VyKTsKLQotICAgICAgICBpZiAoc2hvdWxkQ2hlY2tOZWdhdGl2
ZVplcm8pIHsKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIHZhbHVlSXNaZXJvID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJDb252ZXJ0RG91YmxlVG9JbnQzMiBvbiB6ZXJvIikpOwotICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDb252
ZXJ0RG91YmxlVG9JbnQzMiBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuaXNaZXJvMzIoaW50ZWdlclZhbHVlKSwgdW5zdXJlKHZhbHVlSXNaZXJvKSwgdW5z
dXJlKGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKHZhbHVlSXNaZXJvLCBjb250aW51YXRpb24pOwotCi0gICAgICAgICAg
ICBMVmFsdWUgZG91YmxlQml0Y2FzdFRvSW50NjQgPSBtX291dC5iaXRDYXN0KHZhbHVlLCBtX291
dC5pbnQ2NCk7Ci0gICAgICAgICAgICBMVmFsdWUgc2lnbkJpdFNldCA9IG1fb3V0Lmxlc3NUaGFu
KGRvdWJsZUJpdGNhc3RUb0ludDY0LCBtX291dC5jb25zdEludDY0KDApKTsKLQotICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgRm9ybWF0dGVkVmFsdWUoRGF0YUZvcm1hdERvdWJs
ZSwgdmFsdWUpLCBtX25vZGUsIHNpZ25CaXRTZXQpOwotICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwotICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGludGVnZXJWYWx1ZTsKLSAgICB9
Ci0KLSAgICBMVmFsdWUgaXNOdW1iZXIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5
cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQ
cm92ZW5WYWx1ZSh0eXBlLCBTcGVjRnVsbE51bWJlcikpCi0gICAgICAgICAgICByZXR1cm4gcHJv
dmVuOwotICAgICAgICByZXR1cm4gaXNOb3RDZWxsT3JNaXNjKGpzVmFsdWUpOwotICAgIH0KLSAg
ICBMVmFsdWUgaXNOb3ROdW1iZXIoTFZhbHVlIGpzVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlLCB+U3BlY0Z1bGxOdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKLSAgICAgICAgcmV0dXJuIGlzQ2VsbE9yTWlzYyhqc1ZhbHVlKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90Q2VsbChMVmFsdWUganNWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUsIH5TcGVjQ2VsbCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQudGVzdE5vblplcm82NChqc1ZhbHVlLCBtX3RhZ01hc2spOwotICAg
IH0KLSAgICAKLSAgICBMVmFsdWUgaXNDZWxsKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlw
ZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9
IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY0NlbGwpKQotICAgICAgICAgICAgcmV0dXJuIHByb3Zl
bjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LnRlc3RJc1plcm82NChqc1ZhbHVlLCBtX3RhZ01hc2sp
OwotICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RNaXNjKExWYWx1ZSB2YWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBw
cm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUsIH5TcGVjTWlzYykpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmUodmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVGFnQml0VHlwZU90aGVyIHwgVGFnQml0Qm9vbCB8IFRhZ0JpdFVuZGVmaW5lZCkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNNaXNjKExWYWx1ZSB2YWx1ZSwgU3BlY3VsYXRlZFR5
cGUgdHlwZSA9IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4g
PSBpc1Byb3ZlblZhbHVlKHR5cGUsIFNwZWNNaXNjKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92
ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5sb2dpY2FsTm90KGlzTm90TWlzYyh2YWx1ZSkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNOb3RCb29sZWFuKExWYWx1ZSBqc1ZhbHVlLCBTcGVj
dWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVl
IHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgflNwZWNCb29sZWFuKSkKLSAgICAgICAgICAg
IHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9uWmVybzY0KAotICAg
ICAgICAgICAgbV9vdXQuYml0WG9yKGpzVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxz
ZSkpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NCh+MSkpOwotICAgIH0KLSAgICBMVmFs
dWUgaXNCb29sZWFuKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUo
dHlwZSwgU3BlY0Jvb2xlYW4pKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAg
cmV0dXJuIG1fb3V0LmxvZ2ljYWxOb3QoaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKLSAgICB9Ci0g
ICAgTFZhbHVlIHVuYm94Qm9vbGVhbihMVmFsdWUganNWYWx1ZSkKLSAgICB7Ci0gICAgICAgIC8v
IFdlIHdhbnQgdG8gdXNlIGEgY2FzdCB0aGF0IGd1YXJhbnRlZXMgdGhhdCBMTFZNIGtub3dzIHRo
YXQgZXZlbiB0aGUgaW50ZWdlcgotICAgICAgICAvLyB2YWx1ZSBpcyBqdXN0IDAgb3IgMS4gQnV0
IGZvciBub3cgd2UgZG8gaXQgdGhlIGR1bWIgd2F5LgotICAgICAgICByZXR1cm4gbV9vdXQubm90
WmVybzY0KG1fb3V0LmJpdEFuZChqc1ZhbHVlLCBtX291dC5jb25zdEludDY0KDEpKSk7Ci0gICAg
fQotICAgIExWYWx1ZSBib3hCb29sZWFuKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX291dC5zZWxlY3QoCi0gICAgICAgICAgICB2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NChW
YWx1ZVRydWUpLCBtX291dC5jb25zdEludDY0KFZhbHVlRmFsc2UpKTsKLSAgICB9Ci0gICAgCi0g
ICAgTFZhbHVlIGlzTm90T3RoZXIoTFZhbHVlIHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0g
U3BlY0Z1bGxUb3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVu
VmFsdWUodHlwZSwgflNwZWNPdGhlcikpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5iaXRBbmQodmFs
dWUsIG1fb3V0LmNvbnN0SW50NjQoflRhZ0JpdFVuZGVmaW5lZCkpLAotICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQ2NChWYWx1ZU51bGwpKTsKLSAgICB9Ci0gICAgTFZhbHVlIGlzT3RoZXIoTFZh
bHVlIHZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0gICAgewotICAg
ICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSwgU3BlY090aGVyKSkK
LSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0gICAgICAgIHJldHVybiBtX291dC5lcXVhbCgK
LSAgICAgICAgICAgIG1fb3V0LmJpdEFuZCh2YWx1ZSwgbV9vdXQuY29uc3RJbnQ2NCh+VGFnQml0
VW5kZWZpbmVkKSksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDY0KFZhbHVlTnVsbCkpOwot
ICAgIH0KLSAgICAKLSAgICBMVmFsdWUgaXNQcm92ZW5WYWx1ZShTcGVjdWxhdGVkVHlwZSBwcm92
ZW5UeXBlLCBTcGVjdWxhdGVkVHlwZSB3YW50ZWRUeXBlKQotICAgIHsKLSAgICAgICAgaWYgKCEo
cHJvdmVuVHlwZSAmIH53YW50ZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5ib29s
ZWFuVHJ1ZTsKLSAgICAgICAgaWYgKCEocHJvdmVuVHlwZSAmIHdhbnRlZFR5cGUpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgdm9pZCBzcGVjdWxhdGUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgotICAgICAgICBjYXNl
IEtub3duU3RyaW5nVXNlOgotICAgICAgICBjYXNlIEtub3duUHJpbWl0aXZlVXNlOgotICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKLSAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0
ZUludDMyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ2VsbFVzZToK
LSAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGwoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDZWxsT3JPdGhlclVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZUNlbGxPck90
aGVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgS25vd25DZWxsVXNl
OgotICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2Up
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1hY2hpbmVJbnRVc2U6Ci0gICAg
ICAgICAgICBzcGVjdWxhdGVNYWNoaW5lSW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgT2JqZWN0VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2Up
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6Ci0gICAgICAg
ICAgICBzcGVjdWxhdGVGdW5jdGlvbihlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90
aGVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRmluYWxPYmplY3RV
c2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVGaW5hbE9iamVjdChlZGdlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ1VzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZVN0
cmluZyhlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cmluZ0lkZW50
VXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nSWRlbnQoZWRnZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTeW1ib2xVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVT
eW1ib2woZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmpl
Y3RVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3QoZWRnZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ09yU3RyaW5nT2JqZWN0KGVkZ2UpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgTnVtYmVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTnVt
YmVyKGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUmVhbE51bWJlclVz
ZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZVJlYWxOdW1iZXIoZWRnZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgotICAgICAgICAgICAgc3BlY3Vs
YXRlRG91YmxlUmVwUmVhbChlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6Ci0gICAgICAgICAgICBzcGVjdWxhdGVEb3VibGVSZXBN
YWNoaW5lSW50KGVkZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQm9vbGVh
blVzZToKLSAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW4oZWRnZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBOb3RTdHJpbmdWYXJVc2U6Ci0gICAgICAgICAgICBzcGVjdWxh
dGVOb3RTdHJpbmdWYXIoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBO
b3RDZWxsVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRlTm90Q2VsbChlZGdlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIE90aGVyVXNlOgotICAgICAgICAgICAgc3BlY3VsYXRl
T3RoZXIoZWRnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNaXNjVXNlOgot
ICAgICAgICAgICAgc3BlY3VsYXRlTWlzYyhlZGdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVu
c3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kIik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBzcGVjdWxhdGUoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNw
ZWN1bGF0ZShlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVJbnQzMihFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBsb3dJbnQzMihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVDZWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGxvd0NlbGwoZWRn
ZSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQ2VsbE9yT3RoZXIoRWRnZSBlZGdl
KQotICAgIHsKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzTm90Q2VsbCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3BlY3VsYXRlIENlbGxPck90aGVyIG5vdCBjZWxsIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IlNwZWN1bGF0ZSBDZWxsT3JPdGhlciBjb250aW51YXRpb24iKSk7Ci0KLSAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShlZGdlKSksIHVuc3VyZShjb250aW51YXRp
b24pLCB1bnN1cmUoaXNOb3RDZWxsKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhpc05vdENlbGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIEZUTF9U
WVBFX0NIRUNLKGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVy
LCBpc05vdE90aGVyKHZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
LQotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVNYWNoaW5lSW50KEVkZ2UgZWRnZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIGpzVmFsdWVUb1N0cmljdEludDUyKGVkZ2Us
IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSk7Ci0gICAgfQotICAg
IAotICAgIExWYWx1ZSBpc09iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9
IFNwZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3Zl
blZhbHVlKHR5cGUgJiBTcGVjQ2VsbCwgU3BlY09iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4g
cHJvdmVuOwotICAgICAgICByZXR1cm4gbV9vdXQuYWJvdmVPckVxdWFsKAotICAgICAgICAgICAg
bV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwK
LSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoT2JqZWN0VHlwZSkpOwotICAgIH0KLQotICAg
IExWYWx1ZSBpc05vdE9iamVjdChMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNw
ZWNGdWxsVG9wKQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZh
bHVlKHR5cGUgJiBTcGVjQ2VsbCwgflNwZWNPYmplY3QpKQotICAgICAgICAgICAgcmV0dXJuIHBy
b3ZlbjsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmJlbG93KAotICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoT2JqZWN0VHlwZSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBp
c05vdFN0cmluZyhMVmFsdWUgY2VsbCwgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IFNwZWNGdWxsVG9w
KQotICAgIHsKLSAgICAgICAgaWYgKExWYWx1ZSBwcm92ZW4gPSBpc1Byb3ZlblZhbHVlKHR5cGUg
JiBTcGVjQ2VsbCwgflNwZWNTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuIHByb3ZlbjsKLSAg
ICAgICAgcmV0dXJuIG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGNl
bGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIodm0oKS5zdHJpbmdTdHJ1Y3R1cmUtPmlkKCkpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZh
bHVlIGlzU3RyaW5nKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxU
b3ApCi0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlw
ZSAmIFNwZWNDZWxsLCBTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybiBwcm92ZW47Ci0g
ICAgICAgIHJldHVybiBtX291dC5lcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihjZWxs
LCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5jb25zdElu
dDMyKHZtKCkuc3RyaW5nU3RydWN0dXJlLT5pZCgpKSk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGlz
Tm90U3ltYm9sKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3Ap
Ci0gICAgewotICAgICAgICBpZiAoTFZhbHVlIHByb3ZlbiA9IGlzUHJvdmVuVmFsdWUodHlwZSAm
IFNwZWNDZWxsLCB+U3BlY1N5bWJvbCkpCi0gICAgICAgICAgICByZXR1cm4gcHJvdmVuOwotICAg
ICAgICByZXR1cm4gbV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoY2Vs
bCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnQzMih2bSgpLnN5bWJvbFN0cnVjdHVyZS0+aWQoKSkpOwotICAgIH0KLQotICAgIExWYWx1ZSBp
c0FycmF5VHlwZShMVmFsdWUgY2VsbCwgQXJyYXlNb2RlIGFycmF5TW9kZSkKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgotICAgICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgaW5kZXhpbmdUeXBlID0gbV9vdXQubG9hZDha
ZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfaW5kZXhpbmdUeXBlKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgotICAgICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJVbmV4cGVjdGVkIG9yaWdpbmFsIGFycmF5Iik7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheToKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChpbmRleGluZ1R5cGUsIG1fb3V0LmNvbnN0SW50MzIo
SXNBcnJheSB8IEluZGV4aW5nU2hhcGVNYXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0
LmNvbnN0SW50MzIoSXNBcnJheSB8IGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBBcnJheTo6Tm9uQXJyYXk6Ci0gICAgICAgICAgICBj
YXNlIEFycmF5OjpPcmlnaW5hbE5vbkFycmF5OgotICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5lcXVhbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGluZGV4aW5nVHlwZSwg
bV9vdXQuY29uc3RJbnQzMihJc0FycmF5IHwgSW5kZXhpbmdTaGFwZU1hc2spKSwKLSAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihhcnJheU1vZGUuc2hhcGVNYXNrKCkpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJyYXk6OlBvc3NpYmx5QXJyYXk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5iaXRBbmQoaW5kZXhpbmdUeXBlLCBtX291dC5jb25zdEludDMyKEluZGV4aW5nU2hhcGVN
YXNrKSksCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoYXJyYXlNb2RlLnNo
YXBlTWFzaygpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0g
ICAgICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9h
ZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKERpcmVjdEFyZ3VtZW50c1R5cGUpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIo
Y2VsbCwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKLSAgICAgICAgICAgICAgICBtX291
dC5jb25zdEludDMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlw
ZSksCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUoYXJyYXlNb2RlLnR5cGVkQXJyYXlUeXBlKCkpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Ci0gICAgTFZhbHVlIGlzRnVuY3Rpb24oTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRUeXBlIHR5cGUg
PSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVuID0gaXNQcm92
ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIFNwZWNGdW5jdGlvbikpCi0gICAgICAgICAgICByZXR1
cm4gcHJvdmVuOwotICAgICAgICByZXR1cm4gaXNUeXBlKGNlbGwsIEpTRnVuY3Rpb25UeXBlKTsK
LSAgICB9Ci0gICAgTFZhbHVlIGlzTm90RnVuY3Rpb24oTFZhbHVlIGNlbGwsIFNwZWN1bGF0ZWRU
eXBlIHR5cGUgPSBTcGVjRnVsbFRvcCkKLSAgICB7Ci0gICAgICAgIGlmIChMVmFsdWUgcHJvdmVu
ID0gaXNQcm92ZW5WYWx1ZSh0eXBlICYgU3BlY0NlbGwsIH5TcGVjRnVuY3Rpb24pKQotICAgICAg
ICAgICAgcmV0dXJuIHByb3ZlbjsKLSAgICAgICAgcmV0dXJuIGlzTm90VHlwZShjZWxsLCBKU0Z1
bmN0aW9uVHlwZSk7Ci0gICAgfQotICAgICAgICAgICAgCi0gICAgTFZhbHVlIGlzRXhvdGljRm9y
VHlwZW9mKExWYWx1ZSBjZWxsLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1bGxUb3ApCi0g
ICAgewotICAgICAgICBpZiAoISh0eXBlICYgU3BlY09iamVjdE90aGVyKSkKLSAgICAgICAgICAg
IHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7Ci0gICAgICAgIHJldHVybiBtX291dC50ZXN0Tm9u
WmVybzMyKAotICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIoY2VsbCwgbV9oZWFwcy5K
U0NlbGxfdHlwZUluZm9GbGFncyksCi0gICAgICAgICAgICBtX291dC5jb25zdEludDMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQgfCBUeXBlT2ZTaG91bGRDYWxsR2V0Q2FsbERhdGEpKTsKLSAgICB9
Ci0gICAgCi0gICAgTFZhbHVlIGlzVHlwZShMVmFsdWUgY2VsbCwgSlNUeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkOFpl
cm9FeHQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAotICAgICAgICAgICAg
bV9vdXQuY29uc3RJbnQzMih0eXBlKSk7Ci0gICAgfQotICAgIAotICAgIExWYWx1ZSBpc05vdFR5
cGUoTFZhbHVlIGNlbGwsIEpTVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb3V0
LmxvZ2ljYWxOb3QoaXNUeXBlKGNlbGwsIHR5cGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBz
cGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZU
TF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY09iamVjdCwgaXNOb3RP
YmplY3QoY2VsbCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdl
KSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlRnVuY3Rpb24oRWRnZSBlZGdlLCBM
VmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShj
ZWxsKSwgZWRnZSwgU3BlY0Z1bmN0aW9uLCBpc05vdEZ1bmN0aW9uKGNlbGwpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGdW5jdGlvbihFZGdlIGVkZ2UpCi0gICAgewotICAgICAg
ICBzcGVjdWxhdGVGdW5jdGlvbihlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAg
IGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGNlbGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVy
IGNlbGwgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgcHJpbWl0aXZlQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlT2JqZWN0T3JPdGhlciBwcmltaXRpdmUgY2FzZSIp
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJzcGVjdWxhdGVPYmplY3RPck90aGVyIGNvbnRpbnVhdGlvbiIpKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fb3V0LmJyYW5jaChpc05vdENlbGwodmFsdWUsIHByb3ZlblR5cGUoZWRnZSkpLCB1
bnN1cmUocHJpbWl0aXZlQ2FzZSksIHVuc3VyZShjZWxsQ2FzZSkpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjZWxsQ2FzZSwgcHJpbWl0
aXZlQ2FzZSk7Ci0gICAgICAgIAotICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAg
IGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsICh+U3BlY0NlbGwpIHwgU3BlY09iamVjdCwgaXNO
b3RPYmplY3QodmFsdWUpKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHByaW1pdGl2ZUNhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNDZWxsIHwgU3BlY090aGVyLCBpc05v
dE90aGVyKHZhbHVlKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlIGVk
Z2UsIExWYWx1ZSBjZWxsKQotICAgIHsKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNGaW5hbE9iamVjdCwgaXNOb3RUeXBl
KGNlbGwsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZUZpbmFsT2JqZWN0KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQotICAgIHsKLSAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soanNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjU3RyaW5nIHwgflNwZWNDZWxsLCBp
c05vdFN0cmluZyhjZWxsKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
KEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudChFZGdl
IGVkZ2UsIExWYWx1ZSBzdHJpbmcsIExWYWx1ZSBzdHJpbmdJbXBsKQotICAgIHsKLSAgICAgICAg
aWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTdHJpbmdJZGVudCB8
IH5TcGVjU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHNw
ZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoc3RyaW5nKSwgZWRnZS5ub2RlKCksIG1fb3V0
LmlzTnVsbChzdHJpbmdJbXBsKSk7Ci0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShzdHJpbmcpLCBlZGdlLm5vZGUoKSwKLSAgICAgICAgICAgIG1f
b3V0LnRlc3RJc1plcm8zMigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksCi0gICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsKLSAgICAgICAgbV9p
bnRlcnByZXRlci5maWx0ZXIoZWRnZSwgU3BlY1N0cmluZ0lkZW50IHwgflNwZWNTdHJpbmcpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ0lkZW50KEVkZ2UgZWRnZSkKLSAg
ICB7Ci0gICAgICAgIGxvd1N0cmluZ0lkZW50KGVkZ2UpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZ09iamVjdChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZ09iamVjdCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RG
b3JDZWxsKGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwotICAgICAgICBtX2ludGVycHJldGVyLmZpbHRl
cihlZGdlLCBTcGVjU3RyaW5nT2JqZWN0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmdPclN0cmluZ09iamVjdChFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICBpZiAoIW1f
aW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdP
YmplY3QpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbm90U3RyaW5nID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTcGVjdWxhdGUgU3RyaW5nT3JT
dHJpbmdPYmplY3Qgbm90IHN0cmluZyBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBTdHJpbmdPclN0cmlu
Z09iamVjdCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgc3RydWN0
dXJlSUQgPSBtX291dC5sb2FkMzIobG93Q2VsbChlZGdlKSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOwotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbChz
dHJ1Y3R1cmVJRCwgbV9vdXQuY29uc3RJbnQzMih2bSgpLnN0cmluZ1N0cnVjdHVyZS0+aWQoKSkp
LAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RTdHJpbmcpKTsK
LSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
bm90U3RyaW5nLCBjb250aW51YXRpb24pOwotICAgICAgICBzcGVjdWxhdGVTdHJpbmdPYmplY3RG
b3JTdHJ1Y3R1cmVJRChlZGdlLCBzdHJ1Y3R1cmVJRCk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAKLSAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIoZWRn
ZSwgU3BlY1N0cmluZyB8IFNwZWNTdHJpbmdPYmplY3QpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvckNlbGwoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAg
ICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKGVkZ2UsIG1f
b3V0LmxvYWQzMihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ09iamVjdEZvclN0cnVjdHVyZUlEKEVkZ2UgZWRn
ZSwgTFZhbHVlIHN0cnVjdHVyZUlEKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdP
YmplY3RTdHJ1Y3R1cmUgPQotICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9u
b2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChhYnN0cmFjdFN0cnVjdHVyZShlZGdlKS5pc1N1YnNldE9mKFN0cnVjdHVy
ZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgbm9W
YWx1ZSgpLCAwLAotICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlSUQsIHdlYWtT
dHJ1Y3R1cmVJRChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSk7Ci0gICAgfQotCi0gICAgdm9pZCBz
cGVjdWxhdGVTeW1ib2woRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZU
TF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1N5bWJvbCB8IH5TcGVj
Q2VsbCwgaXNOb3RTeW1ib2woY2VsbCkpOwotICAgIH0KLQotICAgIHZvaWQgc3BlY3VsYXRlU3lt
Ym9sKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZVN5bWJvbChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNwZWN1bGF0ZU5vbk51bGxPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKLSAgICB7Ci0gICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFs
dWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY09iamVjdCwgaXNOb3RPYmplY3QoY2VsbCkpOwotICAg
ICAgICBpZiAobWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0ZSgKLSAgICAg
ICAgICAgIEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZS5ub2RlKCksCi0gICAgICAg
ICAgICBtX291dC50ZXN0Tm9uWmVybzMyKAotICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvRmxhZ3MpLAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOdW1iZXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIsIGlzTm90TnVtYmVyKHZhbHVlKSk7Ci0gICAgfQotICAgIAotICAgIHZv
aWQgc3BlY3VsYXRlUmVhbE51bWJlcihFZGdlIGVkZ2UpCi0gICAgewotICAgICAgICAvLyBEbyBh
biBlYXJseSByZXR1cm4gaGVyZSBiZWNhdXNlIGxvd0RvdWJsZSgpIGNhbiBjcmVhdGUgYSBsb3Qg
b2YgY29udHJvbCBmbG93LgotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hl
Y2soZWRnZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dKU1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAg
ICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKLSAgICAgICAgCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1
bGF0ZVJlYWxOdW1iZXIgaW50IGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgic3BlY3VsYXRlUmVhbE51bWJlciBjb250aW51
YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBt
X291dC5kb3VibGVFcXVhbChkb3VibGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAg
dXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgdHlwZUNoZWNrKAotICAgICAgICAgICAganNWYWx1
ZVZhbHVlKHZhbHVlKSwgbV9ub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwK
LSAgICAgICAgICAgIGlzTm90SW50MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkgJiB+U3BlY0Z1bGxEb3VibGUpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSBlZGdlKQotICAg
IHsKLSAgICAgICAgLy8gRG8gYW4gZWFybHkgcmV0dXJuIGhlcmUgYmVjYXVzZSBsb3dEb3VibGUo
KSBjYW4gY3JlYXRlIGEgbG90IG9mIGNvbnRyb2wgZmxvdy4KLSAgICAgICAgaWYgKCFtX2ludGVy
cHJldGVyLm5lZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGVkZ2UpOwotICAgICAgICBGVExf
VFlQRV9DSEVDSygKLSAgICAgICAgICAgIGRvdWJsZVZhbHVlKHZhbHVlKSwgZWRnZSwgU3BlY0Rv
dWJsZVJlYWwsCi0gICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHZh
bHVlLCB2YWx1ZSkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcE1h
Y2hpbmVJbnQoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5l
ZWRzVHlwZUNoZWNrKGVkZ2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAg
ICAgZG91YmxlVG9TdHJpY3RJbnQ1MihlZGdlLCBsb3dEb3VibGUoZWRnZSkpOwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJvb2xlYW4oRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAg
bG93Qm9vbGVhbihlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVOb3RTdHJp
bmdWYXIoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRz
VHlwZUNoZWNrKGVkZ2UsIH5TcGVjU3RyaW5nVmFyKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUoZWRnZSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENh
c2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgaXMgY2Vs
bCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlNwZWN1bGF0ZSBOb3RTdHJpbmdWYXIgaXMgc3RyaW5nIGNhc2UiKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
U3BlY3VsYXRlIE5vdFN0cmluZ1ZhciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKGVkZ2UpKSwgdW5zdXJlKGlz
Q2VsbENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAgIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2Fz
ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyh2YWx1ZSwgcHJvdmVuVHlwZShlZGdl
KSksIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7Ci0gICAgICAg
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIHNwZWN1bGF0ZVN0cmluZ0lkZW50KGVkZ2UsIHZhbHVlLCBtX291dC5sb2FkUHRyKHZh
bHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZU5vdENlbGwoRWRnZSBl
ZGdlKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2ludGVycHJldGVyLm5lZWRzVHlwZUNoZWNrKGVk
Z2UpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShlZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICB0
eXBlQ2hlY2soanNWYWx1ZVZhbHVlKHZhbHVlKSwgZWRnZSwgflNwZWNDZWxsLCBpc0NlbGwodmFs
dWUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVPdGhlcihFZGdlIGVkZ2UpCi0g
ICAgewotICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dK
U1ZhbHVlKGVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIHR5cGVDaGVj
ayhqc1ZhbHVlVmFsdWUodmFsdWUpLCBlZGdlLCBTcGVjT3RoZXIsIGlzTm90T3RoZXIodmFsdWUp
KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzcGVjdWxhdGVNaXNjKEVkZ2UgZWRnZSkKLSAgICB7
Ci0gICAgICAgIGlmICghbV9pbnRlcnByZXRlci5uZWVkc1R5cGVDaGVjayhlZGdlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFs
dWUoZWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgdHlwZUNoZWNrKGpz
VmFsdWVWYWx1ZSh2YWx1ZSksIGVkZ2UsIFNwZWNNaXNjLCBpc05vdE1pc2ModmFsdWUpKTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3Rp
bGxWYWxpZCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9ncmFwaC5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgfQotICAgIAotICAgIExWYWx1ZSBsb2FkQ2VsbFN0YXRlKExWYWx1ZSBiYXNlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X2NlbGxTdGF0ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBlbWl0U3RvcmVCYXJyaWVyKExWYWx1ZSBi
YXNlKQotICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIikpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgY29u
dGludWF0aW9uIikpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0
Lm5vdFplcm8zMihsb2FkQ2VsbFN0YXRlKGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCBy
YXJlbHkoc2xvd1BhdGgpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotCi0gICAgICAgIC8vIFdlIGVtaXQg
dGhlIHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRo
aXMgd2lsbCBuZXZlciBmaXJlLiBBbmQKLSAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0
IG1ha2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCBy
YXRoZXIgdGhhbgotICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9wdGltaXppbmcgaXQu
Ci0gICAgICAgIGxhenlTbG93UGF0aCgKLSAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIo
KTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQ
YXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVn
aXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0
b3Igc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3RlckFs
bG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UlJlZyBzY3JhdGNoMiA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hH
UFIoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpQcmVzZXJ2ZWRTdGF0ZSBwcmVzZXJ2ZWRTdGF0ZSA9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQ
dXNoaW5nKGppdCwgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yOjpFeHRyYVN0YWNrU3BhY2U6OlNw
YWNlRm9yQ0NhbGwpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBhdGggY2FsbCwgd2UgZG9uJ3Qg
aGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2ZSB0aGVtIGFnYWluLgotICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0KHNj
cmF0Y2gxLCBzY3JhdGNoMikpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmll
ckJ1ZmZlcigpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJp
ZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMik7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWws
IHNjcmF0Y2gyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIsIHdy
aXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJy
aWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOwotICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0NhbGxIZWxwZXJz
OjpTY2FsZVB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGpp
dCwgcHJlc2VydmVkU3RhdGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9u
ZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgbmVl
ZFRvRmx1c2gubGluaygmaml0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0LCBwYXJh
bXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1
ZmZlciwgSW52YWxpZEdQUlJlZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BS
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0
b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgcHJlc2VydmVkU3RhdGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGJhc2Up
OwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLSAgICBMVmFsdWUgdm1DYWxsKExUeXBlIHR5cGUsIExWYWx1ZSBmdW5j
dGlvbiwgQXJncy4uLiBhcmdzKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodCgpOwotICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuY2FsbCh0eXBlLCBmdW5jdGlvbiwgYXJncy4uLik7
Ci0gICAgICAgIGNhbGxDaGVjaygpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNhbGxQcmVmbGlnaHQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotICAgIHsK
LSAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKLSAgICAgICAgbV9vdXQuc3RvcmUz
MigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAot
ICAgICAgICAgICAgdGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNhbGxQcmVmbGlnaHQoKQotICAgIHsKLSAgICAgICAgY2FsbFByZWZsaWdodChjb2Rl
T3JpZ2luRGVzY3JpcHRpb25PZkNhbGxTaXRlKCkpOwotICAgIH0KLQotICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbkRlc2NyaXB0aW9uT2ZDYWxsU2l0ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBD
b2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
aWYgKG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIKLSAgICAgICAgICAgIHx8
IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyCi0gICAgICAgICAg
ICB8fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIp
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgY2FzZSBhcmlzZXMgd2hlbiB5b3UgaGF2ZSBhIHNpdHVh
dGlvbiBsaWtlIHRoaXM6Ci0gICAgICAgICAgICAvLyBmb28gbWFrZXMgYSBjYWxsIHRvIGJhciwg
YmFyIGlzIGlubGluZWQgaW4gZm9vLiBiYXIgbWFrZXMgYSBjYWxsCi0gICAgICAgICAgICAvLyB0
byBiYXogYW5kIGJheiBpcyBpbmxpbmVkIGluIGJhci4gQW5kIHRoZW4gYmF6IG1ha2VzIGEgdGFp
bC1jYWxsIHRvIGpheiwKLSAgICAgICAgICAgIC8vIGFuZCBqYXogaXMgaW5saW5lZCBpbiBiYXou
IFdlIHdhbnQgdGhlIGNhbGxmcmFtZSBmb3IgamF6IHRvIGFwcGVhciB0byAKLSAgICAgICAgICAg
IC8vIGhhdmUgY2FsbGVyIGJlIGJhci4KLSAgICAgICAgICAgIGNvZGVPcmlnaW4gPSAqY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nVGFpbENhbGxzKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjYWxsQ2hlY2soKQotICAgIHsKLSAgICAgICAgaWYgKE9wdGlvbnM6OnVzZUV4Y2VwdGlvbkZ1
enooKSkKLSAgICAgICAgICAgIG1fb3V0LmNhbGwobV9vdXQudm9pZFR5cGUsIG1fb3V0Lm9wZXJh
dGlvbihvcGVyYXRpb25FeGNlcHRpb25GdXp6KSwgbV9jYWxsRnJhbWUpOwotICAgICAgICAKLSAg
ICAgICAgTFZhbHVlIGV4Y2VwdGlvbiA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSh2bSgp
LmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7Ci0gICAgICAgIExWYWx1ZSBoYWRFeGNlcHRpb24gPSBt
X291dC5ub3RaZXJvNjQoZXhjZXB0aW9uKTsKLQotICAgICAgICBDb2RlT3JpZ2luIG9wQ2F0Y2hP
cmlnaW47Ci0gICAgICAgIEhhbmRsZXJJbmZvKiBleGNlcHRpb25IYW5kbGVyOwotICAgICAgICBp
ZiAobV9ncmFwaC53aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZShtX29yaWdpbi5mb3JF
eGl0LCBvcENhdGNoT3JpZ2luLCBleGNlcHRpb25IYW5kbGVyKSkgewotICAgICAgICAgICAgYm9v
bCBleGl0T0sgPSB0cnVlOwotICAgICAgICAgICAgYm9vbCBpc0V4Y2VwdGlvbkhhbmRsZXIgPSB0
cnVlOwotICAgICAgICAgICAgYXBwZW5kT1NSRXhpdCgKLSAgICAgICAgICAgICAgICBFeGNlcHRp
b25DaGVjaywgbm9WYWx1ZSgpLCBudWxscHRyLCBoYWRFeGNlcHRpb24sCi0gICAgICAgICAgICAg
ICAgbV9vcmlnaW4ud2l0aEZvckV4aXRBbmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKSwg
aXNFeGNlcHRpb25IYW5kbGVyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
RXhjZXB0aW9uIGNoZWNrIGNvbnRpbnVhdGlvbiIpKTsKLQotICAgICAgICBtX291dC5icmFuY2go
Ci0gICAgICAgICAgICBoYWRFeGNlcHRpb24sIHJhcmVseShtX2hhbmRsZUV4Y2VwdGlvbnMpLCB1
c3VhbGx5KGNvbnRpbnVhdGlvbikpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7Ci0gICAgfQotCi0gICAgUmVmUHRyPFBhdGNocG9pbnRFeGNlcHRpb25IYW5kbGU+IHBy
ZXBhcmVQYXRjaHBvaW50Rm9yRXhjZXB0aW9ucyhQYXRjaHBvaW50VmFsdWUqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgQ29kZU9yaWdpbiBvcENhdGNoT3JpZ2luOwotICAgICAgICBIYW5kbGVySW5m
byogZXhjZXB0aW9uSGFuZGxlcjsKLSAgICAgICAgYm9vbCB3aWxsQ2F0Y2hFeGNlcHRpb24gPSBt
X2dyYXBoLndpbGxDYXRjaEV4Y2VwdGlvbkluTWFjaGluZUZyYW1lKG1fb3JpZ2luLmZvckV4aXQs
IG9wQ2F0Y2hPcmlnaW4sIGV4Y2VwdGlvbkhhbmRsZXIpOwotICAgICAgICBpZiAoIXdpbGxDYXRj
aEV4Y2VwdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQYXRjaHBvaW50RXhjZXB0aW9uSGFuZGxl
OjpkZWZhdWx0SGFuZGxlKG1fZnRsU3RhdGUpOwotCi0gICAgICAgIGlmICh2ZXJib3NlQ29tcGls
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICBQYXRjaHBvaW50IGV4
Y2VwdGlvbiBPU1IgZXhpdCAjIiwgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0RGVzY3JpcHRv
cnMuc2l6ZSgpLCAiIHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxu
Iik7Ci0gICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwg
bGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7Ci0gICAgICAgIH0KLQotICAg
ICAgICBib29sIGV4aXRPSyA9IHRydWU7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gbV9v
cmlnaW4ud2l0aEZvckV4aXRBbmRFeGl0T0sob3BDYXRjaE9yaWdpbiwgZXhpdE9LKTsKLQotICAg
ICAgICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVz
Y3JpcHRvcihub1ZhbHVlKCksIG51bGxwdHIpOwotCi0gICAgICAgIC8vIENvbXB1dGUgdGhlIG9m
ZnNldCBpbnRvIHRoZSBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMgd2hlcmUgd2Ugd2lsbCBmaW5k
IHRoZSBleGl0IGFyZ3VtZW50cwotICAgICAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gYXBwZW5kLiBX
ZSBuZWVkIHRvIGFjY291bnQgZm9yIGJvdGggdGhlIGNoaWxkcmVuIHdlJ3ZlIGFscmVhZHkgYWRk
ZWQsIGFuZAotICAgICAgICAvLyBmb3IgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmVzdWx0IHZhbHVl
IGlmIHRoZSBwYXRjaHBvaW50IGlzIG5vdCB2b2lkLgotICAgICAgICB1bnNpZ25lZCBvZmZzZXQg
PSB2YWx1ZS0+bnVtQ2hpbGRyZW4oKTsKLSAgICAgICAgaWYgKHZhbHVlLT50eXBlKCkgIT0gVm9p
ZCkKLSAgICAgICAgICAgIG9mZnNldCsrOwotCi0gICAgICAgIC8vIFVzZSBMYXRlQ29sZEFueSB0
byBlbnN1cmUgdGhhdCB0aGUgc3RhY2ttYXAgYXJndW1lbnRzIGludGVyZmVyZSB3aXRoIHRoZSBw
YXRjaHBvaW50J3MKLSAgICAgICAgLy8gcmVzdWx0IGFuZCB3aXRoIGFueSBsYXRlLWNsb2JiZXJl
ZCByZWdpc3RlcnMuCi0gICAgICAgIHZhbHVlLT5hcHBlbmRWZWN0b3JXaXRoUmVwKAotICAgICAg
ICAgICAgYnVpbGRFeGl0QXJndW1lbnRzKGV4aXREZXNjcmlwdG9yLCBvcENhdGNoT3JpZ2luLCBu
b1ZhbHVlKCkpLAotICAgICAgICAgICAgVmFsdWVSZXA6OkxhdGVDb2xkQW55KTsKLQotICAgICAg
ICByZXR1cm4gUGF0Y2hwb2ludEV4Y2VwdGlvbkhhbmRsZTo6Y3JlYXRlKAotICAgICAgICAgICAg
bV9mdGxTdGF0ZSwgZXhpdERlc2NyaXB0b3IsIG9yaWdpbiwgb2Zmc2V0LCAqZXhjZXB0aW9uSGFu
ZGxlcik7Ci0gICAgfQotCi0gICAgTEJhc2ljQmxvY2sgbG93QmxvY2soREZHOjpCYXNpY0Jsb2Nr
KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2Nrcy5nZXQoYmxvY2spOwotICAg
IH0KLQotICAgIE9TUkV4aXREZXNjcmlwdG9yKiBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICZtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9ycy5hbGxvYygKLSAgICAg
ICAgICAgIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzLm51bWJlck9mQXJndW1lbnRzKCksCi0gICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZkxvY2FscygpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBhcHBlbmRP
U1JFeGl0KAotICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwgCi0gICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luLCBib29sIGlzRXhjZXB0aW9uSGFuZGxlciA9IGZhbHNlKQotICAgIHsKLSAgICAg
ICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZGF0YUxv
ZygiICAgIE9TUiBleGl0ICMiLCBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXREZXNjcmlwdG9y
cy5zaXplKCksICIgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4i
KTsKLSAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBs
aXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBvcmlnaW4uZXhpdE9LKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChkb09TUkV4aXRGdXp6aW5nKCkgJiYgIWlzRXhjZXB0aW9uSGFuZGxlcikg
ewotICAgICAgICAgICAgTFZhbHVlIG51bWJlck9mRnV6ekNoZWNrcyA9IG1fb3V0LmFkZCgKLSAg
ICAgICAgICAgICAgICBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUoJmdfbnVtYmVyT2ZPU1JF
eGl0RnV6ekNoZWNrcykpLAotICAgICAgICAgICAgICAgIG1fb3V0LmludDMyT25lKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9vdXQuc3RvcmUzMihudW1iZXJPZkZ1enpDaGVja3MsIG1f
b3V0LmFic29sdXRlKCZnX251bWJlck9mT1NSRXhpdEZ1enpDaGVja3MpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKHVuc2lnbmVkIGF0T3JBZnRlciA9IE9wdGlvbnM6OmZpcmVPU1JF
eGl0RnV6ekF0T3JBZnRlcigpKSB7Ci0gICAgICAgICAgICAgICAgZmFpbENvbmRpdGlvbiA9IG1f
b3V0LmJpdE9yKAotICAgICAgICAgICAgICAgICAgICBmYWlsQ29uZGl0aW9uLAotICAgICAgICAg
ICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwobnVtYmVyT2ZGdXp6Q2hlY2tzLCBtX291dC5j
b25zdEludDMyKGF0T3JBZnRlcikpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh1
bnNpZ25lZCBhdCA9IE9wdGlvbnM6OmZpcmVPU1JFeGl0RnV6ekF0KCkpIHsKLSAgICAgICAgICAg
ICAgICBmYWlsQ29uZGl0aW9uID0gbV9vdXQuYml0T3IoCi0gICAgICAgICAgICAgICAgICAgIGZh
aWxDb25kaXRpb24sCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKG51bWJlck9mRnV6
ekNoZWNrcywgbV9vdXQuY29uc3RJbnQzMihhdCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChmYWlsQ29uZGl0aW9uID09IG1fb3V0LmJvb2xlYW5GYWxzZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBibGVzc1NwZWN1bGF0aW9uKAotICAgICAgICAg
ICAgbV9vdXQuc3BlY3VsYXRlKGZhaWxDb25kaXRpb24pLCBraW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCBvcmlnaW4pOwotICAgIH0KLQotICAgIHZvaWQgYmxlc3NTcGVjdWxhdGlvbihDaGVja1Zh
bHVlKiB2YWx1ZSwgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUq
IGhpZ2hWYWx1ZSwgTm9kZU9yaWdpbiBvcmlnaW4pCi0gICAgewotICAgICAgICBPU1JFeGl0RGVz
Y3JpcHRvciogZXhpdERlc2NyaXB0b3IgPSBhcHBlbmRPU1JFeGl0RGVzY3JpcHRvcihsb3dWYWx1
ZSwgaGlnaFZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlLT5hcHBlbmRDb2xkQW55cyhi
dWlsZEV4aXRBcmd1bWVudHMoZXhpdERlc2NyaXB0b3IsIG9yaWdpbi5mb3JFeGl0LCBsb3dWYWx1
ZSkpOwotCi0gICAgICAgIFN0YXRlKiBzdGF0ZSA9ICZtX2Z0bFN0YXRlOwotICAgICAgICB2YWx1
ZS0+c2V0R2VuZXJhdG9yKAotICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgQjM6OlN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7Ci0gICAgICAgICAgICAg
ICAgZXhpdERlc2NyaXB0b3ItPmVtaXRPU1JFeGl0KAotICAgICAgICAgICAgICAgICAgICAqc3Rh
dGUsIGtpbmQsIG9yaWdpbiwgaml0LCBwYXJhbXMsIDApOwotICAgICAgICAgICAgfSk7Ci0gICAg
fQotCi0gICAgU3RhY2ttYXBBcmd1bWVudExpc3QgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAg
ICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsCi0gICAgICAgIHVuc2lnbmVkIG9mZnNldE9mRXhp
dEFyZ3VtZW50c0luU3RhY2ttYXBMb2NhdGlvbnMgPSAwKQotICAgIHsKLSAgICAgICAgU3RhY2tt
YXBBcmd1bWVudExpc3QgcmVzdWx0OwotICAgICAgICBidWlsZEV4aXRBcmd1bWVudHMoCi0gICAg
ICAgICAgICBleGl0RGVzY3JpcHRvciwgZXhpdE9yaWdpbiwgcmVzdWx0LCBsb3dWYWx1ZSwgb2Zm
c2V0T2ZFeGl0QXJndW1lbnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYnVpbGRFeGl0QXJndW1lbnRzKAotICAgICAg
ICBPU1JFeGl0RGVzY3JpcHRvciogZXhpdERlc2NyaXB0b3IsIENvZGVPcmlnaW4gZXhpdE9yaWdp
biwgU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsCi0gICAgICAgIHVuc2lnbmVkIG9mZnNldE9mRXhpdEFyZ3VtZW50c0luU3RhY2ttYXBMb2Nh
dGlvbnMgPSAwKQotICAgIHsKLSAgICAgICAgaWYgKCEhbG93VmFsdWUpCi0gICAgICAgICAgICBh
cmd1bWVudHMuYXBwZW5kKGxvd1ZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgQXZh
aWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eU1hcCA9IHRoaXMtPmF2YWlsYWJpbGl0eU1hcCgpOwot
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAucHJ1bmVCeUxpdmVuZXNzKG1fZ3JhcGgsIGV4aXRPcmln
aW4pOwotICAgICAgICAKLSAgICAgICAgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24qPiBtYXA7Ci0gICAgICAgIGF2YWlsYWJpbGl0eU1hcC5mb3JFYWNoQXZhaWxh
YmlsaXR5KAotICAgICAgICAgICAgWyZdIChBdmFpbGFiaWxpdHkgYXZhaWxhYmlsaXR5KSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhdmFpbGFiaWxpdHkuc2hvdWxkVXNlTm9kZSgpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGF2YWlsYWJpbGl0eS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFu
b2RlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1hcC5hZGQo
bm9kZSwgbnVsbHB0cik7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhpdERlc2NyaXB0b3ItPm1fbWF0ZXJpYWxpemF0aW9ucy5hZGQobm9k
ZS0+b3AoKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
eGl0RGVzY3JpcHRvci0+bV92YWx1ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGludCBv
cGVyYW5kID0gZXhpdERlc2NyaXB0b3ItPm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgQXZhaWxhYmlsaXR5IGF2YWlsYWJpbGl0eSA9IGF2YWls
YWJpbGl0eU1hcC5tX2xvY2Fsc1tpXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKE9w
dGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKLSAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKAotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBtX25vZGUsCi0gICAgICAg
ICAgICAgICAgICAgICghKGF2YWlsYWJpbGl0eS5pc0RlYWQoKSAmJiBtX2dyYXBoLmlzTGl2ZUlu
Qnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLCBleGl0T3JpZ2luKSkpIHx8IG1fZ3Jh
cGgubV9wbGFuLm1vZGUgPT0gRlRMRm9yT1NSRW50cnlNb2RlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEV4aXRWYWx1ZSBleGl0VmFsdWUgPSBleGl0VmFsdWVGb3JBdmFpbGFiaWxpdHko
YXJndW1lbnRzLCBtYXAsIGF2YWlsYWJpbGl0eSk7Ci0gICAgICAgICAgICBpZiAoZXhpdFZhbHVl
Lmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQotICAgICAgICAgICAgICAgIGV4aXRWYWx1
ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJndW1l
bnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgICAgICBleGl0RGVzY3JpcHRvci0+bV92
YWx1ZXNbaV0gPSBleGl0VmFsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAo
YXV0byBoZWFwUGFpciA6IGF2YWlsYWJpbGl0eU1hcC5tX2hlYXApIHsKLSAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBoZWFwUGFpci5rZXkuYmFzZSgpOwotICAgICAgICAgICAgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qIG1hdGVyaWFsaXphdGlvbiA9IG1hcC5nZXQobm9kZSk7Ci0gICAg
ICAgICAgICBFeGl0VmFsdWUgZXhpdFZhbHVlID0gZXhpdFZhbHVlRm9yQXZhaWxhYmlsaXR5KGFy
Z3VtZW50cywgbWFwLCBoZWFwUGFpci52YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZXhpdFZhbHVl
Lmhhc0luZGV4SW5TdGFja21hcExvY2F0aW9ucygpKQotICAgICAgICAgICAgICAgIGV4aXRWYWx1
ZS5hZGp1c3RTdGFja21hcExvY2F0aW9uc0luZGV4QnlPZmZzZXQob2Zmc2V0T2ZFeGl0QXJndW1l
bnRzSW5TdGFja21hcExvY2F0aW9ucyk7Ci0gICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmFk
ZCgKLSAgICAgICAgICAgICAgICBoZWFwUGFpci5rZXkuZGVzY3JpcHRvcigpLAotICAgICAgICAg
ICAgICAgIGV4aXRWYWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAg
RXhpdCB2YWx1ZXM6ICIsIGV4aXREZXNjcmlwdG9yLT5tX3ZhbHVlcywgIlxuIik7Ci0gICAgICAg
ICAgICBpZiAoIWV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBNYXRlcmlhbGl6YXRpb25zOiBcbiIp
OwotICAgICAgICAgICAgICAgIGZvciAoRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qIG1h
dGVyaWFsaXphdGlvbiA6IGV4aXREZXNjcmlwdG9yLT5tX21hdGVyaWFsaXphdGlvbnMpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgICIsIHBvaW50ZXJEdW1wKG1hdGVy
aWFsaXphdGlvbiksICJcbiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvckF2YWlsYWJpbGl0eSgKLSAgICAgICAgU3RhY2ttYXBB
cmd1bWVudExpc3QmIGFyZ3VtZW50cywgY29uc3QgSGFzaE1hcDxOb2RlKiwgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qPiYgbWFwLAotICAgICAgICBBdmFpbGFiaWxpdHkgYXZhaWxhYmls
aXR5KQotICAgIHsKLSAgICAgICAgRmx1c2hlZEF0IGZsdXNoID0gYXZhaWxhYmlsaXR5LmZsdXNo
ZWRBdCgpOwotICAgICAgICBzd2l0Y2ggKGZsdXNoLmZvcm1hdCgpKSB7Ci0gICAgICAgIGNhc2Ug
RGVhZEZsdXNoOgotICAgICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6Ci0gICAgICAgICAgICBp
ZiAoYXZhaWxhYmlsaXR5Lmhhc05vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXhpdFZh
bHVlRm9yTm9kZShhcmd1bWVudHMsIG1hcCwgYXZhaWxhYmlsaXR5Lm5vZGUoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZC4g
SXQgY291bGQgYmUgZGVhZCBpbiBieXRlY29kZSBvciBpdCBjb3VsZCBoYXZlCi0gICAgICAgICAg
ICAvLyBiZWVuIGtpbGxlZCBieSBvdXIgRENFLCB3aGljaCBjYW4gc29tZXRpbWVzIGtpbGwgdGhp
bmdzIGV2ZW4gaWYgdGhleSB3ZXJlIGxpdmUgaW4KLSAgICAgICAgICAgIC8vIGJ5dGVjb2RlLgot
ICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwotCi0gICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6Ci0gICAgICAgIGNhc2UgRmx1c2hlZENlbGw6Ci0gICAgICAgIGNhc2UgRmx1
c2hlZEJvb2xlYW46Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjppbkpTU3RhY2soZmx1
c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEZs
dXNoZWRJbnQzMjoKLSAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50
MzIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICBj
YXNlIEZsdXNoZWRJbnQ1MjoKLSAgICAgICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmluSlNTdGFj
a0FzSW50NTIoZmx1c2gudmlydHVhbFJlZ2lzdGVyKCkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIEZsdXNoZWREb3VibGU6Ci0gICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpp
bkpTU3RhY2tBc0RvdWJsZShmbHVzaC52aXJ0dWFsUmVnaXN0ZXIoKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJJbnZhbGlkIGZsdXNo
IGZvcm1hdCIpOwotICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgfQotICAg
IAotICAgIEV4aXRWYWx1ZSBleGl0VmFsdWVGb3JOb2RlKAotICAgICAgICBTdGFja21hcEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCBjb25zdCBIYXNoTWFwPE5vZGUqLCBFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbio+JiBtYXAsCi0gICAgICAgIE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICAvLyBOT1RFOiBJbiBGVEwtPkIzLCB3ZSBjYW5ub3QgZ2VuZXJhdGUgY29kZSBoZXJlLCBiZWNh
dXNlIG1fb3V0cHV0IGlzIHBvc2l0aW9uZWQgYWZ0ZXIgdGhlCi0gICAgICAgIC8vIHN0YWNrbWFw
IHZhbHVlLiBMaWtlIGFsbCB2YWx1ZXMsIHRoZSBzdGFja21hcCB2YWx1ZSBjYW5ub3QgdXNlIGEg
Y2hpbGQgdGhhdCBpcyBkZWZpbmVkIGFmdGVyCi0gICAgICAgIC8vIGl0LgotICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwotICAgICAgICBBU1NFUlQobm9k
ZS0+aGFzUmVzdWx0KCkpOwotCi0gICAgICAgIGlmIChub2RlKSB7Ci0gICAgICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgIGNhc2UgQm90dG9tVmFsdWU6Ci0gICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBhcmlzZSBpbiBvYmplY3QgbWF0ZXJpYWxpemF0aW9ucy4g
SSBhY3R1YWxseSBkb3VidCB0aGF0IGl0IHdvdWxkLAotICAgICAgICAgICAgICAgIC8vIGJ1dCBp
dCBzZWVtcyB3b3J0aHdoaWxlIHRvIGJlIGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAgICAgICAgICAgIHJldHVybiBFeGl0VmFs
dWU6OmNvbnN0YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmlzUGhhbnRvbUFsbG9j
YXRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6bWF0ZXJpYWxp
emVOZXdPYmplY3QobWFwLmdldChub2RlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2F2YWlsYWJsZVJlY292ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IEF2YWlsYWJsZVJlY292ZXJ5IHJlY292ZXJ5ID0gbV9hdmFpbGFibGVSZWNvdmVyaWVzW2ldOwot
ICAgICAgICAgICAgaWYgKHJlY292ZXJ5Lm5vZGUoKSAhPSBub2RlKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9IEV4aXRWYWx1ZTo6cmVj
b3ZlcnkoCi0gICAgICAgICAgICAgICAgcmVjb3Zlcnkub3Bjb2RlKCksIGFyZ3VtZW50cy5zaXpl
KCksIGFyZ3VtZW50cy5zaXplKCkgKyAxLAotICAgICAgICAgICAgICAgIHJlY292ZXJ5LmZvcm1h
dCgpKTsKLSAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkubGVmdCgpKTsKLSAg
ICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQocmVjb3ZlcnkucmlnaHQoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBE
YXRhRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOwotICAgICAgICAKLSAgICAgICAgdmFsdWUg
PSBtX2ludDUyVmFsdWVzLmdldChub2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRJbnQ1
MiwgdmFsdWUudmFsdWUoKSk7Ci0gICAgICAgIAotICAgICAgICB2YWx1ZSA9IG1fc3RyaWN0SW50
NTJWYWx1ZXMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gZXhpdEFyZ3VtZW50KGFyZ3VtZW50cywgRGF0YUZvcm1hdFN0cmljdEludDUy
LCB2YWx1ZS52YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFs
dWVzLmdldChub2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAg
cmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29sZWFuLCB2YWx1ZS52
YWx1ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChu
b2RlKTsKLSAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4
aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRKUywgdmFsdWUudmFsdWUoKSk7Ci0gICAg
ICAgIAotICAgICAgICB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChub2RlKTsKLSAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1
bWVudHMsIERhdGFGb3JtYXREb3VibGUsIHZhbHVlLnZhbHVlKCkpOwotCi0gICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5v
ZGU6ICIsIG5vZGUpLmRhdGEoKSk7Ci0gICAgICAgIHJldHVybiBFeGl0VmFsdWU6OmRlYWQoKTsK
LSAgICB9Ci0KLSAgICBFeGl0VmFsdWUgZXhpdEFyZ3VtZW50KFN0YWNrbWFwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIERhdGFGb3JtYXQgZm9ybWF0LCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAg
ICAgICBFeGl0VmFsdWUgcmVzdWx0ID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoRXhpdEFyZ3Vt
ZW50KGZvcm1hdCwgYXJndW1lbnRzLnNpemUoKSkpOwotICAgICAgICBhcmd1bWVudHMuYXBwZW5k
KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBFeGl0VmFsdWUg
ZXhpdFZhbHVlRm9yVGFpbENhbGwoU3RhY2ttYXBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsK
LSAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKLQotICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKLSAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBjYXNlIEludDUy
Q29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgICAgICByZXR1
cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7Ci0KLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgTG93ZXJlZE5v
ZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChp
c1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRz
LCBEYXRhRm9ybWF0SlMsIHZhbHVlLnZhbHVlKCkpOwotCi0gICAgICAgIHZhbHVlID0gbV9pbnQz
MlZhbHVlcy5nZXQobm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAg
ICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIGJveEludDMy
KHZhbHVlLnZhbHVlKCkpKTsKLQotICAgICAgICB2YWx1ZSA9IG1fYm9vbGVhblZhbHVlcy5nZXQo
bm9kZSk7Ci0gICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBl
eGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIGJveEJvb2xlYW4odmFsdWUudmFs
dWUoKSkpOwotCi0gICAgICAgIC8vIERvdWJsZXMgYW5kIEludDUyIGhhdmUgYmVlbiBjb252ZXJ0
ZWQgYnkgVmFsdWVSZXAoKQotICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NT
dHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRhKCkpOwotICAg
IH0KLSAgICAKLSAgICBib29sIGRvZXNLaWxsKEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIGlm
IChlZGdlLmRvZXNOb3RLaWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQg
YWRkQXZhaWxhYmxlUmVjb3ZlcnkoCi0gICAgICAgIE5vZGUqIG5vZGUsIFJlY292ZXJ5T3Bjb2Rl
IG9wY29kZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgRGF0YUZvcm1hdCBmb3JtYXQpCi0g
ICAgewotICAgICAgICBtX2F2YWlsYWJsZVJlY292ZXJpZXMuYXBwZW5kKEF2YWlsYWJsZVJlY292
ZXJ5KG5vZGUsIG9wY29kZSwgbGVmdCwgcmlnaHQsIGZvcm1hdCkpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGFkZEF2YWlsYWJsZVJlY292ZXJ5KAotICAgICAgICBFZGdlIGVkZ2UsIFJlY292ZXJ5
T3Bjb2RlIG9wY29kZSwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgRGF0YUZvcm1hdCBmb3Jt
YXQpCi0gICAgewotICAgICAgICBhZGRBdmFpbGFibGVSZWNvdmVyeShlZGdlLm5vZGUoKSwgb3Bj
b2RlLCBsZWZ0LCByaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRJbnQz
MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBtX2ludDMyVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0K
LSAgICB2b2lkIHNldEludDUyKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIG1faW50NTJWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7Ci0gICAgfQotICAgIHZvaWQgc2V0U3RyaWN0SW50NTIoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9zdHJpY3RJbnQ1MlZhbHVlcy5zZXQobm9kZSwg
TG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0gICAgdm9pZCBz
ZXRJbnQ1MihOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUsIEludDUyS2luZCBraW5kKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgSW50NTI6Ci0gICAgICAgICAg
ICBzZXRJbnQ1Mihub2RlLCB2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MjoKLSAgICAgICAgICAgIHNldFN0cmljdEludDUy
KG5vZGUsIHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgaW50NTIga2luZCIp
OwotICAgIH0KLSAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVl
KHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0KLSAgICB2b2lkIHNldEJvb2xlYW4oTm9kZSog
bm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV9ib29sZWFuVmFsdWVzLnNldChu
b2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwotICAgIH0KLSAgICB2
b2lkIHNldFN0b3JhZ2UoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
bV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hC
bG9jaykpOwotICAgIH0KLSAgICB2b2lkIHNldERvdWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFs
dWUpCi0gICAgewotICAgICAgICBtX2RvdWJsZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVW
YWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldEludDMyKExW
YWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldEludDMyKG1fbm9kZSwgdmFsdWUpOwotICAg
IH0KLSAgICB2b2lkIHNldEludDUyKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldElu
dDUyKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICB2b2lkIHNldFN0cmljdEludDUyKExWYWx1
ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldFN0cmljdEludDUyKG1fbm9kZSwgdmFsdWUpOwot
ICAgIH0KLSAgICB2b2lkIHNldEludDUyKExWYWx1ZSB2YWx1ZSwgSW50NTJLaW5kIGtpbmQpCi0g
ICAgewotICAgICAgICBzZXRJbnQ1MihtX25vZGUsIHZhbHVlLCBraW5kKTsKLSAgICB9Ci0gICAg
dm9pZCBzZXRKU1ZhbHVlKExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9ub2RlLCB2YWx1ZSk7Ci0gICAgfQotICAgIHZvaWQgc2V0Qm9vbGVhbihMVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBzZXRCb29sZWFuKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICB2
b2lkIHNldFN0b3JhZ2UoTFZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgc2V0U3RvcmFnZSht
X25vZGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGlzVmFsaWQoY29uc3QgTG93ZXJlZE5vZGVWYWx1ZSYgdmFsdWUpCi0gICAgewotICAg
ICAgICBpZiAoIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IW1fZ3JhcGgubV9kb21pbmF0b3JzLT5kb21pbmF0ZXModmFsdWUuYmxvY2soKSwgbV9oaWdoQmxv
Y2spKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQotICAg
IHsKLSAgICAgICAgbV9ncmFwaC5tX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHRhcmdl
dCk7Ci0gICAgfQotCi0gICAgTFZhbHVlIGxvYWRTdHJ1Y3R1cmUoTFZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgTFZhbHVlIHRhYmxlSW5kZXggPSBtX291dC5sb2FkMzIodmFsdWUsIG1faGVh
cHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKLSAgICAgICAgTFZhbHVlIHRhYmxlQmFzZSA9IG1fb3V0
LmxvYWRQdHIoCi0gICAgICAgICAgICBtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAuc3RydWN0dXJl
SURUYWJsZSgpLmJhc2UoKSkpOwotICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0
LmJhc2VJbmRleCgKLSAgICAgICAgICAgIG1faGVhcHMuc3RydWN0dXJlVGFibGUsIHRhYmxlQmFz
ZSwgbV9vdXQuemVyb0V4dFB0cih0YWJsZUluZGV4KSk7Ci0gICAgICAgIHJldHVybiBtX291dC5s
b2FkUHRyKGFkZHJlc3MpOwotICAgIH0KLQotICAgIExWYWx1ZSB3ZWFrUG9pbnRlcihKU0NlbGwq
IHBvaW50ZXIpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKHBvaW50ZXIpOwotICAg
ICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnRQdHIocG9pbnRlcik7Ci0gICAgfQotCi0gICAgTFZh
bHVlIHdlYWtTdHJ1Y3R1cmVJRChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IGFkZFdlYWtSZWZlcmVuY2Uoc3RydWN0dXJlKTsKLSAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0
SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKLSAgICB9Ci0gICAgCi0gICAgTFZhbHVlIHdlYWtTdHJ1
Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICByZXR1cm4gd2Vha1Bv
aW50ZXIoc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgVHlwZWRQb2ludGVyIGFkZHJlc3NG
b3IoTFZhbHVlIGJhc2UsIGludCBvcGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX291dC5hZGRyZXNzKGJhc2UsIG1faGVhcHMudmFyaWFibGVzW29w
ZXJhbmRdLCBvZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50ZXIgcGF5bG9hZEZvcihMVmFs
dWUgYmFzZSwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0Zvcihi
YXNlLCBvcGVyYW5kLCBQYXlsb2FkT2Zmc2V0KTsKLSAgICB9Ci0gICAgVHlwZWRQb2ludGVyIHRh
Z0ZvcihMVmFsdWUgYmFzZSwgaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRk
cmVzc0ZvcihiYXNlLCBvcGVyYW5kLCBUYWdPZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgYWRkcmVzc0ZvcihpbnQgb3BlcmFuZCwgcHRyZGlmZl90IG9mZnNldCA9IDApCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRkcmVzc0ZvcihWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCksIG9mZnNl
dCk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzRm9yKFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kLCBwdHJkaWZmX3Qgb2Zmc2V0ID0gMCkKLSAgICB7Ci0gICAgICAgIGlmIChvcGVyYW5k
LmlzTG9jYWwoKSkKLSAgICAgICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2FwdHVyZWQsIG9w
ZXJhbmQub2Zmc2V0KCksIG9mZnNldCk7Ci0gICAgICAgIHJldHVybiBhZGRyZXNzRm9yKG1fY2Fs
bEZyYW1lLCBvcGVyYW5kLm9mZnNldCgpLCBvZmZzZXQpOwotICAgIH0KLSAgICBUeXBlZFBvaW50
ZXIgcGF5bG9hZEZvcihpbnQgb3BlcmFuZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXlsb2Fk
Rm9yKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciBw
YXlsb2FkRm9yKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkZHJlc3NGb3Iob3BlcmFuZCwgUGF5bG9hZE9mZnNldCk7Ci0gICAgfQotICAgIFR5cGVkUG9p
bnRlciB0YWdGb3IoaW50IG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gdGFnRm9yKFZp
cnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7Ci0gICAgfQotICAgIFR5cGVkUG9pbnRlciB0YWdGb3Io
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRkcmVzc0Zv
cihvcGVyYW5kLCBUYWdPZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBBYnN0cmFjdFZhbHVlIGFi
c3RyYWN0VmFsdWUoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0YXRlLmZv
ck5vZGUobm9kZSk7Ci0gICAgfQotICAgIEFic3RyYWN0VmFsdWUgYWJzdHJhY3RWYWx1ZShFZGdl
IGVkZ2UpCi0gICAgewotICAgICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZShlZGdlLm5vZGUoKSk7
Ci0gICAgfQotICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHByb3ZlblR5cGUoTm9kZSogbm9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlKG5vZGUpLm1fdHlwZTsKLSAgICB9
Ci0gICAgU3BlY3VsYXRlZFR5cGUgcHJvdmVuVHlwZShFZGdlIGVkZ2UpCi0gICAgewotICAgICAg
ICByZXR1cm4gcHJvdmVuVHlwZShlZGdlLm5vZGUoKSk7Ci0gICAgfQotICAgIAotICAgIEpTVmFs
dWUgcHJvdmVuVmFsdWUoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhYnN0cmFj
dFZhbHVlKG5vZGUpLm1fdmFsdWU7Ci0gICAgfQotICAgIEpTVmFsdWUgcHJvdmVuVmFsdWUoRWRn
ZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3ZlblZhbHVlKGVkZ2Uubm9kZSgpKTsK
LSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFN0cnVjdHVy
ZShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWUobm9kZSku
bV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYWJzdHJhY3RT
dHJ1Y3R1cmUoRWRnZSBlZGdlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFic3RyYWN0U3RydWN0
dXJlKGVkZ2Uubm9kZSgpKTsKLSAgICB9Ci0gICAgCi0jaWYgRU5BQkxFKE1BU01fUFJPQkUpCi0g
ICAgdm9pZCBwcm9iZShzdGQ6OmZ1bmN0aW9uPHZvaWQgKENDYWxsSGVscGVyczo6UHJvYmVDb250
ZXh0Kik+IHByb2JlRnVuYykKLSAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShwcm9iZUZ1bmMp
OwotICAgIH0KLSNlbmRpZgotCi0gICAgdm9pZCBjcmFzaCgpCi0gICAgewotICAgICAgICBjcmFz
aChtX2hpZ2hCbG9jay0+aW5kZXgsIG1fbm9kZS0+aW5kZXgoKSk7Ci0gICAgfQotICAgIHZvaWQg
Y3Jhc2goQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25lZCBub2RlSW5kZXgpCi0gICAgewot
I2lmIEFTU0VSVF9ESVNBQkxFRAotICAgICAgICBtX291dC5jYWxsKG1fb3V0LnZvaWRUeXBlLCBt
X291dC5vcGVyYXRpb24oZnRsVW5yZWFjaGFibGUpKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGJs
b2NrSW5kZXgpOwotICAgICAgICBVTlVTRURfUEFSQU0obm9kZUluZGV4KTsKLSNlbHNlCi0gICAg
ICAgIG1fb3V0LmNhbGwoCi0gICAgICAgICAgICBtX291dC52b2lkVHlwZSwKLSAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50UHRyKGZ0bFVucmVhY2hhYmxlKSwKLSAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50UHRyKGNvZGVCbG9jaygpKSwgbV9vdXQuY29uc3RJbnQzMihibG9ja0luZGV4KSwKLSAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIobm9kZUluZGV4KSk7Ci0jZW5kaWYKLSAgICAgICAg
bV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICB9Ci0KLSAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWls
YWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJp
bGl0eTsgfQotICAgIAotICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQotICAg
IENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQot
ICAgIAotICAgIEdyYXBoJiBtX2dyYXBoOwotICAgIFN0YXRlJiBtX2Z0bFN0YXRlOwotICAgIEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkgbV9oZWFwczsKLSAgICBPdXRwdXQgbV9vdXQ7Ci0gICAgUHJv
Y2VkdXJlJiBtX3Byb2M7Ci0gICAgCi0gICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKLSAgICBM
QmFzaWNCbG9jayBtX2hhbmRsZUV4Y2VwdGlvbnM7Ci0gICAgSGFzaE1hcDxERkc6OkJhc2ljQmxv
Y2sqLCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7Ci0gICAgCi0gICAgTFZhbHVlIG1fY2FsbEZyYW1l
OwotICAgIExWYWx1ZSBtX2NhcHR1cmVkOwotICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7Ci0g
ICAgTFZhbHVlIG1fdGFnTWFzazsKLSAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2ludDMyVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fc3RyaWN0SW50NTJWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9pbnQ1MlZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX2pzVmFsdWVWYWx1ZXM7Ci0gICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9ib29sZWFuVmFsdWVzOwotICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1f
c3RvcmFnZVZhbHVlczsKLSAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Rv
dWJsZVZhbHVlczsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJl
dmVudHMgTExWTSBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMu
Ci0gICAgLy8gSXQncyBuaWNlIHRvIGhhdmUgdGhlc2Ugb3B0aW1pemF0aW9ucyBvbiBvdXIgZW5k
IGJlY2F1c2Ugd2UgY2FuIGd1YXJhbnRlZSB0aGVtIGEgYml0IGJldHRlci4KLSAgICAvLyBQcm9i
YWJseSBhbHNvIHNhdmVzIExMVk0gY29tcGlsZSB0aW1lLgotICAgIEhhc2hNYXA8Tm9kZSosIExW
YWx1ZT4gbV9sb2FkZWRBcmd1bWVudFZhbHVlczsKLSAgICAKLSAgICBIYXNoTWFwPE5vZGUqLCBM
VmFsdWU+IG1fcGhpczsKLSAgICAKLSAgICBMb2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3Ig
bV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yOwotICAgIAotICAgIFZlY3RvcjxBdmFpbGFibGVSZWNv
dmVyeSwgMz4gbV9hdmFpbGFibGVSZWNvdmVyaWVzOwotICAgIAotICAgIEluUGxhY2VBYnN0cmFj
dFN0YXRlIG1fc3RhdGU7Ci0gICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RT
dGF0ZT4gbV9pbnRlcnByZXRlcjsKLSAgICBERkc6OkJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwot
ICAgIERGRzo6QmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwotICAgIExCYXNpY0Jsb2NrIG1f
bmV4dExvd0Jsb2NrOwotCi0gICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKLSAgICB1bnNpZ25lZCBt
X25vZGVJbmRleDsKLSAgICBOb2RlKiBtX25vZGU7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1l
c3BhY2UKLQotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYgc3RhdGUpCi17Ci0gICAgTG93ZXJE
RkdUb0xMVk0gbG93ZXJpbmcoc3RhdGUpOwotICAgIGxvd2VyaW5nLmxvd2VyKCk7Ci19Ci0KLX0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKLQotI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQotCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5oCShy
ZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZUTExvd2VyREZHVG9MTFZN
X2gKLSNkZWZpbmUgRlRMTG93ZXJERkdUb0xMVk1faAotCi0jaWYgRU5BQkxFKEZUTF9KSVQpCi0K
LSNpbmNsdWRlICJERkdHcmFwaC5oIgotI2luY2x1ZGUgIkZUTFN0YXRlLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKLQotdm9pZCBsb3dlckRGR1RvTExWTShTdGF0ZSYpOwot
Ci19IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCi0KLSNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
LQotI2VuZGlmIC8vIEZUTExvd2VyREZHVG9MTFZNX2gKLQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTk2NzQ0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzgsNyArMjM4LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
CiAgICAgICAgICAgICByZWdpc3RlclNjcmF0Y2gsIG1hdGVyaWFsaXphdGlvblRvUG9pbnRlcik7
CiAgICAgfTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQgd2UgY29tZSBpbiBoZXJlLCB0aGUgc3Rh
Y2sgdXNlZCB0byBiZSBhcyBMTFZNIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQg
cHVzaFRvU2F2ZSgpLgorICAgIC8vIE5vdGUgdGhhdCB3ZSBjb21lIGluIGhlcmUsIHRoZSBzdGFj
ayB1c2VkIHRvIGJlIGFzIEIzIGxlZnQgaXQgZXhjZXB0IHRoYXQgc29tZW9uZSBjYWxsZWQgcHVz
aFRvU2F2ZSgpLgogICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHZhbHVlIHRoZXkgc2F2
ZWQuIEJ1dCwgd2UgZG8gYXBwcmVjaWF0ZSB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGl0LCBiZWNh
dXNlIHdlIHVzZQogICAgIC8vIHRoYXQgc2xvdCBmb3Igc2F2ZUFsbFJlZ2lzdGVycygpLgogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFdlaWdodC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgJKHJldmlzaW9uIDE5Njc0NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMV2VpZ2h0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDE4ICs1Myw2IEBAIHB1YmxpYzoKIAogICAgIEIzOjpGcmVxdWVuY3lDbGFzcyBmcmVx
dWVuY3lDbGFzcygpIGNvbnN0IHsgcmV0dXJuIHZhbHVlKCkgPyBCMzo6RnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbCA6IEIzOjpGcmVxdWVuY3lDbGFzczo6UmFyZTsgfQogICAgIAotICAgIHVuc2lnbmVk
IHNjYWxlVG9Ub3RhbChkb3VibGUgdG90YWwpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBMTFZN
IGFjY2VwdHMgMzItYml0IHVuc2lnbmVkIGJyYW5jaCB3ZWlnaHRzIGJ1dCBpbiBkdW1wcyBpdCBt
aWdodCBkaXNwbGF5IHRoZW0KLSAgICAgICAgLy8gYXMgc2lnbmVkIHZhbHVlcy4gV2UgZG9uJ3Qg
bmVlZCBhbGwgMzIgYml0cywgc28gd2UganVzdCB1c2UgdGhlIDMxIGJpdHMuCi0gICAgICAgIGRv
dWJsZSByZXN1bHQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KG1fdmFsdWUpICogSU5UX01BWCAvIHRv
dGFsOwotICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICBpZiAocmVzdWx0ID4gSU5UX01BWCkKLSAgICAgICAgICAgIHJldHVybiBJTlRfTUFYOwot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7Ci0gICAgfQotICAg
IAogICAgIC8vIEludmVyc2Ugd2VpZ2h0IGZvciBhIHR3by10YXJnZXQgYnJhbmNoLgogICAgIFdl
aWdodCBpbnZlcnNlKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFdlaWdodGVkVGFyZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExXZWlnaHRlZFRhcmdldC5oCShyZXZpc2lvbiAxOTY3NDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFdlaWdodGVkVGFyZ2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTczLDkgKzczLDggQEAgaW5saW5lIFdlaWdodGVkVGFyZ2V0IHJhcmVseShMQmFzaWNCbG9jawog
ICAgIHJldHVybiBXZWlnaHRlZFRhcmdldChibG9jaywgMCk7CiB9CiAKLS8vIFRoaXMgbWVhbnMg
d2UgbGV0IExMVk0gZmlndXJlIGl0IG91dCBiYXNpYyBvbiBpdHMgc3RhdGljIGVzdGltYXRlcy4g
TExWTSdzIHN0YXRpYwotLy8gZXN0aW1hdGVzIGFyZSB1c3VhbGx5IHByZXR0eSBkYXJuIGdvb2Qs
IHNvIHRoZXJlJ3MgZ2VuZXJhbGx5IG5vdGhpbmcgd3Jvbmcgd2l0aAotLy8gdXNpbmcgdGhpcy4K
Ky8vIEN1cnJlbnRseSBpbiBCMyB0aGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mICJ1c3VhbGx5Iiwg
YnV0IHdlIGxpa2UgdG8gbWFrZSB0aGUgZGlzdGluY3Rpb24gaW4KKy8vIGNhc2Ugd2UgZXZlciBt
YWtlIEIzIHN1cHBvcnQgcHJvcGVyIGJyYW5jaCB3ZWlnaHRzLiBXZSB1c2VkIHRvIGRvIHRoYXQg
aW4gTExWTS4KIGlubGluZSBXZWlnaHRlZFRhcmdldCB1bnN1cmUoTEJhc2ljQmxvY2sgYmxvY2sp
CiB7CiAgICAgcmV0dXJuIFdlaWdodGVkVGFyZ2V0KGJsb2NrLCBXZWlnaHQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAJ
KHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1l
U2h1ZmZsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENh
bGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjCiAgICAgICAgIC8vIGFic29sdXRlbHkg
bmVlZCB0byBsb2FkIHRoZSBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgaW50bwogICAgICAgICAvLyBk
aWZmZXJlbnQgR1BScyBpbml0aWFsbHkgYnV0IG5vdCBlbm91Z2ggcHJlc3N1cmUgdG8KICAgICAg
ICAgLy8gdGhlbiBoYXZlIHRvIHNwaWxsIGFsbCBvZiB0aGVtLiBBbmQgZXZlbiBpbiB0aGF0IGNh
c2UsCi0gICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggTExWTSBzYXZl
cyB0aGUKKyAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBvcmRlciBpbiB3aGljaCBCMyBzYXZl
cyB0aGUKICAgICAgICAgLy8gY2FsbGVlLXNhdmVzLCB3ZSB3aWxsIHByb2JhYmx5IHN0aWxsIGJl
IHNhZmUuIEFueXdheSwKICAgICAgICAgLy8gdGhlIGNvdXBsZSBleHRyYSBtb3ZlIGluc3RydWN0
aW9ucyBjb21wYXJlZCB0byBhbgogICAgICAgICAvLyBlZmZpY2llbnQgY3ljbGUtYmFzZWQgYWxn
b3JpdGhtIGFyZSBub3QgZ29pbmcgdG8gaHVydApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlclNldC5jcHAJKHJldmlzaW9uIDE5Njc0NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNyArMjc4
LDcgQEAgUmVnaXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OmZ0bENhbGxlZVNhdmVSZQogICAgIHJlc3Vs
dC5zZXQoR1BSSW5mbzo6cmVnQ1MzKTsKICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTNCk7
CiAjZWxpZiBDUFUoQVJNNjQpCi0gICAgLy8gTExWTSBtaWdodCBzYXZlIGFuZCB1c2UgYWxsIEFS
TTY0IGNhbGxlZSBzYXZlcyBzcGVjaWZpZWQgaW4gdGhlIEFCSS4KKyAgICAvLyBCMyBtaWdodCBz
YXZlIGFuZCB1c2UgYWxsIEFSTTY0IGNhbGxlZSBzYXZlcyBzcGVjaWZpZWQgaW4gdGhlIEFCSS4K
ICAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CiAgICAgcmVzdWx0LnNldChHUFJJbmZv
OjpyZWdDUzEpOwogICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAxOTY3NDQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQwLDE2ICszNDAsNiBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRp
b25zKCkKICAgICAgICAgT3B0aW9uczo6dXNlT1NSRW50cnlUb0ZUTCgpID0gZmFsc2U7CiAgICAg
fQogCi0jaWYgQ1BVKEFSTTY0KQotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUyNTEwCi0gICAgLy8gV2UncmUgcnVubmluZyBpbnRvIGEgYnVn
IHdoZXJlIHNvbWUgQVJNNjQgdGVzdHMgYXJlIGZhaWxpbmcgaW4gdGhlIEZUTAotICAgIC8vIHdp
dGggd2hhdCBhcHBlYXJzIHRvIGJlIGFuIGxsdm0gYnVnIHdoZXJlIGxsdm0gaXMgbWlzY2FsY3Vs
YXRpbmcgdGhlCi0gICAgLy8gbGl2ZS1vdXQgdmFyaWFibGVzIG9mIGEgcGF0Y2hwb2ludC4gVGhp
cyBjYXVzZXMgdXMgdG8gbm90IGtlZXAgYSAKLSAgICAvLyB2b2xhdGlsZSByZWdpc3RlciBhbGl2
ZSBhY3Jvc3MgYSBDIGNhbGwgaW4gYSBwYXRjaHBvaW50LCBldmVuIHRob3VnaCAKLSAgICAvLyB0
aGF0IHJlZ2lzdGVyIGlzIHVzZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHBhdGNocG9pbnQuCi0g
ICAgT3B0aW9uczo6YXNzdW1lQWxsUmVnc0luRlRMSUNBcmVMaXZlKCkgPSB0cnVlOwotI2VuZGlm
Ci0KICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIHRoZSByZW9wdGltaXphdGlv
biByZXRyeSBjb3VudGVyLiBUaGlzIGlzIHNpbXBseQogICAgIC8vIHRoZSBsYXJnZXN0IHZhbHVl
IGF0IHdoaWNoIHdlIGRvbid0IG92ZXJmbG93IHRoZSBleGVjdXRlIGNvdW50ZXIsIHdoZW4gdXNp
bmcgaXQKICAgICAvLyB0byBsZWZ0LXNoaWZ0IHRoZSBleGVjdXRpb24gY291bnRlciBieSB0aGlz
IGFtb3VudC4gQ3VycmVudGx5IHRoZSB2YWx1ZSBlbmRzCkBAIC0zNzYsMTIgKzM2Niw3IEBAIHZv
aWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICBuYW1lXyMjRGVmYXVsdCgpID0g
ZGVmYXVsdFZhbHVlXzsKICAgICAgICAgICAgIEpTQ19PUFRJT05TKEZPUl9FQUNIX09QVElPTikK
ICN1bmRlZiBGT1JfRUFDSF9PUFRJT04KLSAgICAKLSAgICAgICAgICAgICAgICAvLyBJdCAqcHJv
YmFibHkqIG1ha2VzIHNlbnNlIGZvciBvdGhlciBwbGF0Zm9ybXMgdG8gZW5hYmxlIHRoaXMuCi0j
aWYgUExBVEZPUk0oSU9TKSAmJiBDUFUoQVJNNjQpCi0gICAgICAgICAgICAgICAgdXNlTExWTUZh
c3RJU2VsKCkgPSB0cnVlOwotI2VuZGlmCi0gICAgICAgIAorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gQWxsb3cgZW52aXJvbm1lbnQgdmFycyB0byBvdmVycmlkZSBvcHRpb25zIGlm
IGFwcGxpY2FibGUuCiAgICAgICAgICAgICAvLyBUaGUgZXZuIHZhciBzaG91bGQgYmUgdGhlIG5h
bWUgb2YgdGhlIG9wdGlvbiBwcmVmaXhlZCB3aXRoCiAgICAgICAgICAgICAvLyAiSlNDXyIuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTY3
NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MCwyMiArMTgwLDExIEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3Ry
aW5nOwogICAgIFwKICAgICB2KGJvb2wsIHVzZUZUTEpJVCwgdHJ1ZSwgImFsbG93cyB0aGUgRlRM
IEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCiAgICAgdihib29sLCB1c2VGVExUQkFBLCB0cnVl
LCBudWxscHRyKSBcCi0gICAgdihib29sLCB1c2VMTFZNRmFzdElTZWwsIGZhbHNlLCBudWxscHRy
KSBcCi0gICAgdihib29sLCB1c2VMTFZNU21hbGxDb2RlTW9kZWwsIGZhbHNlLCBudWxscHRyKSBc
Ci0gICAgdihib29sLCBkdW1wTExWTUlSLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwg
dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MsIGZhbHNlLCBudWxscHRyKSBcCi0gICAgdihib29s
LCBsbHZtQWx3YXlzRmFpbHNCZWZvcmVDb21waWxlLCBmYWxzZSwgbnVsbHB0cikgXAotICAgIHYo
Ym9vbCwgbGx2bUFsd2F5c0ZhaWxzQmVmb3JlTGluaywgZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2
KGJvb2wsIGxsdm1TaW1wbGVPcHQsIHRydWUsIG51bGxwdHIpIFwKLSAgICB2KHVuc2lnbmVkLCBs
bHZtQmFja2VuZE9wdGltaXphdGlvbkxldmVsLCAyLCBudWxscHRyKSBcCi0gICAgdih1bnNpZ25l
ZCwgbGx2bU9wdGltaXphdGlvbkxldmVsLCAyLCBudWxscHRyKSBcCi0gICAgdih1bnNpZ25lZCwg
bGx2bVNpemVMZXZlbCwgMCwgbnVsbHB0cikgXAotICAgIHYodW5zaWduZWQsIGxsdm1NYXhTdGFj
a1NpemUsIDEyOCAqIEtCLCBudWxscHRyKSBcCi0gICAgdihib29sLCBsbHZtRGlzYWxsb3dBVlgs
IHRydWUsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIGIzQWx3YXlzRmFpbHNCZWZvcmVDb21waWxl
LCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgYjNBbHdheXNGYWlsc0JlZm9yZUxpbmss
IGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihib29sLCBmdGxDcmFzaGVzLCBmYWxzZSwgbnVsbHB0
cikgLyogZm9vbC1wcm9vZiB3YXkgb2YgY2hlY2tpbmcgdGhhdCB5b3UgZW5kZWQgdXAgaW4gdGhl
IEZUTC4gOy0pICovXAotICAgIHYoYm9vbCwgZnRsQ3Jhc2hlc0lmQ2FudEluaXRpYWxpemVMTFZN
LCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xv
d1BhdGgsICFBU1NFUlRfRElTQUJMRUQsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGFzc3VtZUFs
bFJlZ3NJbkZUTElDQXJlTGl2ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIHVzZUFj
Y2Vzc0lubGluaW5nLCB0cnVlLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4QWNjZXNz
VmFyaWFudExpc3RTaXplLCA4LCBudWxscHRyKSBcCiAgICAgdihib29sLCB1c2VQb2x5dmFyaWFu
dERldmlydHVhbGl6YXRpb24sIHRydWUsIG51bGxwdHIpIFwKQEAgLTIyMCw5ICsyMDksNiBAQCB0
eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICBcCiAgICAgdihib29sLCB1c2VQ
cm9maWxlciwgZmFsc2UsIG51bGxwdHIpIFwKICAgICBcCi0gICAgdihib29sLCBmb3JjZVVEaXM4
NkRpc2Fzc2VtYmxlciwgZmFsc2UsIG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGZvcmNlTExWTURp
c2Fzc2VtYmxlciwgZmFsc2UsIG51bGxwdHIpIFwKLSAgICBcCiAgICAgdihib29sLCB1c2VBcmNo
aXRlY3R1cmVTcGVjaWZpY09wdGltaXphdGlvbnMsIHRydWUsIG51bGxwdHIpIFwKICAgICBcCiAg
ICAgdihib29sLCBicmVha09uVGhyb3csIGZhbHNlLCBudWxscHRyKSBcCkBAIC0zNzgsNyArMzY0
LDYgQEAgZW51bSBPcHRpb25FcXVpdmFsZW5jZSB7CiAgICAgdihhbHdheXNEb0Z1bGxDb2xsZWN0
aW9uLCB1c2VHZW5lcmF0aW9uYWxHQywgSW52ZXJ0ZWRPcHRpb24pIFwKICAgICB2KGVuYWJsZU9T
UkVudHJ5VG9ERkcsIHVzZU9TUkVudHJ5VG9ERkcsIFNhbWVPcHRpb24pIFwKICAgICB2KGVuYWJs
ZU9TUkVudHJ5VG9GVEwsIHVzZU9TUkVudHJ5VG9GVEwsIFNhbWVPcHRpb24pIFwKLSAgICB2KGVu
YWJsZUxMVk1GYXN0SVNlbCwgdXNlTExWTUZhc3RJU2VsLCBTYW1lT3B0aW9uKSBcCiAgICAgdihl
bmFibGVBY2Nlc3NJbmxpbmluZywgdXNlQWNjZXNzSW5saW5pbmcsIFNhbWVPcHRpb24pIFwKICAg
ICB2KGVuYWJsZVBvbHl2YXJpYW50RGV2aXJ0dWFsaXphdGlvbiwgdXNlUG9seXZhcmlhbnREZXZp
cnR1YWxpemF0aW9uLCBTYW1lT3B0aW9uKSBcCiAgICAgdihlbmFibGVQb2x5bW9ycGhpY0FjY2Vz
c0lubGluaW5nLCB1c2VQb2x5bW9ycGhpY0FjY2Vzc0lubGluaW5nLCBTYW1lT3B0aW9uKSBcCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvci5oCShyZXZpc2lvbiAxOTY3MzEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvci5oOjE5NjczMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKKyNk
ZWZpbmUgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKKworI2lmIEVOQUJMRShXRUJBU1NF
TUJMWSkgJiYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRlZFR5cGVz
LmgiCisKKyNkZWZpbmUgVU5VU0VEIDAKKworbmFtZXNwYWNlIEpTQyB7CisKK3VzaW5nIEZUTDo6
TEJhc2ljQmxvY2s7Cit1c2luZyBGVEw6OkxWYWx1ZTsKKworY2xhc3MgV0FTTUZ1bmN0aW9uTExW
TUlSR2VuZXJhdG9yIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIExWYWx1ZSBFeHByZXNzaW9uOwor
ICAgIHR5cGVkZWYgaW50IFN0YXRlbWVudDsKKyAgICB0eXBlZGVmIFZlY3RvcjxMVmFsdWU+IEV4
cHJlc3Npb25MaXN0OworICAgIHN0cnVjdCBNZW1vcnlBZGRyZXNzIHsKKyAgICAgICAgTWVtb3J5
QWRkcmVzcyh2b2lkKikgeyB9CisgICAgICAgIE1lbW9yeUFkZHJlc3MoTFZhbHVlIGluZGV4LCB1
aW50MzJfdCBvZmZzZXQpCisgICAgICAgICAgICA6IGluZGV4KGluZGV4KQorICAgICAgICAgICAg
LCBvZmZzZXQob2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgTFZhbHVlIGlu
ZGV4OworICAgICAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgfTsKKyAgICB0eXBlZGVmIExCYXNp
Y0Jsb2NrIEp1bXBUYXJnZXQ7CisgICAgZW51bSBjbGFzcyBKdW1wQ29uZGl0aW9uIHsgWmVybywg
Tm9uWmVybyB9OworCisgICAgdm9pZCBzdGFydEZ1bmN0aW9uKGNvbnN0IFZlY3RvcjxXQVNNVHlw
ZT4mIGFyZ3VtZW50cywgdWludDMyX3QgbnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxlcywgdWludDMy
X3QgbnVtYmVyT2ZGMzJMb2NhbFZhcmlhYmxlcywgdWludDMyX3QgbnVtYmVyT2ZGNjRMb2NhbFZh
cmlhYmxlcykKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
CisgICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudHMpOworICAgICAgICBVTlVTRURfUEFSQU0o
bnVtYmVyT2ZJMzJMb2NhbFZhcmlhYmxlcyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJP
ZkYzMkxvY2FsVmFyaWFibGVzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG51bWJlck9mRjY0TG9j
YWxWYXJpYWJsZXMpOworICAgIH0KKworICAgIHZvaWQgZW5kRnVuY3Rpb24oKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICB9CisKKyAgICBMVmFs
dWUgYnVpbGRTZXRMb2NhbChXQVNNT3BLaW5kIG9wS2luZCwgdWludDMyX3QgbG9jYWxJbmRleCwg
TFZhbHVlIHZhbHVlLCBXQVNNVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wS2luZCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsb2NhbEluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOwor
ICAgIH0KKworICAgIExWYWx1ZSBidWlsZFNldEdsb2JhbChXQVNNT3BLaW5kIG9wS2luZCwgdWlu
dDMyX3QgZ2xvYmFsSW5kZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTShvcEtpbmQpOworICAgICAgICBVTlVTRURfUEFSQU0oZ2xvYmFsSW5kZXgpOworICAgICAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAg
ICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgdm9pZCBidWlsZFJldHVybihMVmFsdWUg
dmFsdWUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJldHVyblR5cGUpOworICAgIH0KKworICAgIExWYWx1
ZSBidWlsZEltbWVkaWF0ZUkzMih1aW50MzJfdCBpbW1lZGlhdGUpCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oaW1t
ZWRpYXRlKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVp
bGRJbW1lZGlhdGVGMzIoZmxvYXQgaW1tZWRpYXRlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7
CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkSW1tZWRp
YXRlRjY0KGRvdWJsZSBpbW1lZGlhdGUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0oaW1tZWRpYXRlKTsKKyAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRHZXRMb2NhbCh1aW50
MzJfdCBsb2NhbEluZGV4LCBXQVNNVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxvY2FsSW5kZXgp
OworICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7Cisg
ICAgfQorCisgICAgTFZhbHVlIGJ1aWxkR2V0R2xvYmFsKHVpbnQzMl90IGdsb2JhbEluZGV4LCBX
QVNNVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKHR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1
ZSBidWlsZENvbnZlcnRUeXBlKExWYWx1ZSB2YWx1ZSwgV0FTTUV4cHJlc3Npb25UeXBlIGZyb21U
eXBlLCBXQVNNRXhwcmVzc2lvblR5cGUgdG9UeXBlLCBXQVNNVHlwZUNvbnZlcnNpb24gY29udmVy
c2lvbikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisg
ICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShmcm9tVHlw
ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0b1R5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0o
Y29udmVyc2lvbik7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVl
IGJ1aWxkTG9hZChjb25zdCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBXQVNNRXhwcmVz
c2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5cGUsIE1lbW9y
eUFjY2Vzc0NvbnZlcnNpb24gY29udmVyc2lvbikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlBZGRyZXNz
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25UeXBlKTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKG1lbW9yeVR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0oY29udmVyc2lvbik7Cisg
ICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkU3RvcmUoV0FT
TU9wS2luZCBvcEtpbmQsIGNvbnN0IE1lbW9yeUFkZHJlc3MmIG1lbW9yeUFkZHJlc3MsIFdBU01F
eHByZXNzaW9uVHlwZSBleHByZXNzaW9uVHlwZSwgV0FTTU1lbW9yeVR5cGUgbWVtb3J5VHlwZSwg
TFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wS2luZCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShtZW1vcnlBZGRyZXNzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGV4cHJlc3Npb25UeXBlKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKG1lbW9yeVR5cGUpOworICAgICAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWls
ZFVuYXJ5STMyKExWYWx1ZSB2YWx1ZSwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxkVW5hcnlGMzIoTFZhbHVlIHZhbHVlLCBX
QVNNT3BFeHByZXNzaW9uRjMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFs
dWUgYnVpbGRVbmFyeUY2NChMVmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25GNjQgb3ApCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBV
TlVTRURfUEFSQU0odmFsdWUpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICBy
ZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZEJpbmFyeUkzMihMVmFsdWUg
bGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFN
KGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFS
QU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWls
ZEJpbmFyeUYzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uRjMy
IG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAg
ICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0K
KworICAgIExWYWx1ZSBidWlsZEJpbmFyeUY2NChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBX
QVNNT3BFeHByZXNzaW9uRjY0IG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVT
RURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAgICAgICByZXR1
cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZFJlbGF0aW9uYWxJMzIoTFZhbHVl
IGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJB
TShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVp
bGRSZWxhdGlvbmFsRjMyKExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Np
b25JMzIgb3ApCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgorICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdo
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7Cisg
ICAgfQorCisgICAgTFZhbHVlIGJ1aWxkUmVsYXRpb25hbEY2NChMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAg
ICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBVTlVTRURfUEFSQU0ob3ApOworICAg
ICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKworICAgIExWYWx1ZSBidWlsZE1pbk9yTWF4STMy
KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCisgICAg
eworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShvcCk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZh
bHVlIGJ1aWxkTWluT3JNYXhGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhw
cmVzc2lvbkY2NCBvcCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBt
ZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHJpZ2h0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKKyAgICAgICAgcmV0dXJuIFVOVVNF
RDsKKyAgICB9CisKKyAgICBMVmFsdWUgYnVpbGRDYWxsSW50ZXJuYWwodWludDMyX3QgZnVuY3Rp
b25JbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNp
Z25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNF
RF9QQVJBTShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlz
dCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOworICAgICAgICBVTlVTRURfUEFS
QU0ocmV0dXJuVHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZh
bHVlIGJ1aWxkQ2FsbEluZGlyZWN0KHVpbnQzMl90IGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgs
IExWYWx1ZSBpbmRleCwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3Qg
V0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkK
KyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAg
IFVOVVNFRF9QQVJBTShmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKGluZGV4KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlzdCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShzaWduYXR1cmUpOworICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJu
VHlwZSk7CisgICAgICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCisgICAgTFZhbHVlIGJ1aWxk
Q2FsbEltcG9ydCh1aW50MzJfdCBmdW5jdGlvbkltcG9ydEluZGV4LCBjb25zdCBWZWN0b3I8TFZh
bHVlPiYgYXJndW1lbnRMaXN0LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01F
eHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uSW1wb3J0SW5k
ZXgpOworICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRMaXN0KTsKKyAgICAgICAgVU5VU0VE
X1BBUkFNKHNpZ25hdHVyZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKKyAg
ICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKKyAgICB2b2lkIGFwcGVuZEV4cHJlc3Npb25M
aXN0KFZlY3RvcjxMVmFsdWU+JiBleHByZXNzaW9uTGlzdCwgTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VE
X1BBUkFNKGV4cHJlc3Npb25MaXN0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIGRpc2NhcmQoTFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGxpbmtUYXJnZXQoTEJhc2ljQmxvY2sgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Cisg
ICAgfQorCisgICAgdm9pZCBqdW1wVG9UYXJnZXQoTEJhc2ljQmxvY2sgdGFyZ2V0KQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VE
X1BBUkFNKHRhcmdldCk7CisgICAgfQorCisgICAgdm9pZCBqdW1wVG9UYXJnZXRJZihKdW1wQ29u
ZGl0aW9uLCBMVmFsdWUgdmFsdWUsIExCYXNpY0Jsb2NrIHRhcmdldCkKKyAgICB7CisgICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7CisgICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOworICAgIH0KKworICAgIHZvaWQg
c3RhcnRMb29wKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRo
b2QuCisgICAgfQorCisgICAgdm9pZCBlbmRMb29wKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgfQorCisgICAgdm9pZCBzdGFydFN3aXRjaCgp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgorICAgIH0K
KworICAgIHZvaWQgZW5kU3dpdGNoKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcyBtZXRob2QuCisgICAgfQorCisgICAgdm9pZCBzdGFydExhYmVsKCkKKyAgICB7Cisg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgfQorCisgICAgdm9p
ZCBlbmRMYWJlbCgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgIH0KKworICAgIExCYXNpY0Jsb2NrIGJyZWFrVGFyZ2V0KCkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCisgICAgICAgIHJldHVybiBVTlVT
RUQ7CisgICAgfQorCisgICAgTEJhc2ljQmxvY2sgY29udGludWVUYXJnZXQoKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgcmV0dXJuIFVO
VVNFRDsKKyAgICB9CisKKyAgICBMQmFzaWNCbG9jayBicmVha0xhYmVsVGFyZ2V0KHVpbnQzMl90
IGxhYmVsSW5kZXgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgorICAgICAgICBVTlVTRURfUEFSQU0obGFiZWxJbmRleCk7CisgICAgICAgIHJldHVybiBV
TlVTRUQ7CisgICAgfQorCisgICAgTEJhc2ljQmxvY2sgY29udGludWVMYWJlbFRhcmdldCh1aW50
MzJfdCBsYWJlbEluZGV4KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKGxhYmVsSW5kZXgpOworICAgICAgICByZXR1
cm4gVU5VU0VEOworICAgIH0KKworICAgIHZvaWQgYnVpbGRTd2l0Y2goTFZhbHVlIHZhbHVlLCBj
b25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VzLCBjb25zdCBWZWN0b3I8TEJhc2ljQmxvY2s+JiB0
YXJnZXRzLCBMQmFzaWNCbG9jayBkZWZhdWx0VGFyZ2V0KQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KKyAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsK
KyAgICAgICAgVU5VU0VEX1BBUkFNKGNhc2VzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHRhcmdl
dHMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVmYXVsdFRhcmdldCk7CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCisKKyNl
bmRpZiAvLyBXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3JfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQjNJUkdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3IuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKLSNk
ZWZpbmUgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKKyNpZm5kZWYgV0FTTUZ1bmN0aW9u
QjNJUkdlbmVyYXRvcl9oCisjZGVmaW5lIFdBU01GdW5jdGlvbkIzSVJHZW5lcmF0b3JfaAogCiAj
aWYgRU5BQkxFKFdFQkFTU0VNQkxZKSAmJiBFTkFCTEUoRlRMX0pJVCkKIApAQCAtMzcsNyArMzcs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIHVzaW5nIEZUTDo6TEJhc2ljQmxvY2s7CiB1c2luZyBGVEw6
OkxWYWx1ZTsKIAotY2xhc3MgV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yIHsKK2NsYXNzIFdB
U01GdW5jdGlvbkIzSVJHZW5lcmF0b3IgewogcHVibGljOgogICAgIHR5cGVkZWYgTFZhbHVlIEV4
cHJlc3Npb247CiAgICAgdHlwZWRlZiBpbnQgU3RhdGVtZW50OwpAQCAtMzkxLDQgKzM5MSw0IEBA
IHB1YmxpYzoKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJBU1NFTUJMWSkKIAotI2VuZGlmIC8vIFdB
U01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvcl9oCisjZW5kaWYgLy8gV0FTTUZ1bmN0aW9uQjNJUkdl
bmVyYXRvcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25M
TFZNSVJHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0b3IuaAkocmV2aXNpb24gMTk2NzQ0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsMzk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvcl9o
Ci0jZGVmaW5lIFdBU01GdW5jdGlvbkxMVk1JUkdlbmVyYXRvcl9oCi0KLSNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpICYmIEVOQUJMRShGVExfSklUKQotCi0jaW5jbHVkZSAiRlRMQWJicmV2aWF0ZWRU
eXBlcy5oIgotCi0jZGVmaW5lIFVOVVNFRCAwCi0KLW5hbWVzcGFjZSBKU0MgewotCi11c2luZyBG
VEw6OkxCYXNpY0Jsb2NrOwotdXNpbmcgRlRMOjpMVmFsdWU7Ci0KLWNsYXNzIFdBU01GdW5jdGlv
bkxMVk1JUkdlbmVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiBMVmFsdWUgRXhwcmVzc2lv
bjsKLSAgICB0eXBlZGVmIGludCBTdGF0ZW1lbnQ7Ci0gICAgdHlwZWRlZiBWZWN0b3I8TFZhbHVl
PiBFeHByZXNzaW9uTGlzdDsKLSAgICBzdHJ1Y3QgTWVtb3J5QWRkcmVzcyB7Ci0gICAgICAgIE1l
bW9yeUFkZHJlc3Modm9pZCopIHsgfQotICAgICAgICBNZW1vcnlBZGRyZXNzKExWYWx1ZSBpbmRl
eCwgdWludDMyX3Qgb2Zmc2V0KQotICAgICAgICAgICAgOiBpbmRleChpbmRleCkKLSAgICAgICAg
ICAgICwgb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIExWYWx1
ZSBpbmRleDsKLSAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgIH07Ci0gICAgdHlwZWRlZiBM
QmFzaWNCbG9jayBKdW1wVGFyZ2V0OwotICAgIGVudW0gY2xhc3MgSnVtcENvbmRpdGlvbiB7IFpl
cm8sIE5vblplcm8gfTsKLQotICAgIHZvaWQgc3RhcnRGdW5jdGlvbihjb25zdCBWZWN0b3I8V0FT
TVR5cGU+JiBhcmd1bWVudHMsIHVpbnQzMl90IG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMsIHVp
bnQzMl90IG51bWJlck9mRjMyTG9jYWxWYXJpYWJsZXMsIHVpbnQzMl90IG51bWJlck9mRjY0TG9j
YWxWYXJpYWJsZXMpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0
aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0oYXJndW1lbnRzKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKG51bWJlck9mSTMyTG9jYWxWYXJpYWJsZXMpOwotICAgICAgICBVTlVTRURfUEFSQU0obnVt
YmVyT2ZGMzJMb2NhbFZhcmlhYmxlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShudW1iZXJPZkY2
NExvY2FsVmFyaWFibGVzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGVuZEZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgfQotCi0gICAg
TFZhbHVlIGJ1aWxkU2V0TG9jYWwoV0FTTU9wS2luZCBvcEtpbmQsIHVpbnQzMl90IGxvY2FsSW5k
ZXgsIExWYWx1ZSB2YWx1ZSwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwot
ICAgICAgICBVTlVTRURfUEFSQU0obG9jYWxJbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNF
RDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRTZXRHbG9iYWwoV0FTTU9wS2luZCBvcEtpbmQs
IHVpbnQzMl90IGdsb2JhbEluZGV4LCBMVmFsdWUgdmFsdWUsIFdBU01UeXBlIHR5cGUpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0ob3BLaW5kKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGdsb2JhbEluZGV4KTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwot
ICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIHZvaWQgYnVpbGRSZXR1cm4oTFZh
bHVlIHZhbHVlLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2
YWx1ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyZXR1cm5UeXBlKTsKLSAgICB9Ci0KLSAgICBM
VmFsdWUgYnVpbGRJbW1lZGlhdGVJMzIodWludDMyX3QgaW1tZWRpYXRlKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFN
KGltbWVkaWF0ZSk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVl
IGJ1aWxkSW1tZWRpYXRlRjMyKGZsb2F0IGltbWVkaWF0ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShpbW1lZGlh
dGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZElt
bWVkaWF0ZUY2NChkb3VibGUgaW1tZWRpYXRlKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGltbWVkaWF0ZSk7Ci0g
ICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkR2V0TG9jYWwo
dWludDMyX3QgbG9jYWxJbmRleCwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsb2NhbElu
ZGV4KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VE
OwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZEdldEdsb2JhbCh1aW50MzJfdCBnbG9iYWxJbmRl
eCwgV0FTTVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShnbG9iYWxJbmRleCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBM
VmFsdWUgYnVpbGRDb252ZXJ0VHlwZShMVmFsdWUgdmFsdWUsIFdBU01FeHByZXNzaW9uVHlwZSBm
cm9tVHlwZSwgV0FTTUV4cHJlc3Npb25UeXBlIHRvVHlwZSwgV0FTTVR5cGVDb252ZXJzaW9uIGNv
bnZlcnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9k
LgotICAgICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0oZnJv
bVR5cGUpOwotICAgICAgICBVTlVTRURfUEFSQU0odG9UeXBlKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGNvbnZlcnNpb24pOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExW
YWx1ZSBidWlsZExvYWQoY29uc3QgTWVtb3J5QWRkcmVzcyYgbWVtb3J5QWRkcmVzcywgV0FTTUV4
cHJlc3Npb25UeXBlIGV4cHJlc3Npb25UeXBlLCBXQVNNTWVtb3J5VHlwZSBtZW1vcnlUeXBlLCBN
ZW1vcnlBY2Nlc3NDb252ZXJzaW9uIGNvbnZlcnNpb24pCi0gICAgewotICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obWVtb3J5QWRk
cmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlwZSk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbnZlcnNpb24p
OwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFN0b3Jl
KFdBU01PcEtpbmQgb3BLaW5kLCBjb25zdCBNZW1vcnlBZGRyZXNzJiBtZW1vcnlBZGRyZXNzLCBX
QVNNRXhwcmVzc2lvblR5cGUgZXhwcmVzc2lvblR5cGUsIFdBU01NZW1vcnlUeXBlIG1lbW9yeVR5
cGUsIExWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShvcEtpbmQpOwotICAgICAgICBVTlVTRURf
UEFSQU0obWVtb3J5QWRkcmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShleHByZXNzaW9uVHlw
ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShtZW1vcnlUeXBlKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKHZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
YnVpbGRVbmFyeUkzMihMVmFsdWUgdmFsdWUsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFVuYXJ5RjMyKExWYWx1ZSB2YWx1
ZSwgV0FTTU9wRXhwcmVzc2lvbkYzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0gICAgICAg
IFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAg
TFZhbHVlIGJ1aWxkVW5hcnlGNjQoTFZhbHVlIHZhbHVlLCBXQVNNT3BFeHByZXNzaW9uRjY0IG9w
KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAg
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAg
ICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlJMzIoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUg
YnVpbGRCaW5hcnlGMzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lv
bkYzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2Qu
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAg
ICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRCaW5hcnlGNjQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCwgV0FTTU9wRXhwcmVzc2lvbkY2NCBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsKLSAgICAgICAg
VU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsKLSAgICAgICAg
cmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRSZWxhdGlvbmFsSTMyKExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01PcEV4cHJlc3Npb25JMzIgb3ApCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURf
UEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVl
IGJ1aWxkUmVsYXRpb25hbEYzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHBy
ZXNzaW9uSTMyIG9wKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1l
dGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0o
cmlnaHQpOwotICAgICAgICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VE
OwotICAgIH0KLQotICAgIExWYWx1ZSBidWlsZFJlbGF0aW9uYWxGNjQoTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0KTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKG9wKTsK
LSAgICAgICAgcmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICBMVmFsdWUgYnVpbGRNaW5Pck1h
eEkzMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0LCBXQVNNT3BFeHByZXNzaW9uSTMyIG9wKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAgICAgICAg
VU5VU0VEX1BBUkFNKGxlZnQpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOwotICAgICAg
ICBVTlVTRURfUEFSQU0ob3ApOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExWYWx1ZSBidWlsZE1pbk9yTWF4RjY0KExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQsIFdBU01P
cEV4cHJlc3Npb25GNjQgb3ApCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRo
aXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShyaWdodCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShvcCk7Ci0gICAgICAgIHJldHVybiBV
TlVTRUQ7Ci0gICAgfQotCi0gICAgTFZhbHVlIGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90IGZ1
bmN0aW9uSW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNvbnN0IFdB
U01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCi0g
ICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBV
TlVTRURfUEFSQU0oZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVu
dExpc3QpOwotICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKHJldHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAg
IExWYWx1ZSBidWlsZENhbGxJbmRpcmVjdCh1aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUlu
ZGV4LCBMVmFsdWUgaW5kZXgsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiBhcmd1bWVudExpc3QsIGNv
bnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5
cGUpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAg
ICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShpbmRleCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShhcmd1bWVudExpc3QpOwot
ICAgICAgICBVTlVTRURfUEFSQU0oc2lnbmF0dXJlKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJl
dHVyblR5cGUpOwotICAgICAgICByZXR1cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExWYWx1ZSBi
dWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCwgY29uc3QgVmVjdG9y
PExWYWx1ZT4mIGFyZ3VtZW50TGlzdCwgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlLCBX
QVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbkltcG9y
dEluZGV4KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGFyZ3VtZW50TGlzdCk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShzaWduYXR1cmUpOwotICAgICAgICBVTlVTRURfUEFSQU0ocmV0dXJuVHlwZSk7
Ci0gICAgICAgIHJldHVybiBVTlVTRUQ7Ci0gICAgfQotCi0gICAgdm9pZCBhcHBlbmRFeHByZXNz
aW9uTGlzdChWZWN0b3I8TFZhbHVlPiYgZXhwcmVzc2lvbkxpc3QsIExWYWx1ZSB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVO
VVNFRF9QQVJBTShleHByZXNzaW9uTGlzdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
Ci0gICAgfQotCi0gICAgdm9pZCBkaXNjYXJkKExWYWx1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBsaW5rVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQp
OwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0KExCYXNpY0Jsb2NrIHRhcmdldCkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVO
VVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIH0KLQotICAgIHZvaWQganVtcFRvVGFyZ2V0SWYoSnVt
cENvbmRpdGlvbiwgTFZhbHVlIHZhbHVlLCBMQmFzaWNCbG9jayB0YXJnZXQpCi0gICAgewotICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICBVTlVTRURfUEFS
QU0odmFsdWUpOwotICAgICAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICB9Ci0KLSAgICB2
b2lkIHN0YXJ0TG9vcCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMg
bWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgZW5kTG9vcCgpCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRTd2l0
Y2goKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIG1ldGhvZC4KLSAg
ICB9Ci0KLSAgICB2b2lkIGVuZFN3aXRjaCgpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAgIHZvaWQgc3RhcnRMYWJlbCgpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgIH0KLQotICAg
IHZvaWQgZW5kTGFiZWwoKQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICB9Ci0KLSAgICBMQmFzaWNCbG9jayBicmVha1RhcmdldCgpCi0gICAgewot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgbWV0aG9kLgotICAgICAgICByZXR1cm4g
VU5VU0VEOwotICAgIH0KLQotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVlVGFyZ2V0KCkKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIHJldHVy
biBVTlVTRUQ7Ci0gICAgfQotCi0gICAgTEJhc2ljQmxvY2sgYnJlYWtMYWJlbFRhcmdldCh1aW50
MzJfdCBsYWJlbEluZGV4KQotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
IG1ldGhvZC4KLSAgICAgICAgVU5VU0VEX1BBUkFNKGxhYmVsSW5kZXgpOwotICAgICAgICByZXR1
cm4gVU5VU0VEOwotICAgIH0KLQotICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVlTGFiZWxUYXJnZXQo
dWludDMyX3QgbGFiZWxJbmRleCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTShsYWJlbEluZGV4KTsKLSAgICAgICAg
cmV0dXJuIFVOVVNFRDsKLSAgICB9Ci0KLSAgICB2b2lkIGJ1aWxkU3dpdGNoKExWYWx1ZSB2YWx1
ZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlcywgY29uc3QgVmVjdG9yPExCYXNpY0Jsb2Nr
PiYgdGFyZ2V0cywgTEJhc2ljQmxvY2sgZGVmYXVsdFRhcmdldCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBtZXRob2QuCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShjYXNlcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTSh0
YXJnZXRzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlZmF1bHRUYXJnZXQpOwotICAgIH0KLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkFTU0VNQkxZKQot
Ci0jZW5kaWYgLy8gV0FTTUZ1bmN0aW9uTExWTUlSR2VuZXJhdG9yX2gKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAkocmV2aXNp
b24gMTk2NzQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNXQVNNTW9kdWxlLmgiCiAjaW5jbHVkZSAiV0FT
TUZ1bmN0aW9uQ29tcGlsZXIuaCIKLSNpbmNsdWRlICJXQVNNRnVuY3Rpb25MTFZNSVJHZW5lcmF0
b3IuaCIKKyNpbmNsdWRlICJXQVNNRnVuY3Rpb25CM0lSR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAi
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oIgogCiAjZGVmaW5lIFBST1BBR0FURV9FUlJPUigp
IGRvIHsgaWYgKCFtX2Vycm9yTWVzc2FnZS5pc051bGwoKSkgcmV0dXJuIDA7IH0gd2hpbGUgKDAp
Cg==
</data>
<flag name="review"
          id="296454"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>